欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于 .Net Core runtimeconfig 文件说明

程序员文章站 2022-03-22 14:21:03
在项目的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

rollforwardonnocandidatefx的值
可兼容的.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;