前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET 运行时设置

.NET 运行时设置

作者头像
leon公众号精选
发布2022-04-27 16:16:57
9190
发布2022-04-27 16:16:57
举报

.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 部分指定运行时配置选项。如下: ”

代码语言:javascript
复制
"configProperties": {
  "config-property-name1": "config-value1",
  "config-property-name2": "config-value2"
}

示例 [appname].runtimeconfig.template.json 文件

如果要将这些选项放在输出 JSON 文件中,请将它们嵌套在 runtimeOptions 属性下。

代码语言:javascript
复制
{
  "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 属性。

代码语言:javascript
复制
{
  "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 属性:

代码语言:javascript
复制
<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) 方法以编程方式定义环境变量。

下面的示例演示如何在命令行中设置环境变量:

代码语言:javascript
复制
# Windows
set DOTNET_GCRetainVM=1

# Powershell
$env:DOTNET_GCRetainVM="1"

# Unix
export DOTNET_GCRetainVM=1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师高级俱乐部 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • .NET 运行时设置
    • runtimeconfig.json
      • 示例 [appname].runtimeconfig.template.json 文件
        • 示例 runtimeconfig.template.json 文件
          • MSBuild 属性
            • 环境变量
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档