深い.NETコアプリミティブ(3つ)の理解 - runtimeconfig.jsonの深い理解

オリジナル:ディープダイブ.NETコアプリミティブに 、第3部:深さruntimeconfig.json
著者:ネイトマクマスターの
翻訳:プリミティブ.NETのコア(C)の深い理解-深くruntimeconfig.json
翻訳:Lamond呂

先行レビュー

簡単な紹介

各.NET Coreアプリケーションは、名前の含まれxxxx.runtimeconfig.jsonたファイルを。このファイルには、様々な構成を制御するために使用することができます。開発者のほとんどは、本当にあまりにもそれがSDKファイルによって生成されるので、このファイルを懸念し、私は何かを理解することを学ぶために私たちの価値があるとは思いません。このファイルは、そのようなアプリケーションは、スレッドプールとガベージコレクションを調整し、.NETのコアの以降のバージョンを使用して実行しているとして、いくつかの構成でのVisual Studioには表示されませ制御するために使用されます。

ファイルの役割

技術的には、runtimeconfig.jsonそれぞれの実世界のための.NETのコアアプリケーションを保持するために持っているように、ファイルは、必要ですが、いくつかの実用的な要因によるものではないされruntimeconfig.jsonたファイルを。このファイルは手動で編集することができます。そして、deps.jsonファイル異なるが、runtimeconfig.json理解しやすいです。このドキュメントの主な役割は、(のみFDD用-プログラムを定義するために必要なフレームワーク共有されているframework-dependency deployment)だけでなく、実行するためのいくつかの他のオプションを、私は以下にそれらを一覧表示されます。

簡単な例

以下はの最も典型的なの一つであるruntimeconfig.jsonファイルの内容。

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.1",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "2.1.0"
    }
  }
}

私はの完全な構造書かれているruntimeconfig.jsonあなたは、あなたがチェックすることができます興味を持っている場合は、ファイルを<https://gist.github.com/natemcmaster/0bdee16450f8ec1823f2c11af880ceeb>を

runtimeconfig.template.json

.NETのコアでは、プロジェクトファイルに含まれていない、いくつかの設定オプションがあります.csproj設定。あなたはこれらのオプションを設定したい場合はセットされ、2つのオプションがあり、プロジェクトがコンパイルされた後、一つは、手動で編集されたruntimeconfig.jsonファイルを、別のは、使用することですruntimeconfig.template.jsonファイルを。一方、configure持続する場合はもちろん、私はあなたがテンプレートを使用する方法をお勧めします。

SDKのプロジェクトのビルド(ビルド)からとなります場合は.csproj、テンプレートの展開を読むことによって、に基づいて設定ファイル。ここでは、いくつかの簡単な手順をテンプレートを使用する必要があります。

  1. 新しいプロジェクトを作成しますdotnet new console -n MyApp)(

  2. 現在のプロジェクトのディレクトリには、名前の作成runtimeconfig.template.jsonファイルを。

  3. 次のように設定ファイル

    {
       "rollForwardOnNoCandidateFx": 2
    }
  4. 実行dotnet build

ルック、より多くの何もありません。今、私たちは見ることができbin/Debug/netacoreapp.21/MyApp.runtimeconfig.json、適切に確認してくださいテンプレートを動作させるために。

Visual Studioのインテリセンス

Visual Studioのエディタについては、私はJSON構造を書かれている、あなたは直接使用することができます。あなたの現在のプロジェクトに次のコードを入れて行う必要があるruntimeconfig.template.jsonことができるファイル。

{
  "$schema": "https://gist.githubusercontent.com/natemcmaster/0bdee16450f8ec1823f2c11af880ceeb/raw/runtimeconfig.template.schema.json"
}

実行時設定オプション

フレームワーク、バージョン、以前にスクロールメカニズム

.NET Frameworkのコアがサポートするパラレルバージョンをインストールし、共有.NET Coreアプリケーションの起動時に、そのため、あなたはバージョンを選択する必要があります。次の設定オプションは、一般的にアプリケーション共有ロードすべきフレームワーク、および負荷への共有フレームワークのバージョンを構成するために使用されます。

注意:一般的には、デフォルトのSDK生成された設定は十分に良いされているが、時には我々は、.NETのコアが起動したときに一般的な問題を解決するためにそれらを変更する必要があります。

任意の互換性のあるフレームワークのバージョンを見つけることができませんでした。指定されたフレームワーク「Microsoft.NETCore.App」、バージョン「XYZ」が見つかりませんでした。

共有フレームワーク

.NETコアは、共有フレームの名前を指定して共有枠組みを指定することです。構成フレームワークのバージョンで指定する現在使用中のアプリケーションの最小バージョンです。あなたはそれがこの最小構成ファイルをカバーするために変更することは理解できない場合は、唯一の方法は、使用することですdotnet exec --fx-versionコマンドを。

.NETのコアの以下のバージョン3.0では、あなただけの共有フレームワークを指定することができます。

JSON

{
  "runtimeOptions": {
    "framework": {
      "name": "Microsoft.AspNetCore.App",
      "version": "2.2.0"
    }
  }
}

.csproj

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" />
</ItemGroup>

.NETコア3.0と上記マルチ共有フレームワークをサポートしているため、そう追加の共有フレームワークはもはやパッケージへの参照として必要とされません。

JSON

{
  "runtimeOptions": {
    "frameworks": [
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "3.0.0"
      },
      {
        "name": "Microsoft.WindowsDesktop.App",
        "version": "3.0.0"
      }
    ]
  }
}

.csproj

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App" />
  <FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>

自動的にプログラム後に、.NETのコアを実行します

これは、.NETのコア3.0は、新しい設定オプションです。

デフォルトでは、.NETのコアは、現在の枠組みの最高シェアパッチを当てたバージョンを見つけようとして行きます。あなたは、このバージョンを見つけることができない場合は、それが使用されます前滚、新しいバージョンをチェックする(ロールフォワード)機能を。このオプションは、対象となる前滚制御戦略。

JSON

{
  "runtimeOptions": {
    "rollForward": "Major"
  }
}

.csproj

現在の.csprojプロジェクトファイルには、この構成で実装されていません。

あなたはできるhttps://github.com/dotnet/designs/blob/master/accepted/runtime-binding.mdこの仕様の設定を見つけます。この構成では、公式の設計文書は、以下の説明をしました

RollForward値について、いくつかのオプションのパラメータがあります。

  • LatestPatch - 元パッチ済みのバージョンにロールアップし、この構成のロール特性の最小バージョンは、コンフィギュレーションの前に無効になります。
  • Minor-マイナーバージョンが存在しない場合には、最も低いマイナーバージョンにロールフォワードするために必要。要求が存在のマイナーバージョン、もしLatestPatchポリシー
  • Major-の主なバージョンが見つからない必要な場合には、最低限のメジャーバージョン、マイナーバージョンと最低までロールフォワード。メジャーバージョン要求が存在する場合、Minorポリシー
  • LatestMinor - 最高のマイナーバージョンへのロールフォワードは、マイナーバージョンが存在していても、現在の要求であれば
  • LatestMajor - メジャーバージョンと最高のマイナーバージョンにロールアップ先の、メジャーバージョンでも、現在の要求が存在した場合
  • Disable - 元NAロール特性。バインドのみ指定されたバージョン。それは無効になります前に、能力はパッチの最新バージョンをロールバックするので、ほとんどのシナリオでは、この戦略は、推奨されません。これは、テストを行うための唯一の方法をお勧めします。

Minorデフォルト値は、現在設定されています。あなたはより多くの情報が必要な場合は、を参照することができます公式ドキュメント

上記の設定値では、ほかにDisable選択肢に、他のオプションは、最も高いパッチを当てたバージョンを選択しようとしている利用可能です。

注:LatestMinorLatestMajor(例えば管理COMコンポーネント)管理対象コンポーネントは、非管理に適用し、ホストしています

自動的にプロジェクトを実行するためのパッチの上位バージョンを使用します(前のバージョン3.0、.NETのコアへ)

.NETコア3.0で、このポリシーを使用して、上記のようにお勧めしますが、より簡単な「ロールフォワード」オプションは推奨されません。

デフォルトでは、.NETのコアは、プログラムを実行するために、共有の枠組みの最高パッチを当てたバージョンを使用して、ターゲット・マシンにインストールされます。あなたは使用することができapplyPatches、この機能を無効にするには、パラメータを。

JSON

{
  "runtimeOptions": {
    "applyPatches": false
  }
}

.csproj

現在の.csprojプロジェクトファイルには、この構成で実装されていません。

プロジェクトを実行するための自動最高のメジャーバージョンまたはマイナーバージョン(3.0以前.NETのコアへのバージョン)

.NETコア3.0で、このポリシーを使用して、上記のようにお勧めしますが、より簡単な「ロールフォワード」オプションは推奨されません。

デフォルトでは、自動的に.NETのコアの試みは、共有フレームワーク、メインとマイナーバージョンやアプリケーションの同じバージョンあなたが現在指定されたバージョンを実行している最高のパッチバージョンを見つけます。ていない場合でも、それは自動的に最新バージョンにロールフォワードされます。この構成は、ロールフォワード戦略によって制御されます。

JSON

{
  "runtimeOptions": {
    "rollForwardOnNoCandidateFx": 1
  }
}

.csproj

現在の.csprojプロジェクトファイルには、この構成で実装されていません。

このパラメータの値は、0,1,2に設定することができます。あなたは詳細を見ることができ、設計ドキュメントの詳細については。

ときに指定された時間枠バージョン2.1.0例えば、.NETコアは、このパラメータの値は、次のフレームワーク互換性のあるバージョンを使用して決定されるであろう。

rollForwardOnNoCandidateFx フレームワークの互換性のあるバージョン
0 >=2.1.0, < 2.2.0
1(デフォルト) >=2.1.0, < 3.0.0
2 >=2.1.0

ターゲットフレームの名前

これは、パッケージストアランタイムの実装の詳細です。

JSON

{
  "runtimeOptions": {
    "tfm": "netcoreapp2.1"
  }
}

.csproj

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

組立検出経路

ホストは見つけるために追加のフォルダを指定するには、このパラメータを使用することができます.deps.jsonアセンブリファイルにリストされたファイルを。あなたは一連の記事を表示することができます最初の章のを、この引数がどのように動作するかを確認するために。

JSON

{
  "runtimeOptions": {
    "additionalProbingPaths": [
      "C:\\Users\\nmcmaster\\.nuget\\packages\\"
    ]
  }
}

.csproj

<ItemGroup>
  <AdditionalProbingPath Include="$(USERPROFILE)\.nuget\packages" />
</ItemGroup>

注:.csproj設定項目は、最終的に表示されるruntimeconfig.dev.jsonファイル、ファイルのみを開発中に使用されますが、本番環境で使用されることはありません。本番環境では、セットにテンプレートファイルを使用することができますruntimeconfig.json

実行時設定

configPropertiesプロパティは、実行するキー/値ペアのリストです。基本的には、ここでの設定値と考えることができますが、最も一般的に使用される構成は、一般的に以下の数です。

JSON

{
  "runtimeOptions": {
    "configProperties": {
      "key": "value"
    }
  }
}

一般的な実行時設定

設定名 タイプ 説明
System.GC.Server ブーリアン サーバーのガベージコレクションを有効にするかどうか
System.GC.Concurrent ブーリアン コンカレントガベージコレクションを有効にするかどうか
System.GC.RetainVM ブーリアン 代わりに、バックオペレーティングシステムにそれを解放する、将来の使用のために待機リストにセグメントを削除するかどうか。
System.Runtime.TieredCompilation ブーリアン 階層的なコンパイルが有効になっています
System.Threading.ThreadPool.MinThreads 整数 スレッドプールのカバー内のスレッドの最小数
System.Threading.ThreadPool.MaxThreads 整数 スレッドプールのカバー内のスレッドの最大数
System.Globalization.Invariant ブーリアン 一定モードが有効、無効のグローバリゼーション動作であります

以下は、上記の構成については、ドキュメントのいくつかであります

これらの構成は、あなたが置くことができ.csproj、ファイルを。あなたはより多くの設定をしたい場合は、最善の解決策を表示することでMicrosoft.NET.Sdk.targetsファイルを。

<PropertyGroup>
  <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
  <ServerGarbageCollection>true</ServerGarbageCollection>
  <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
  <ThreadPoolMinThreads>1</ThreadPoolMinThreads>
  <ThreadPoolMaxThreads>100</ThreadPoolMaxThreads>
  <!-- Supported as of .NET Core SDK 3.0 Preview 1 -->
  <TieredCompilation>true</TieredCompilation>
  <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

他の実行中のコンフィギュレーション時間

フレームワークによって提供される構成に加えて、.NETのコアは、開発者が独自の構成を指定することができます。あなたはできるSystem.AppContext.GetData、これらの値のメソッドを取得します。

注:コンフィギュレーション・ビルダー(構成ビルダー)と比較すると、このアプローチは、特にお勧めしません。

JSON

{
  "runtimeOptions": {
    "configProperties": {
      "ArbitraryNumberSetting": 2,
      "ArbitraryStringSetting": "red",
      "ArbitraryBoolSetting": true
    }
  }
}

.csproj

<ItemGroup>
  <RuntimeHostConfigurationOption Include="ArbitraryNumberSetting" Value="2" />
  <RuntimeHostConfigurationOption Include="ArbitraryStringSetting" Value="red" />
  <RuntimeHostConfigurationOption Include="ArbitraryBoolSetting" Value="true" />
</ItemGroup>

C#で、によってSystem.AppContext.GetData指定されたパラメータメソッドの値を取得します

// "red"
var color = System.AppContext.GetData("ArbitraryStringSetting") as string;

詳しい情報

あなたはこのシリーズを表示することができます最初の章で学ぶためのruntimeconfig.jsonファイルの詳細を、そしてそれを使用する方法。同様に、私はあなたが公式経るお勧めします文書ファイルの使用にこれらの変数を設定する方法を見つけるために。

おすすめ

転載: www.cnblogs.com/lwqlun/p/11974590.html