.NET ランタイム構成設定

.NET 5+ (.NET Core バージョンを含む) では、実行時に .NET アプリケーションの動作を構成するために、構成ファイルと環境変数の使用がサポートされています。

Note

このセクションの記事では、.NET ランタイム自体の構成について説明します。 .NET Core 3.1 以降に移行中で、app.config ファイルの置き換えを探している場合や、.NET アプリでカスタム構成値を使用する方法を知りたい場合は、 クラスと「.NET での構成」を参照してください。

次のような場合に、これらの設定の使用が魅力的な選択肢になります。

  • アプリケーションのソースコードを所有または制御していないため、プログラムで構成することができない。
  • アプリケーションの複数のインスタンスが 1 つのシステムで同時に実行され、最適なパフォーマンスを実現するために各インスタンスを構成する必要がある。

.NET は、.NET ランタイムの動作を構成するための次のメカニズムを備えています。

ヒント

環境変数を使用してオプションを構成すると、すべての .NET アプリに設定が適用されます。 runtimeconfig.json またはプロジェクト ファイルでオプションを構成すると、そのアプリケーションにのみ設定が適用されます。

一部の構成値は、AppContext.SetSwitch メソッドを呼び出すことによって、プログラムで設定することもできます。

ドキュメントのこのセクションの記事は、デバッグガベージ コレクションなどのカテゴリに分類されています。 必要に応じて、runtimeconfig.json ファイル、MSBuild のプロパティ、環境変数用の構成オプションを示しています。また相互参照用に .NET Framework プロジェクトの app.config ファイルも示しています。

runtimeconfig.json

プロジェクトがビルドされた場合、出力ディレクトリに [appname].runtimeconfig.json ファイルが生成されます。 runtimeconfig.template.json ファイルがプロジェクト ファイルと同じフォルダーにある場合、それに設定されているすべてのオプションは [appname].runtimeconfig.json ファイルに挿入されます。 そのアプリをご自分でビルドする場合は、構成オプションはすべて runtimeconfig.template.json ファイルに追加してください。 そのアプリを実行しているだけの場合は、 [appname].runtimeconfig.json ファイルに直接挿入します。

注意

  • この [appname].runtimeconfig.json ファイルは、以降のビルドで上書きされます。
  • アプリの OutputTypeExe ではなく、構成オプションを OutputType から Exe にコピーする場合は、プロジェクト ファイルで GenerateRuntimeConfigurationFilestrue に明示的に設定する必要があります。 runtimeconfig.json ファイルが必要なアプリの場合、このプロパティの既定値は です。

runtimeconfig.json ファイルの configProperties セクションに、ランタイム構成オプションを指定します。 このセクションには次の形式が含まれます。

"configProperties": {
  "config-property-name1": "config-value1",
  "config-property-name2": "config-value2"
}

[appname].runtimeconfig.json ファイルの例

このオプションを出力 JSON ファイルに入力する場合、runtimeOptions プロパティの下に入れます。

{
  "runtimeOptions": {
    "tfm": "netcoreapp3.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "3.1.0"
    },
    "configProperties": {
      "System.GC.Concurrent": false,
      "System.Threading.ThreadPool.MinThreads": 4,
      "System.Threading.ThreadPool.MaxThreads": 25
    }
  }
}

runtimeconfig.template.json ファイルの例

このオプションをテンプレート JSON ファイルに入力する場合、runtimeOptions プロパティを省略します。

{
  "configProperties": {
    "System.GC.Concurrent": false,
    "System.Threading.ThreadPool.MinThreads": "4",
    "System.Threading.ThreadPool.MaxThreads": "25"
  }
}

MSBuild プロパティ

一部の実行構成オプションは、 .csproj の MSBuild のプロパティ、または SDK 形式の .NET Core プロジェクトの .vbproj ファイルを使用して設定できます。 MSBuild のプロパティは、runtimeconfig.template.json ファイルで設定されているオプションよりも優先されます。

次に、ランタイム動作を構成する MSBuild のプロパティがある SDK 形式のプロジェクト ファイルの例を示します。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
    <ThreadPoolMinThreads>4</ThreadPoolMinThreads>
    <ThreadPoolMaxThreads>25</ThreadPoolMaxThreads>
  </PropertyGroup>

</Project>

実行時の動作を構成する MSBuild プロパティについては、ガベージ コレクションに関するページなど、各領域の個々の記事に記載されています。 これらは、SDK スタイルのプロジェクトの MSBuild プロパティ リファレンスの「実行時構成」セクションにも記載されています。

環境変数

環境変数を使用すると、ランタイムの構成情報を指定できます。 環境変数を使用して実行時オプションを構成すると、すべての .NET Core アプリに設定が適用されます。 環境変数として指定された構成ノブには、一般に DOTNET_ のプレフィックスが付いています。

注意

.NET 6 では、.NET の実行時の動作を構成する環境変数のプレフィックスが、COMPlus_ ではなく DOTNET_ に標準化されています。 ただし、プレフィックス COMPlus_ は引き続き機能します。 以前のバージョンの .NET ランタイムを使用している場合は、環境変数に COMPlus_ プレフィックスをまだ使用する必要があります。

環境変数は、Windows のコントロール パネル、コマンド ライン、または Windows と Unix ベースのシステムの両方で Environment.SetEnvironmentVariable(String, String) メソッドを呼び出すことによって、プログラムで定義できます。

次の例は、コマンド ラインで環境変数を設定する方法を示しています。

# Windows
set DOTNET_GCRetainVM=1

# Powershell
$env:DOTNET_GCRetainVM="1"

# Unix
export DOTNET_GCRetainVM=1

関連項目