msbuild的GenerateRuntimeConfigurationFiles的目的是什么?

时间:2017-05-25 07:09:17

标签: msbuild .net-core visual-studio-2017 csproj

我将netcore1.1项目升级到新的VS2017 / csproj。

仅在我的测试项目中,它添加了:

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

我做some digging以发现它在bin目录中生成这些文件:

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

这个设置和这些文件是什么,为什么我需要它们?

为什么他们只为我的测试项目生成?

1 个答案:

答案 0 :(得分:7)

这些特定于.NET Core项目并指定

  • 使用哪个运行时和版本。通常是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(实际上它是两步查找:deps.json告诉主机要使用哪些包,此属性告知在哪里查找此包)。由于这仅用于开发,并且不应该在已发布的输出中结束(因为这意味着依赖于目标上的NuGet缓存),因此将此设置放入runtimeconfig.dev.json

“经典”.NET Framework项目还有一个让应用程序设置一些运行时设置的概念。这是通过拥有一个.exe.config文件(如果存在的话,将从项目中的App.config文件构建)来实现的。您可以将runtimeconfig.json视为“新.exe.config”,但唯一有一些重叠的问题。