2017-05-25 8 views
1

私はnetcore1.1プロジェクトを新しいVS2017/csprojにアップグレードしました。私のテストプロジェクトでmsbuildのGenerateRuntimeConfigurationFilesの目的は何ですか?

のみ、それは追加:

<PropertyGroup> 
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> 
</PropertyGroup> 

を私はそれがbinディレクトリにこれらのファイルを生成することを発見するsome diggingをした:

  • ProjectName.Tests.runtimeconfig.json
  • ProjectName.Tests.runtimeconfig.dev.json

これはなに?これらのファイルと、なぜ私はそれらを必要としますか?

なぜテストプロジェクトでのみ生成されたのですか?

答えて

3

これらは、.NETのコアプロジェクトに固有のもので、どのランタイムと、使用するバージョン

  • を指定します。典型的にはMicrosoft.NETCore.App。 「ホストフレームワークリゾルバ」は、sharedフォルダ内の一致するフォルダ(たとえばC:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.1.2)を探します。複数のランタイムを並行してインストールすることができ、ホストはdotnet myapp.dllを実行するときにどのランタイムを使用するかを知る必要があるため、これは重要です。
  • ランタイムの追加オプション。最も顕著なのはおそらく、 "デスクトップ"モードと "サーバー"モードを切り替えるガベージコレクションの設定です。 csprojファイルに<ServerGarbageCollection>true</ServerGarbageCollection>を設定すると、runtimeconfig.jsonの値が設定されます。 (このプロパティは、Webプロジェクトではデフォルトでtrueに設定されます)
  • ホストの追加オプション。たとえば、additionalProbingPathは、復元されたパッケージを含むローカルのNuGetキャッシュに設定されます。 NuGetパッケージを参照してもdllファイルが出力ディレクトリにコピーされることはありません(デフォルト)。ホストは追加のプロービングパスを使用して、この場所で参照されているパッケージ/ dllを検索します(実際には2段階の検索です。deps.jsonはホストに使用するパッケージを指示し、このプロパティはこのパッケージを探す場所を示します)。これは開発にのみ使用され、公開された出力に終わるべきではない(これはターゲット上のNuGetキャッシュに依存することを意味するため)、この設定はruntimeconfig.dev.jsonに入れられます。

"クラシック" .NET Frameworkプロジェクトには、アプリケーションにランタイム設定を適用させるという概念もありました。これは.exe.configファイル(存在する場合、プロジェクトのApp.configファイルから構築される)を持つことによって達成されました。 runtimeconfig.jsonは「新しい.exe.config」と考えることができますが、重複している懸案事項はごくわずかです。

+0

私のプロジェクトの中にはそれがあるものもあれば、できないものもありますか?あなたの答えから、これは常に設定すべき重要な設定だと思われますか? (奇妙なことですが、これまでにこれまで使用したことはなく、問題はありませんでしたか?) – grokky

+0

これらのファイルは.NETコアプロジェクトに固有のものです。 –

+3

runtimeconfigファイルは、「実行可能」なプロジェクトに対して生成する必要があります。デフォルトでは、EXEプロジェクトは「実行可能」なので、GenerateRuntimeConfigurationFilesプロパティは 'OutputType = Exe'を持つときにデフォルトで' true'になります。しかし、テストプロジェクトでは、これがテストプロジェクトであることを知る 'OutputType = Test'プロパティはありません。しかし、テストプロジェクトは "実行可能"なので、生成されたruntimeconfigファイルが必要です。したがって、移行ツールはテストプロジェクトにこのプロパティを設定して生成されます。 –

関連する問題