在項目的bin\debug\netcoreapp${Version}下麵能夠找到這個${AppName}.runtimeconfig.json文件,簡單來說,它就是用來定義應用程式所用的共用框架(.Net Core App)以及運行時選項 的一個文件。 一個簡單的例子 1、用來決定以哪個版本的.ne ...
在項目的bin\debug\netcoreapp${Version}下麵能夠找到這個${AppName}.runtimeconfig.json文件,簡單來說,它就是用來定義應用程式所用的共用框架(.Net Core App)以及運行時選項 的一個文件。
一個簡單的例子
{ "runtimeOptions": { "tfm": "netcoreapp2.2", "framework": { "name": "Microsoft.NETCore.App", "version": "2.2.0" } } }
1、用來決定以哪個版本的.net core 來啟動應用程式的參數
runtimeconfig.json
{ "runtimeOptions": { "framework": { "name": "Microsoft.AspNetCore.App", "version": "2.2.0" //指的是可運行的最低版本 } } }
.csproj 文件中
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" /> </ItemGroup>
覆蓋最小值(不更改文件)的方法是使用dotnet exec --fx--version
到.Net Core >= 3.0 的時候, 可以使用多個共用框架,並且不再作為Nuget包引用,原先做為Nuget包顯示,但實際上並不由Nuget來管理,有可能是開發團隊設計上的一個失誤。
runtimeconfig.json
{ "runtimeOptions": { "frameworks": [ { "name": "Microsoft.AspNetCore.App", "version": "3.0.0" }, { "name": "Microsoft.WindowsDesktop.App", "version": "3.0.0" } ] } }
.csproj 文件中
<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> <FrameworkReference Include="Microsoft.WindowsDesktop.App" /> </ItemGroup>
在.Net Core 3.0 會自動在更高的版本上運行
預設情況下, 會自動匹配主要和次要版本號,在其中找到最高的版本來運行,但如果找不到的話,它就有可能會去找更高的版本來運行,也可以回退以適應缺少特定運行時環境,下麵的rollForward選項可以配置策略,在 這兒 可以找到一些說明
runtimeconfig.json
{ "runtimeOptions": { "rollForward": "Major" } }
rollForward 可用的值
LatestPatch |
前滾到最高的補丁版本,但這會禁用次要版本前滾 |
Minor |
預設使用的值,如果缺少請求的次要版本,請前滾到最低的較高次要版本; 如果存在請求的次要版本,則使用 LatestPatch 策略。 |
Major |
如果請求主要版本缺失,則前滾至最低的較高主要版本和最低次要版本。 如果存在請求的主要版本,則使用 Minor 策略。 |
LatestMinor |
即使請求的次要版本存在,也可以前滾到最高次要版本。 |
LatestMajor |
即使請求主要版本存在,也可以前滾到最高主要和最高次要版本。 |
Disable |
不要向前滾動,僅綁定到指定的版本,不建議將此策略用於正常用途, 因為它禁用前滾到最新修補程式的功能,建議僅用於測試。 |
在.NET Core 3.0之前,預設情況下會使用安裝在電腦上的最高補丁版本的 .Net Core 運行,可以使用如下配置來禁用
註意,此配置在.Net Core 3.0之後已經被廢棄
runtimeconfig.json
{ "runtimeOptions": { "applyPatches": false } }
在.NET Core 3.0之前,如果在電腦上找不適合的 .Net Core 版本(匹配主要和次要版本號,預設情況下最高補丁版本),他有可能會使用電腦上安裝的最新版本,通過以下配置來控制
註意,此配置在.Net Core 3.0之後已經被廢棄
runtimeconfig.json
{ "runtimeOptions": {
"rollForwardOnNoCandidateFx": 1
}
}
舉個例子說明下,如果當前 .Net Core Version = 2.10
|
可相容的.Net Core版本 |
0 | >=2.1.0, < 2.2.0 |
1 |
預設的 >=2.1.0, < 3.0.0 |
2 | >=2.1.0 |
詳細說明可參考這篇文章 Roll Forward On No Candidate Fx
2:運行時包存儲區
這是包在磁碟上的存儲目錄(通常情況下,在 macOS/Linux 上是 /usr/local/share/dotnet/store,在 Windows 上是 C:/Program Files/dotnet/store)
runtimeconfig.json
{ "runtimeOptions": { "tfm": "netcoreapp2.1" //tfm: target framework } }
.csproj
<PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> </PropertyGroup>
3:從其他地方載入Assembly的路徑(類似於PrivatePath)
runtimeconfig.json
{ "runtimeOptions": { "additionalProbingPaths": [ "D:\\Project\\XXXX" ] } }
.csproj
<ItemGroup> <AdditionalProbingPath Include="D:\Project\XXX" /> </ItemGroup>
.csproj只會影響到runtimeconfig.dev.json,這個文件只會在開發的時候有用,到生產環境無效了,這兒要註意
4:運行時設置
這是一個Key Value 鍵值對的設置,可以用來配Thread Pool Size, AppDomain ,Globalization 等的行為 ,詳細可以參考 CLR-Configuration-knobs
runtimeconfig.json
{ "runtimeOptions": { "configProperties": { "key": "value" } } }
除了Net Core 中已定義的,如果需要,也可以配置一些自定義的項,參考如下
runtimeconfig.json
{ "runtimeOptions": { "configProperties": { "DefaultTheme": "blue", "DefaultLanguage": "zh-CN", "IsEnableJwt" : true } } }
.csproj
<ItemGroup> <RuntimeHostConfigurationOption Include="DefaultTheme" Value="blue" /> <RuntimeHostConfigurationOption Include="DefaultLanguage" Value="zh-CN" /> <RuntimeHostConfigurationOption Include="IsEnableJwt" Value="true" /> </ItemGroup>
C# 獲取自定義的值
var defaultTheme = System.AppContext.GetData("DefaultTheme") as string;