.NET 環境変数

この記事の対象: ✔️ .NET Core 3.1 SDK 以降のバージョン

この記事では、.NET SDK、.NET CLI、および .NET ランタイムで使用される環境変数について学習します。 環境変数には、.NET ランタイムで使用されるものもあれば、.NET SDK と .NET CLI でのみ使用されるものがあります。 すべてで使用される環境変数もあります。

.NET ランタイムの環境変数

DOTNET_SYSTEM_NET_HTTP_*

グローバル HTTP 環境変数の設定はいくつかあります。

  • DOTNET_SYSTEM_NET_HTTP_ENABLEACTIVITYPROPAGATION
    • グローバル HTTP 設定の診断ハンドラーのアクティビティの伝達を有効にするかどうかを示します。
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2SUPPORT
    • false または 0 に設定すると、HTTP/2 のサポートが無効になります。これは既定では有効になっています。
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT
    • true または 1 に設定すると、HTTP/3 のサポートが有効になります。これは既定では無効になっています。
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2FLOWCONTROL_DISABLEDYNAMICWINDOWSIZING
    • false または 0 に設定すると、既定値がオーバーライドされ、HTTP/2 の動的ウィンドウ スケーリング アルゴリズムが無効になります。
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_FLOWCONTROL_MAXSTREAMWINDOWSIZE
    • 既定値は 16 MB です。 オーバーライドされた場合、HTTP/2 ストリーム受信ウィンドウの最大サイズを 65,535 より小さくすることはできません。
  • DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_FLOWCONTROL_STREAMWINDOWSCALETHRESHOLDMULTIPLIER
    • 既定値は 1.0 です。 オーバーライドされた場合、値が大きいほど、ウィンドウは短くなりますが、ダウンロードは遅くなります。 0 より小さくすることはできません。

DOTNET_SYSTEM_GLOBALIZATION_*

  • DOTNET_SYSTEM_GLOBALIZATION_INVARIANT: 「インバリアント モードの設定」を参照してください。
  • DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY: 定義済みのカルチャのみを読み込むかどうかを指定します。
  • DOTNET_SYSTEM_GLOBALIZATION_APPLOCALICU: アプリローカル International Components of Unicode (ICU) を使用するかどうかを示します。 詳細については、「アプリローカル ICU」を参照してください。

インバリアント モードを設定する

アプリケーションでは、次のいずれかの方法でインバリアント モードを有効にすることができます。

  1. プロジェクト ファイルで次を実行します。

    <PropertyGroup>
        <InvariantGlobalization>true</InvariantGlobalization>
    </PropertyGroup>
    
  2. runtimeconfig.json ファイルでは、次のようにします。

    {
        "runtimeOptions": {
            "configProperties": {
                "System.Globalization.Invariant": true
            }
        }
    }
    
  3. 環境変数の値 DOTNET_SYSTEM_GLOBALIZATION_INVARIANTtrue または 1 に設定します。

重要

プロジェクト ファイルまたは runtimeconfig.json に設定される値は、環境変数よりも優先度が高くなります。

詳細については、「.NET グローバリゼーション インバリアント モード」を参照してください。

DOTNET_SYSTEM_GLOBALIZATION_USENLS

これは Windows にのみ適用されます。 グローバリゼーションで各国語サポート (NLS) を使用するには、DOTNET_SYSTEM_GLOBALIZATION_USENLStrue または 1 に設定します。 これを使用しないようにするには、DOTNET_SYSTEM_GLOBALIZATION_USENLSfalse または 0 に設定します。

DOTNET_SYSTEM_NET_SOCKETS_*

このセクションでは、次の 2 つの System.Net.Sockets 環境変数について説明します。

  • DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS
  • DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT

ソケットの継続は、イベント スレッドから System.Threading.ThreadPool にディスパッチされます。 これにより、イベント処理をブロックする継続が回避されます。 イベント スレッドで継続を直接実行できるようにするには、DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS1 に設定します。 既定では無効になっています。

注意

必要以上に長時間にわたって IO スレッドに保持することになるコストのかかる作業がある場合、この設定によりパフォーマンスが低下する可能性があります。 テストを行い、この設定によりパフォーマンスが向上することを確認してください。

非常に高い負荷のかかる状態で小さなソケットの読み取りと書き込みを多数行う TechEmpower ベンチマークを使用すると、1 つのソケット エンジンで、最大 30 個の x64 および 8 個の Arm64 CPU コアをビジー状態に保つことができます。 実際の大部分のシナリオでは、このような非常に大きな負荷 (1 秒あたり数十万もの要求) が生じることはなく、ほとんどの場合、1 つのプロデューサーで十分です。 しかし、極端な負荷を処理できることを確認するために、DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT を使用して計算された値をオーバーライドすることができます。 オーバーライドされていない場合は、次の値が使用されます。

  • DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS1 である場合は、Environment.ProcessorCount 値が使用されます。
  • DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS1 でない場合は、RuntimeInformation.ProcessArchitecture が評価されます。
    • Arm または Arm64 の場合、エンジンあたりのコア数の値が 8 に設定され、それ以外の場合は 30 となります。
  • エンジンごとに決定されたコアを使用する場合、最大値は 1、またはエンジンあたりのコア数を超える Environment.ProcessorCount となります。

DOTNET_SYSTEM_NET_DISABLEIPV6

インターネット プロトコル バージョン 6 (IPv6) が無効になっているかどうかを判断するのに役立ちます。 true または 1 に設定すると、System.AppContext で特に指定されていない限り、IPv6 は無効になります。

DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER

次のいずれかのメカニズムを使って、古い HttpClientHandler を使用するようにプロセスを構成できます。

コードから、AppContext クラスを使用します。

AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);

AppContext スイッチは、config ファイルで設定することもできます。 スイッチの構成について詳しくは、「ライブラリ コンシューマー向け AppContext」を参照してください。

環境変数 DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER を使用して同じことを実現できます。 オプトアウトするには、値を false または 0 に設定します。

注意

.NET 5 以降では、HttpClientHandler を使用するためのこの設定は使用できなくなりました。

DOTNET_Jit* および DOTNET_GC*

JIT および JIT で生成される GC 情報には、JIT Stress および GC Hole Stress という 2 つのストレス関連の機能があります。 これらの機能では、開発中に、複雑なアプリケーションを開発することなく、エッジ ケースとより "実世界" のシナリオを見つけるための方法が提供されます。 次の環境変数を使用できます。

  • DOTNET_JitStress
  • DOTNET_JitStressModeNamesOnly
  • DOTNET_GCStress

JIT Stress

いくつかの方法で JIT Stress を有効にすることができます。 DOTNET_JitStress を 0 以外の整数値に設定すると、メソッド名のハッシュに基づいてさまざまなレベルの JIT 最適化が生成されます。 すべての最適化を適用するには、DOTNET_JitStress=2 などを設定します。 JIT Stress を有効にするもう 1 つの方法は、DOTNET_JitStressModeNamesOnly=1 を設定してから、DOTNET_JitStressModeNames 変数でストレス モード (スペース区切り) を要求することです。

例として、以下について考えます。

DOTNET_JitStressModeNames=STRESS_USE_CMOV STRESS_64RSLT_MUL STRESS_LCL_FLDS

GC Hole Stress

GC Hole Stress を有効にすると、GC は常に特定の場所で発生するため、GC ホールを追跡するのに役立ちます。 GC Hole Stress は、DOTNET_GCStress 環境変数を使用して有効にすることができます。

詳細については、「JIT および GC Hole Stress の調査」を参照してください。

JIT メモリ バリア

Arm64 のコード ジェネレーターを使用すると、DOTNET_JitNoMemoryBarriers1 に設定することにより、すべての MemoryBarriers 命令を削除できます。

DOTNET_RUNNING_IN_CONTAINER および DOTNET_RUNNING_IN_CONTAINERS

公式の .NET イメージ (Windows および Linux) では既知の環境変数が設定されます。

  • DOTNET_RUNNING_IN_CONTAINER
  • DOTNET_RUNNING_IN_CONTAINERS

これらの値は、ASP.NET Core ワークロードがコンテナーのコンテキストでいつ実行されるかを判断するために使用されます。

DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION

Console.IsOutputRedirectedtrue である場合は、DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION1 または true に設定することによって、ANSI カラー コードを出力できます。

  • DOTNET_SYSTEM_DIAGNOSTICS_DEFAULTACTIVITYIDFORMATISHIERARCHIAL: 1 または true の場合、既定の [アクティビティ ID] は階層形式となります。
  • DOTNET_SYSTEM_RUNTIME_CACHING_TRACING: デバッグとして実行している場合は、これが true であれば、トレースを有効にすることができます。

DOTNET_DiagnosticPorts

診断ツールが .NET ランタイムと通信できる代替エンドポイントを構成します。 詳細については、診断ポートのドキュメントを参照してください。

DOTNET_DefaultDiagnosticPortSuspend

起動時に一時停止するようにランタイムを構成し、1 に設定された場合、指定された診断ポートからの ''診断 IPC ResumeStartup'' コマンドを待ちます。 既定値は 0 です。 詳細については、診断ポートのドキュメントを参照してください。

DOTNET_EnableDiagnostics

1 に設定すると、 診断ポートを介してデバッグ、プロファイリング、その他の診断が有効になります。 既定値は 1 です。

EventPipe 変数

詳細については、EventPipe の環境変数のページを参照してください。

  • DOTNET_EnableEventPipe: 1 に設定すると、EventPipe を介したトレースが有効になります。
  • DOTNET_EventPipeOutputPath: トレースが書き込まれる出力パス。
  • DOTNET_EventPipeOutputStreaming: 1 に設定すると、アプリの実行中に出力ファイルへのストリーミングが有効になります。 既定では、トレース情報は循環バッファーに蓄積され、コンテンツはアプリのシャットダウン時に書き込まれます。

.NET SDK と CLI 環境変数

DOTNET_ROOT, DOTNET_ROOT(x86)

.NET ランタイムが既定の場所にインストールされていない場合、その場所を指定します。 Windows 上の既定の場所は C:\Program Files\dotnet です。 Linux と macOS 上の既定の場所は /usr/local/share/dotnet です。 この環境変数は、生成された実行可能ファイル (apphosts) を介してアプリを実行する場合にのみ使用されます。 64 ビット OS 上で 32 ビット実行可能ファイルを実行する場合は、代わりに DOTNET_ROOT(x86) が使用されます。

NUGET_PACKAGES

グローバル パッケージ フォルダー。 設定されていない場合は、既定で ~/.nuget/packages (Unix の場合) または %userprofile%\.nuget\packages (Windows の場合) になります。

DOTNET_SERVICING

ランタイムの読み込み時に共有ホストで使用するサービス インデックスの場所を指定します。

最初の実行時に .NET のウェルカムおよびテレメトリ メッセージを表示するかどうかを指定します。 true に設定すると、これらのメッセージは表示されません (値 true1、または yes が受け入れられます)。false に設定するとそれらが許可されます (値 false0、または no が受け入れられます)。 設定しない場合、既定値は false であり、最初の実行時にメッセージが表示されます。 このフラグはテレメトリには影響しません (テレメトリの送信のオプトアウトについては、「DOTNET_CLI_TELEMETRY_OPTOUT」を参照)。

DOTNET_CLI_PERF_LOG

現在の CLI セッションに関するパフォーマンスの詳細をログに記録するかどうかを指定します。 1true、または yes に設定されている場合は有効になります。 この機能は、既定では無効になっています。

DOTNET_GENERATE_ASPNET_CERTIFICATE

ASP.NET Core 証明書を生成するかどうかを指定します。 既定値は true ですが、これは、この環境変数を 0false、または no に設定することによって、オーバーライドできます。

DOTNET_ADD_GLOBAL_TOOLS_TO_PATH

PATH 環境変数にグローバル ツールを追加するかどうかを指定します。 既定値は、true です。 グローバル ツールをパスに追加しないようにするには、0false、または no に設定します。

DOTNET_CLI_TELEMETRY_OPTOUT

.NET ツールの使用に関するデータを収集し、Microsoft に送信するかどうかを指定します。 true に設定するとテレメトリ機能が無効になります (指定できる値は true1、または yes です)。 それ以外の場合は false に設定します。この場合、テレメトリ機能が有効になります (指定できる値は false0、または no です)。 設定されていない場合、既定で false になり、テレメトリ機能はアクティブになります。

DOTNET_SKIP_FIRST_TIME_EXPERIENCE

DOTNET_SKIP_FIRST_TIME_EXPERIENCEtrue に設定されている場合、NuGetFallbackFolder はディスクに展開されず、短いウェルカム メッセージとテレメトリ通知が表示されます。

DOTNET_MULTILEVEL_LOOKUP

.NET ランタイム、共有フレームワーク、または SDK がグローバルな場所から解決されるかどうかを指定します。 設定されていない場合、既定値は 1 (論理 true) です。 グローバルな場所から解決せず、.NET インストールを分離するには、値を 0 (論理 false) に設定します。 複数レベルのルックアップの詳細については、「Multi-level SharedFX Lookup」 (複数レベルの SharedFX ルックアップ) を参照してください。

Note

この環境変数は、.NET 6 以前のバージョンを対象とするアプリケーションにのみ適用されます。 .NET 7 以降では、.NET は 1 つの場所にあるフレームワークのみを検索します。 詳細については、「複数レベルの検索の無効化」を参照してください。

DOTNET_ROLL_FORWARD

ロール フォワード動作を決定します。 詳細については、dotnet コマンドの --roll-forward オプションを参照してください。

DOTNET_ROLL_FORWARD_TO_PRERELEASE

1 (有効) に設定した場合は、リリース バージョンからプレリリース バージョンへのロール フォワードが有効になります。 既定 (0 - 無効) では、.NET ランタイムのリリース バージョンが要求されるとき、インストールされているリリース バージョンのみがロール フォワードによって考慮されます。

詳細については、dotnet コマンドの --roll-forward オプションを参照してください

DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX

0 に設定されている場合、マイナー バージョンのロールフォワードを無効にします。 この設定は、.NET Core 3.0 では、DOTNET_ROLL_FORWARD によって置き換えられます。 代わりに、新しい設定を使用する必要があります。

DOTNET_CLI_UI_LANGUAGE

en-us などのロケール値を使用して、CLI UI の言語を設定します。 サポートされている値は、Visual Studio の場合と同じです。 詳細については、Visual Studio のインストール ドキュメントのインストーラーの言語を変更する方法に関するセクションを参照してください。 .NET リソース マネージャーの規則が適用されるため、完全一致を選択する必要はありません。CultureInfo ツリーで子孫を選択することもできます。 たとえば、fr-CA に設定すると、CLI によって fr の翻訳が検索され、使用されます。 サポートされていない言語に設定すると、CLI は英語にフォールバックします。

DOTNET_DISABLE_GUI_ERRORS

GUI 対応の生成された実行可能ファイルの場合、通常は特定のクラスのエラーに対して表示されるダイアログ ポップアップが無効になります。 この場合、stderr にのみ書き込まれ、終了します。

DOTNET_ADDITIONAL_DEPS

CLI オプション --additional-deps に相当します。

DOTNET_RUNTIME_ID

検出された RID をオーバーライドします。

DOTNET_SHARED_STORE

アセンブリの解決がフォールバックする "共有ストア" の場所。

DOTNET_STARTUP_HOOKS

スタートアップ フックを読み込み、実行するアセンブリの一覧。

DOTNET_BUNDLE_EXTRACT_BASE_DIR

単一ファイル アプリケーションが実行前に抽出されるディレクトリを指定します。

詳細については、「単一ファイルの実行可能ファイル」を参照してください。

DOTNET_CLI_CONTEXT_*

  • DOTNET_CLI_CONTEXT_VERBOSE: 詳細コンテキストを有効にするには、true に設定します。
  • DOTNET_CLI_CONTEXT_ANSI_PASS_THRU: ANSI パススルーを有効にするには、true に設定します。

DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_DISABLE

ワークロードの広告マニフェストのバックグラウンド ダウンロードを無効にします。 既定値は false (無効でない) です。 true に設定すると、ダウンロードは無効になります。 詳細については、「広告マニフェスト」を参照してください。

DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_INTERVAL_HOURS

ワークロードの広告マニフェストのバックグラウンド ダウンロード間の最小時間数を指定します。 既定値は 24 (1 日に 1 回以下の頻度) です。 詳細については、「広告マニフェスト」を参照してください。

COREHOST_TRACE

dotnet.exehostfxrhostpolicy などのホスティング コンポーネントからの診断トレースを制御します。

  • COREHOST_TRACE=[0/1] - 既定値は 0 で、トレースは無効です。 1 に設定すると、診断トレースが有効になります。

  • COREHOST_TRACEFILE=<file path> - COREHOST_TRACE=1 を設定することによってトレースが有効になっている場合にのみ効果があります。 設定すると、指定されたファイルにトレース情報が書き込まれます。それ以外の場合、トレース情報は stderr に書き込まれます。

  • COREHOST_TRACE_VERBOSITY=[1/2/3/4] - 規定値は 4 です。 この設定は、COREHOST_TRACE=1 によってトレースが有効になっている場合にのみ使用されます。

    • 4 - すべてのトレース情報が書き込まれます。
    • 3 - 情報、警告、およびエラー メッセージのみが書き込まれます
    • 2 - 警告およびエラー メッセージのみが書き込まれます。
    • 1 - エラー メッセージのみが書き込まれます。

アプリケーションの起動に関して詳しいトレース情報を取得する一般的な方法は、COREHOST_TRACE=1COREHOST_TRACEFILE=host_trace.txt を設定してアプリケーションを実行することです。 詳細情報を含む新しいファイル host_trace.txt が現在のディレクトリに作成されます。

SuppressNETCoreSdkPreviewMessage

true に設定すると、プレビュー SDK を使用している場合に dotnet を呼び出しても警告が表示されません。

.NET CLI で MSBuild を構成する

MSBuild をアウトプロセスで実行するには、DOTNET_CLI_RUN_MSBUILD_OUTOFPROC 環境変数を 1true、または yes に設定します。 既定では、MSBuild はインプロセスで実行されます。 プロジェクトをビルドするために外部の作業ノードの長時間のプロセスを MSBuild で使用するように強制するには、DOTNET_CLI_USE_MSBUILDNOINPROCNODE1true、または yes に設定します。 これにより、MSBUILDNOINPROCNODE 環境変数が 1 に設定されます。これは MSBuild Server V1 と呼ばれます。これは、エントリ処理によってほとんどの作業がそこに転送されるためです。

DOTNET_MSBUILD_SDK_RESOLVER_*

これらは、解決された SDK のタスクとターゲットを特定のベース ディレクトリから強制的に取得し、特定のバージョンを MSBuild に報告するために使用されるオーバーライドです (不明な場合は null である可能性があります)。 この主なユース ケースの 1 つは、.NET Core SDK を使用して、SDK のタスクとターゲットをデプロイせずにテストすることです。

  • DOTNET_MSBUILD_SDK_RESOLVER_SDKS_DIR: .NET SDK ディレクトリをオーバーライドします。
  • DOTNET_MSBUILD_SDK_RESOLVER_SDKS_VER: .NET SDK のバージョンをオーバーライドします。
  • DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR: dotnet.exe ディレクトリ パスをオーバーライドします。

DOTNET_NEW_PREFERRED_LANG

-lang|--language スイッチを省略した場合に、dotnet new コマンドの既定のプログラミング言語を構成します。 既定値は C# です。 有効な値は、C#F#、または VB です。 詳細については、「dotnet new」を参照してください。

dotnet watch 環境変数

環境変数として使用できる dotnet watch の設定については、dotnet watch 環境変数に関するページを参照してください。

関連項目