深入理解 .NET SDK 环境变量配置指南
概述
在 .NET 开发中,环境变量是控制运行时和工具行为的重要机制。本文将全面介绍 .NET SDK 和 CLI 工具支持的各种环境变量,帮助开发者更好地控制和优化 .NET 应用程序的运行环境。
运行时环境变量
HTTP 相关配置
.NET 提供了多个全局 HTTP 环境变量设置:
DOTNET_SYSTEM_NET_HTTP_ENABLEACTIVITYPROPAGATION:控制是否启用诊断处理程序的全局 HTTP 设置活动传播DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2SUPPORT:设置为false或0可禁用默认启用的 HTTP/2 支持DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT:设置为true或1可启用默认禁用的 HTTP/3 支持DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2FLOWCONTROL_DISABLEDYNAMICWINDOWSIZING:控制 HTTP/2 动态窗口缩放算法
全球化设置
全球化相关的环境变量包括:
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT:启用全球化不变模式DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY:指定是否仅加载预定义的文化DOTNET_SYSTEM_GLOBALIZATION_APPLOCALICU:指示是否使用应用本地的 ICU
启用不变模式的三种方式:
- 在项目文件中设置
<InvariantGlobalization>true</InvariantGlobalization> - 在 runtimeconfig.json 中配置
"System.Globalization.Invariant": true - 设置环境变量
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=true
套接字优化
套接字相关的环境变量可以优化网络性能:
DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS:设置为1允许延续直接在事件线程上运行(默认禁用)DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT:覆盖计算值以处理极端负载
诊断与调试
诊断相关的环境变量:
DOTNET_DiagnosticPorts:配置诊断工具与 .NET 运行时通信的备用端点DOTNET_DefaultDiagnosticPortSuspend:设置为1时,运行时在启动期间暂停并等待诊断命令DOTNET_EnableDiagnostics:设置为0可禁用所有诊断功能
SDK 和 CLI 环境变量
运行时位置
指定 .NET 运行时的位置:
DOTNET_ROOT:指定 .NET 运行时的位置(如果未安装在默认位置)DOTNET_ROOT(x86):在 64 位系统上运行 32 位可执行文件时使用DOTNET_ROOT_X64:在 ARM64 系统上运行 64 位可执行文件时使用
开发体验
控制开发体验的环境变量:
DOTNET_NOLOGO:设置为true可隐藏欢迎和遥测消息DOTNET_CLI_TELEMETRY_OPTOUT:设置为true可退出遥测功能DOTNET_SKIP_FIRST_TIME_EXPERIENCE:设置为true可跳过首次体验设置
工具和包管理
影响工具和包管理的环境变量:
NUGET_PACKAGES:全局包文件夹位置DOTNET_ADD_GLOBAL_TOOLS_TO_PATH:控制是否将全局工具添加到 PATH 环境变量DOTNET_GENERATE_ASPNET_CERTIFICATE:控制是否生成 ASP.NET Core 证书
最佳实践
- 性能调优:在高负载网络应用中,合理配置套接字相关变量可以显著提升性能
- 全球化控制:在不需要本地化的应用中启用不变模式可以减少部署大小
- 诊断调试:利用诊断环境变量可以更灵活地控制调试行为
- 开发环境:在 CI/CD 管道中禁用遥测和首次体验可以简化流程
总结
.NET 环境变量提供了强大的运行时和工具行为控制能力。理解这些变量的作用可以帮助开发者更好地优化应用性能、控制运行时行为并简化开发流程。建议开发者根据具体需求选择合适的配置组合,以获得最佳的开发和应用运行体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



