2017-05-25 104 views
1

我将netcore1.1项目升级到新的VS2017/csproj。msbuild的GenerateRuntimeConfigurationFiles的目的是什么?

在我的测试项目中唯一的,它补充说:

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

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

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

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

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

回答

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项目)
  • 对主机的附加选项。例如additionalProbingPath设置为包含恢复的软件包的本地NuGet缓存。您可能已经注意到,引用NuGet包不会将其dll文件复制到输出目录(默认情况下)。主机使用额外的探测路径来查找在此位置引用的软件包/ dll(实际上,这是一个两步查找:deps.json告诉主机要使用哪些软件包,并且此属性指示在何处查找此软件包)。由于这仅用于开发,并且不应以发布的输出结尾(因为这意味着依赖目标上的NuGet缓存),因此将此设置放入runtimeconfig.dev.json

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

+0

可以,我的一些项目有,有些没有?从你的回答看来,这是一个应该始终设置的重要环境? (奇怪的是,我从来没有使用它,从来没有问题?) – grokky

+0

这些文件是特定于.NET核心项目。 –

+3

需要为任何“可运行”的项目生成runtimeconfig文件。默认情况下,EXE项目是“可运行的”,所以当你有'OutputType = Exe'时,GenerateRuntimeConfigurationFiles属性默认为'true'。但是,对于测试项目,没有'OutputType = Test'属性来知道这是一个测试项目。但测试项目是“可运行的”,所以它们需要生成运行时配置文件。所以迁移工具在测试项目上设置这个属性,以便它们生成。 –