.NET 运行时设置
.NET 5+(包括 .NET Core 版本)支持使用配置文件和环境变量在运行时配置 .NET 应用程序的行为。如果出现以下情况,则运行时配置是一个不错的选择:
你不拥有或控制应用程序的源代码,因此无法以编程方式对其进行配置。
应用程序的多个实例在单个系统上同时运行,并且你想要将每个实例配置为获得最佳性能。
备注
本文档正在编写中。如果你注意到此处提供的信息不完整或不准确,可以创建一个问题告知我们,或提交拉取请求以解决问题。要了解如何提交 dotnet/docs 存储库的拉取请求,请参阅参与者指南.
”
.NET 提供以下机制,它们用于配置运行时应用程序行为:
runtimeconfig.json 文件
MSBuild 属性
环境变量
提示
如果使用环境变量配置运行时选项,会将设置应用于所有 .NET 应用。如果在 runtimeconfig.json 或项目文件中配置运行时选择,则仅将设置应用于此应用程序。
”
某些配置值还可以通过调用 AppContext.SetSwitch 方法以编程方式进行设置。
文档此部分的文章按类别组织,例如调试和垃圾回收。如果适用,将显示 runtimeconfig.json 文件、MSBuild 属性、环境变量的配置选项;对于 .NET Framework 项目,还会显示 app.config 文件的配置选项以便交叉引用。
runtimeconfig.json
构建项目时,将在输出目录中生成 [appname].runtimeconfig.json 文件。如果项目文件所在的文件夹中存在 runtimeconfig.template.json 文件,它包含的任何配置选项都将插入到 [appname].runtimeconfig.json 文件中。如果自行构建应用,请将所有配置选项放在 runtimeconfig.template.json 文件中。如果只是运行应用,请将其直接插入 [appname].runtimeconfig.template.json 文件中。
备注
后续生成中将覆盖 [appname].runtimeconfig.template.json 文件。如果应用的 OutputType 不是 Exe,但你想将配置选项从 runtimeconfig.template.json 复制到 [应用名称].runtimeconfig.json,则必须在项目文件中将 GenerateRuntimeConfigurationFiles 显式设置为 true 。对于需要 runtimeconfig.json 文件的应用,此属性默认设置为 true。在 runtimeconfig.json 文件的 configProperties 部分指定运行时配置选项。如下:
”
"configProperties": {"config-property-name1": "config-value1","config-property-name2": "config-value2"
}
示例 [appname].runtimeconfig.template.json 文件
如果要将这些选项放在输出 JSON 文件中,请将它们嵌套在 runtimeOptions 属性下。
{"runtimeOptions": {"tfm": "netcoreapp3.1","framework": {"name": "Microsoft.NETCore.App","version": "3.1.0"},"configProperties": {"System.GC.Concurrent": false,"System.Threading.ThreadPool.MinThreads": 4,"System.Threading.ThreadPool.MaxThreads": 25}}
}
示例 runtimeconfig.template.json 文件
如果要将这些选项放在模板 JSON 文件中,请省略 runtimeOptions 属性。
{"configProperties": {"System.GC.Concurrent": false,"System.Threading.ThreadPool.MinThreads": "4","System.Threading.ThreadPool.MaxThreads": "25"}
}
MSBuild 属性
可使用 SDK 样式 .NET Core 项目的 .csproj 或 .vbproj 文件中的 MSBuild 属性设置某些运行时配置选项。MSBuild 属性优先于在 runtimeconfig.template.json 文件中设置的选项。
下面是一个示例 SDK 样式项目文件,其中包含用于配置运行时行为的 MSBuild 属性:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>netcoreapp3.1</TargetFramework></PropertyGroup><PropertyGroup><ConcurrentGarbageCollection>false</ConcurrentGarbageCollection><ThreadPoolMinThreads>4</ThreadPoolMinThreads><ThreadPoolMaxThreads>25</ThreadPoolMaxThreads></PropertyGroup></Project>
用于配置运行时行为的 MSBuild 属性记录在每个区域各自的文章中,例如垃圾回收。它们还在 SDK 样式项目的 MSBuild 属性参考的运行时配置部分中列出。
环境变量
环境变量可用于提供一些运行时配置信息。如果使用环境变量配置运行时选项,会将设置应用于所有 .NET Core 应用。指定为环境变量的配置旋钮通常带有 DOTNET_ 前缀。
备注
.NET 6 为用于配置 .NET 运行时行为的环境变量标准化前缀 DOTNET_ 而不是 COMPlus_。但是,COMPlus_ 前缀仍将继续正常工作。如果使用的是早期版本的 .NET 运行时,则环境变量仍应该使用 COMPlus_ 前缀。
”
可以使用 Windows 控制面板、命令行或通过在 Windows 和 Unix 系统上调用 Environment.SetEnvironmentVariable(String, String) 方法以编程方式定义环境变量。
下面的示例演示如何在命令行中设置环境变量:
# Windows
set DOTNET_GCRetainVM=1# Powershell
$env:DOTNET_GCRetainVM="1"# Unix
export DOTNET_GCRetainVM=1