コンテンツにスキップ
Docs Try Aspire
Docs Try

C# の起動プロファイル

.NET ロゴ

Aspire は、AppHost とサービス プロジェクトの両方で定義された 起動プロファイル を活用して、Aspire ベースの分散アプリケーションにおけるデバッグと公開の体験に関する複数の側面の構成を簡素化します。

テンプレートから新しい .NET アプリケーションを作成すると、launchSettings.json という名前のファイルを含む Properties ディレクトリがあることがよくあります。起動設定ファイルには 起動プロファイル の一覧が含まれます。各起動プロファイルは、dotnet がアプリケーションをどのように開始するかを定義する、関連オプションの集合です。

次の JSON は、ASP.NET Core アプリケーションの launchSettings.json ファイルにある起動プロファイルの例です:

JSON — launchSettings.json
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "http://localhost:5130",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"applicationUrl": "https://localhost:7106;http://localhost:5130",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

前述の launchSettings.json ファイルでは、httphttps の 2 つの起動プロファイルを定義しています。それぞれに独自の環境変数、起動 URL、その他のオプションがあります。.NET アプリケーションを起動するときは、使用する起動プロファイルを選択できます:

Terminal
dotnet run --launch-profile https

起動プロファイルを指定しない場合は、既定で最初の起動プロファイルが選択されます。--no-launch-profile オプションを使うと、起動プロファイルなしで .NET アプリケーションを起動することもできます。launchSettings.json ファイルの一部のフィールドは環境変数に変換されます。たとえば applicationUrl フィールドは ASPNETCORE_URLS 環境変数に変換され、ASP.NET Core がバインドするアドレスとポートを制御します。

起動プロファイルを使用して .NET アプリケーションを起動すると、DOTNET_LAUNCH_PROFILE 環境変数には使用された起動プロファイル名が設定されます。

C# AppHost 向けの起動プロファイル

Section titled “C# AppHost 向けの起動プロファイル”

Aspire では、C# AppHost は .NET アプリケーションであるため、他の .NET プロジェクトと同様に launchSettings.json ファイルがあります。次の JSON は、スターター テンプレート(dotnet new aspire-starter)から新しい Aspire プロジェクトを作成したときに生成される launchSettings.json ファイルの例です:

JSON — launchSettings.json
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:17134;http://localhost:15170",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21030",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22057"
}
},
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:15170",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT": "Development",
"ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19240",
"ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20154"
}
}
}
}

Aspire テンプレートでは、通常の ASP.NET Core アプリケーションと同様の起動プロファイル セットが定義されています。C# AppHost プロジェクトを起動すると、DistributedApplication が開始され、Aspire ダッシュボードが Aspire によってオーケストレーションされるリソース情報を取得するために使う Web サーバーをホストします。

AppHost の起動プロファイルと .NET サービス プロジェクト

Section titled “AppHost の起動プロファイルと .NET サービス プロジェクト”

C# AppHost は、複数のサービス プロジェクトの起動を調整する責任を担います。コマンド ライン、Visual Studio、または別の開発環境から AppHost を実行すると、AppHost 用の起動プロファイルが選択されます。続いて AppHost は、起動するサービス プロジェクト内で一致する起動プロファイルを見つけようとし、そのオプションを使ってサービス プロジェクトの環境と既定のネットワーク構成を制御します。

AppHost がサービス プロジェクトを起動する場合、--launch-profile オプションを直接使うわけではありません。代わりに、Aspire は有効な起動プロファイルを解決し、dotnet run および dotnet watch との整合性のために DOTNET_LAUNCH_PROFILE を設定し、(起動プロファイルの applicationUrl フィールドから導出される)ASPNETCORE_URLS 環境変数を別のポートになるよう調整します。既定では、Aspire は WithReplicas を通じた複数インスタンスのサポートのため、ASP.NET Core アプリケーションの前段にリバース プロキシを挿入します。

environmentVariables などのその他の設定は、変更せずにアプリケーションへ渡されます。

理想的には、AppHost とそのサービス プロジェクトの間で起動プロファイル名をそろえることで、AppHost 側でプロファイルを切り替えると連携する全プロジェクトでも一括で切り替えられます。ただし、AddProjectlaunchProfileName を渡すことで、特定プロジェクトで使うプロファイルを指定することもできます:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>(
"inventoryservice",
launchProfileName: "mylaunchprofile");
builder.Build().Run();

前述のコードは、inventoryservice リソースを mylaunchprofile 起動プロファイルのオプションで起動します。起動プロファイルの優先順位ロジックは次のとおりです:

  1. launchProfileName 引数が指定されていれば、その起動プロファイルを使用する。
  2. AppHost と同名の起動プロファイルを使用する(DOTNET_LAUNCH_PROFILE 環境変数を読み取って判定)。
  3. launchSettings.json の既定(先頭)起動プロファイルを使用する。
  4. 起動プロファイルを使用しない。

サービス プロジェクトを起動プロファイルなしで強制起動するには、launchProfileName 引数を null に設定します。

ASP.NET Core プロジェクト向けの起動プロファイルとエンドポイント

Section titled “ASP.NET Core プロジェクト向けの起動プロファイルとエンドポイント”

ASP.NET Core プロジェクトを AppHost に追加する際、Aspire は launchSettings.json ファイルを解析し、適切な起動プロファイルを選択して、applicationUrl フィールド内の URL に基づきアプリケーション モデル内へエンドポイントを自動生成します。自動挿入されたエンドポイントを変更するには WithEndpoint を使用します:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
builder.AddProject<Projects.InventoryService>("inventoryservice")
.WithEndpoint("https", endpoint => endpoint.IsProxied = false);
builder.Build().Run();

前述のコードは、Aspire が .NET アプリケーションの前段に配置するリバース プロキシを無効化し、アプリケーションが HTTP(S) 経由の要求へ直接応答できるようにします。