Heroku での .NET の動作
最終更新日 2025年04月17日(木)
Heroku プラットフォームと .NET buildpack では、デプロイされたあらゆる種類の .NET アプリケーションに対して次の動作が行われます。詳細は、.NET buildpack を参照してください。
.NET アプリケーションのデプロイに関する詳細なガイダンスについては、「Heroku スターターガイド (.NET)」 (クラシック) または「Heroku Fir スターターガイド (.NET)」を参照してください。
自動検出
Heroku では、アプリのルートディレクトリに *.sln
、*.csproj
、*.vbproj
、*.fsproj
のいずれかのファイルが含まれている場合、そのアプリを自動的に .NET アプリとして認識します。
Heroku で .NET アプリケーションが認識されると、次のビルド出力が表示されます。
クラシック buildpack を備えたアプリの場合:
$ git push heroku main
-----> .NET app detected
Cloud Native Buildpack を備えたアプリの場合:
## Heroku .NET Buildpack
ビルド動作
アプリのルートディレクトリには、ソリューション (*.sln
) とプロジェクトファイル (*.csproj
、*.vbproj
、*.fsproj
のいずれか) の両方を含めることができます。buildpack は公開するファイルを次のルールに基づいて選択します。
- ソリューションファイルはプロジェクトファイルよりも優先されます。
- buildpack が複数のソリューションファイルを見つけた場合は、辞書の順序で並べた最初のファイルが使用されます。ルートディレクトリに含めるソリューションファイルは 1 つのみにすることをお勧めします。
- buildpack が複数のプロジェクトファイルを検出すると、エラーを返します。
buildpack は選択したソリューションファイルまたはプロジェクトファイルをビルドし、dotnet publish
コマンドを使用して公開します。
ビルド設定
.NET buildpack は次のパラメータを追加します。
--runtime <rid>
: ターゲットプラットフォームに応じて、ランタイム識別子 (RID) をlinux-amd64
またはlinux-arm64
に設定します。-p:PublishDir=bin/publish
: PublishDir
MSBuild プロパティをbin/publish
に設定し、出力先がプロジェクトファイルに関連する一貫した場所になるようにします。--artifacts-path <temporary-directory>
: アーティファクトパスを一時ディレクトリに設定します。これは、上述のPublishDir
設定と組み合わせた場合、公開済みの出力の実際のパスには影響を与えません。中間ビルドアーティファクトを除外して公開済みの出力を減らすようにのみ設定されています。
この設定により、あらゆるオペレーティングシステム、CPU アーキテクチャ、Release
や Debug
などのビルド設定、Target Framework Moniker (TFM) と互換性のある Procfile
コマンドの書き込みが容易になります。
デフォルトのビルド設定である Release
、および MSBuild の詳細レベルである minimal
は、環境変数の BUILD_CONFIGURATION
や MSBUILD_VERBOSITY_LEVEL
と共にカスタマイズできます。
クラシック buildpack
Heroku Dashboard または CLI を使用して環境変数を設定します。
heroku config:set BUILD_CONFIGURATION=Debug
heroku config:set MSBUILD_VERBOSITY_LEVEL=normal
Cloud Native buildpack
project.toml
ファイルに環境変数を設定します。
[_]
schema-version = "0.2"
[[io.buildpacks.build.env]]
name='BUILD_CONFIGURATION'
value='Debug'
[[io.buildpacks.build.env]]
name='MSBUILD_VERBOSITY_LEVEL'
value='normal'
NuGet 依存関係
dotnet publish
プロセスは、プロジェクトファイルで定義された NuGet 依存関係を復元します。
Fir 世代のアプリの場合、buildpack は復元済みのパッケージをグローバルパッケージキャッシュにキャッシュし、NUGET_PACKAGES
環境変数がデフォルト以外の場所を指すように設定します。キャッシュの過度の増加を防ぐため、20 回使用するごとにキャッシュが消去されます。
.NET ツール
buildpack は .config/dotnet-tools.json
で定義されたローカルの .NET ツールを自動で復元し、それをビルド、公開、テスト (Heroku CI) の間に使用するように設定します。
プロセスタイプの自動検出
最初に、Heroku はプロセスタイプを指定する Procfile を検索します。
ビルドプロセス中にアプリのルートディレクトリに Procfile
がない場合、Heroku は Microsoft.NET.Sdk.Web
や Microsoft.NET.Sdk.Worker
のような既知の「実行可能な」プロジェクト SDK を参照するプロジェクトのプロセスタイプを自動的に追加します。SDK スタイルのプロジェクトについての詳細は、.NET プロジェクト SDK に関するドキュメントを参照してください。検出されたプロセスタイプの詳細はビルドログに書き込まれます。
プロセスの登録
buildpack は、サポートされているプロジェクト SDK を検出すると、以下を使用してプロセスタイプを登録します。
- 名前
web
(ソリューション内で単一の Web アプリケーションのみが検出された場合) - プロジェクト名または
AssemblyName
プロジェクトプロパティ の値- 名前は小文字に変換され、スペース、ドット (
.
)、アンダースコア (_
) はハイフン (-
) に置き換えられて、その他の英数字以外の文字や特殊文字は削除されます。
- 名前は小文字に変換され、スペース、ドット (
- コマンドとして実行可能な公開済みのファイルへのパス
Microsoft.NET.Sdk.Web
およびMicrosoft.NET.Sdk.Razor
の SDK を参照するプロジェクトなど、サポートされている Web アプリの場合は、--urls http://*:$PORT
引数がコマンドに付加されます。
アプリケーションのプロセスタイプを選択または上書きするには、Procfile
を使用します。
サポートされているプロジェクト SDK
次のプロジェクト SDK は、プロセスタイプの自動登録をサポートしています。
OutputType
プロパティ がExe
に設定されているプロジェクトのMicrosoft.NET.Sdk
Microsoft.NET.Sdk.Worker
Microsoft.NET.Sdk.Web
Microsoft.NET.Sdk.Razor
環境
デフォルトの環境変数
.NET buildpack は次の環境変数のデフォルト値を設定します。
DOTNET_ROOT=<dotnet-runtime-path>
: .NET ランタイムの場所を指定します。DOTNET_CLI_TELEMETRY_OPTOUT=true
: .NET ツールのテレメトリーを無効にします。DOTNET_NOLOGO=true
: .NET のウェルカムメッセージをミュートします。DOTNET_RUNNING_IN_CONTAINER=true
: 一部の ASP.NET Core ワークロードで使用される、コンテナ内で実行されている .NET の検出を有効にします。DOTNET_EnableWriteXorExecute=0
: W^X サポートを無効にします。この環境変数は、エミュレートされた AMD64 Docker image を実行するときに ARM64 Mac でのエラーを防止します。
変更された環境変数
buildpack は次の環境変数も変更します。
PATH
: .NET ルートディレクトリがPATH
に追加されるため、完全なパスを指定せずにdotnet
などのコマンドを実行できるようになります。
プロセスタイプ固有の環境変数
PORT=<value>
: Heroku はweb
プロセスタイプにPORT
環境変数を設定します。この値を使用して、HTTP/Web アプリケーションのポートを設定します。
カスタマーサポート
Heroku サポートチャネルのいずれかを通じて問題を報告できます。