2017-05-25 103 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'屬性來知道這是一個測試項目。但測試項目是「可運行的」,所以它們需要生成運行時配置文件。所以遷移工具在測試項目上設置這個屬性,以便它們生成。 –