msbuild 的 GenerateRuntimeConfigurationFiles 的目的是什么?

What is the purpose of msbuild's GenerateRuntimeConfigurationFiles?

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

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

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

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

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

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

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

  • 使用哪个运行时间和版本。通常 Microsoft.NETCore.App。 "host framework resolver" 在 shared 文件夹中查找匹配的文件夹(例如 C:\Program Files\dotnet\shared\Microsoft.NETCore.App.1.2)。这一点很重要,因为可以并排安装多个 运行 次,当您 运行 dotnet myapp.dll.
  • 时,主机需要知道使用哪个
  • 运行时间的其他选项。最突出的可能是在 "desktop" 和 "server" 模式之间切换的垃圾收集设置。当您在 csproj 文件中设置 <ServerGarbageCollection>true</ServerGarbageCollection> 时,这将导致设置 runtimeconfig.json 中的值。 (此 属性 对于 Web 项目默认为 true)
  • 主机的其他选项。 additionalProbingPath 例如设置为包含已恢复包的本地 NuGet 缓存。您可能已经注意到,引用 NuGet 包不会导致将其 dll 文件复制到输出目录(默认情况下)。主机使用额外的探测路径来查找在此位置引用的包/dll(实际上它是一个两步查找:deps.json 告诉主机要使用哪些包,这个 属性 告诉在哪里寻找这个包裹)。由于这仅用于开发,不应最终出现在已发布的输出中(因为这意味着依赖目标上的 NuGet 缓存),此设置被放入 runtimeconfig.dev.json.

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