在本文中,您将了解 .NET SDK、.NET CLI 和 .NET 运行时使用的环境变量。某些环境变量由 .NET 运行时使用,而其他环境变量仅由 .NET SDK 和 .NET CLI 使用。一些环境变量被所有人使用。 .NET 运行时环境变量 DOTNET_SYSTEM_NET_HTTP_* 有几个全局 HTTP 环境变量设置: DOTNET_SYSTEM_NET_HTTP_ENABLEACTIVITYPROPAGATION 指示是否为全局 HTTP 设置启用诊断处理程序的活动传播。 DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2SUPPORT 设置为falseor 时0,禁用 HTTP/2 支持,默认情况下启用。 DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP3SUPPORT 设置为true或 时1,启用 HTTP/3 支持,默认情况下禁用。 DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2FLOWCONTROL_DISABLEDYNAMICWINDOWSIZING 当设置为falseor 时0,覆盖默认值并禁用 HTTP/2 动态窗口缩放算法。 DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_FLOWCONTROL_MAXSTREAMWINDOWSIZE 默认为 16 MB。覆盖时,HTTP/2 流接收窗口的最大大小不能小于 65,535。 DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_FLOWCONTROL_STREAMWINDOWSCALETHRESHOLDMULTIPLIER 默认为 1.0。当被覆盖时,更高的值会导致更短的窗口但下载速度更慢。不能小于0。 DOTNET_SYSTEM_GLOBALIZATION_* DOTNET_SYSTEM_GLOBALIZATION_INVARIANT:请参阅设置不变模式。 DOTNET_SYSTEM_GLOBALIZATION_PREDEFINED_CULTURES_ONLY: 指定是否只加载预定义的文化。 DOTNET_SYSTEM_GLOBALIZATION_APPLOCALICU:指示是否使用应用程序本地Unicode 国际组件(ICU)。有关更多信息,请参阅App-local ICU。 设置不变模式 应用程序可以通过以下任何一种方式启用不变模式: 在项目文件中: XML 复制 <PropertyGroup> <InvariantGlobalization>true</InvariantGlobalization> </PropertyGroup> 在runtimeconfig.json文件中: JSON 复制 { "runtimeOptions": { "configProperties": { "System.Globalization.Invariant": true } } } 通过将环境变量值设置DOTNET_SYSTEM_GLOBALIZATION_INVARIANT为true或1。 重要的 在项目文件或runtimeconfig.json 中设置的值比环境变量具有更高的优先级。 有关详细信息,请参阅.NET 全球化不变模式。 DOTNET_SYSTEM_GLOBALIZATION_USENLS 这仅适用于 Windows。要使全球化使用国家语言支持 (NLS),请将其设置DOTNET_SYSTEM_GLOBALIZATION_USENLS为true或1。DOTNET_SYSTEM_GLOBALIZATION_USENLS要不使用它,请设置为false或0。 DOTNET_SYSTEM_NET_SOCKETS_* 本节重点介绍两个System.Net.Sockets环境变量: DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT 套接字延续从事件线程分派到System.Threading.ThreadPool。这避免了阻塞事件处理的延续。要允许继续直接在事件线程上运行,请设置DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS为1. 默认情况下它是禁用的。 笔记 如果有昂贵的工作最终会占用 IO 线程的时间超过所需时间,则此设置会使性能变差。测试以确保此设置有助于提高性能。 使用 TechEmpower 基准测试,在非常高的负载下生成大量小型套接字读取和写入,单个套接字引擎能够保持最多 30 个 x64 和 8 个 ARM64 CPU 内核的繁忙。绝大多数现实生活场景永远不会产生如此巨大的负载(每秒数十万个请求),拥有一个生产者几乎总是足够的。但是,为了确保可以处理极端负载,您可以使用DOTNET_SYSTEM_NET_SOCKETS_THREAD_COUNT覆盖计算值。未覆盖时,使用以下值: 当DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS是 时1,使用Environment.ProcessorCount值。 如果DOTNET_SYSTEM_NET_SOCKETS_INLINE_COMPLETIONS不是1,则评估RuntimeInformation.ProcessArchitecture: 当 ARM 或 ARM64 时,每个引擎的核心数设置为8,否则为30。 使用确定的每个引擎核心数,1或Environment.ProcessorCount 中每个引擎核心数的最大值。 DOTNET_SYSTEM_NET_DISABLEIPV6 帮助确定 Internet 协议版本 6 (IPv6) 是否已禁用。当设置为true或 时1,除非在System.AppContext 中另有指定,否则 IPv6 将被禁用。 DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER 您可以使用以下机制之一来配置进程以使用旧的HttpClientHandler: 从代码中,使用AppContext类: C# 复制 AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false); 该AppContext交换机还可以通过配置文件设置。有关配置开关的更多信息,请参阅库使用者的 AppContext。 同样可以通过环境变量来实现DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER。要选择退出,请将值设置为false或0。 DOTNET_Jit* 和 DOTNET_GC* JIT 和 JIT 生成的 GC 信息有两个与应力相关的特征:JIT Stress 和 GC Hole Stress。这些功能提供了一种在开发过程中发现边缘案例和更多“真实世界”场景的方法,而无需开发复杂的应用程序。以下环境变量可用: DOTNET_JitStress DOTNET_JitStressModeNamesOnly DOTNET_GCStress JIT压力 可以通过多种方式启用 JIT Stress。设置DOTNET_JitStress为非零整数值以根据方法名称的散列生成不同级别的 JIT 优化。DOTNET_JitStress=2例如,应用所有优化集。启用 JIT Stress 的另一种方法是DOTNET_JitStressModeNamesOnly=1在DOTNET_JitStressModeNames变量中设置并请求以空格分隔的应力模式。 例如,请考虑: 复制 DOTNET_JitStressModeNames=STRESS_USE_CMOV STRESS_64RSLT_MUL STRESS_LCL_FLDS GC 孔应力 启用 GC Hole Stress 会导致 GC 始终发生在特定位置,这有助于追踪 GC 漏洞。可以使用DOTNET_GCStress环境变量启用 GC Hole Stress 。 有关更多信息,请参阅调查 JIT 和 GC 孔应力。 JIT 内存屏障 ARM64 的代码生成器允许MemoryBarriers通过设置DOTNET_JitNoMemoryBarriers为来删除所有指令1。 DOTNET_RUNNING_IN_CONTAINER 和 DOTNET_RUNNING_IN_CONTAINERS 官方 .NET 映像(Windows 和 Linux)设置了众所周知的环境变量: DOTNET_RUNNING_IN_CONTAINER DOTNET_RUNNING_IN_CONTAINERS 这些值用于确定 ASP.NET Core 工作负载何时在容器上下文中运行。 DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION 当Console.IsOutputRedirected为 时true,您可以通过设置DOTNET_SYSTEM_CONSOLE_ALLOW_ANSI_COLOR_REDIRECTION为1或来发出 ANSI 颜色代码true。 DOTNET_SYSTEM_DIAGNOSTICS 和相关变量 DOTNET_SYSTEM_DIAGNOSTICS_DEFAULTACTIVITYIDFORMATISHIERARCHIAL: 当1或 时true,默认的Activity Id格式是分层的。 DOTNET_SYSTEM_RUNTIME_CACHING_TRACING: 当作为 Debug 运行时,如果是 ,则可以启用跟踪true。 单一变量 DOTNET_DefaultDiagnosticPortSuspend:将运行时配置为在启动期间暂停并等待来自指定诊断端口的Diagnostics IPC ResumeStartup命令。 DOTNET_DiagnosticPorts:代表 Mono 诊断端口的值。 DOTNET_EnableDiagnostics:设置为 时1,启用 Mono 诊断。 DOTNET_EnableEventPipe: 设置为 时1,启用 Mono 事件管道。 DOTNET_EventPipeOutputPath:Mono 事件管道的输出路径。 DOTNET_EventPipeOutputStreaming:设置为 时1,启用 Mono 事件管道输出流。 有关详细信息,请参阅.NET 运行时:Mono 诊断和跟踪。 .NET SDK 和 CLI 环境变量 DOTNET_ROOT, DOTNET_ROOT(x86) 指定 .NET 运行时的位置(如果它们未安装在默认位置)。Windows 上的默认位置是C:Program Filesdotnet. Linux 和 macOS 上的默认位置是/usr/share/dotnet. 此环境变量仅在通过生成的可执行文件 (apphosts) 运行应用程序时使用。DOTNET_ROOT(x86)在 64 位操作系统上运行 32 位可执行文件时使用。 NUGET_PACKAGES 全局包文件夹。如果未设置,则默认为~/.nuget/packages在 Unix 或%userprofile%.nugetpackagesWindows 上。 DOTNET_SERVICING 指定加载运行时时共享主机使用的服务索引的位置。 DOTNET_NOLOGO 指定在第一次运行时是否显示 .NET 欢迎和遥测消息。设置为true静音这些消息(值true,1或yes接受)或设置为false允许他们(值false,0或no接受)。如果未设置,则默认为false第一次运行时将显示消息。此标志不影响遥测(请参阅DOTNET_CLI_TELEMETRY_OPTOUT选择不发送遥测)。 DOTNET_CLI_PERF_LOG 指定是否记录有关当前 CLI 会话的性能详细信息。当设置为Enabled 1,true或yes。默认情况下禁用此功能。 DOTNET_GENERATE_ASPNET_CERTIFICATE 指定是否生成 ASP.NET Core 证书。默认值是true,但是这可以通过这样的环境变量设置为或者是重写0,false或no。 DOTNET_ADD_GLOBAL_TOOLS_TO_PATH 指定是否在PATH环境变量中添加全局工具。默认为true. 要不是全球性的工具添加到路径,设置为0,false或no。 DOTNET_CLI_TELEMETRY_OPTOUT 指定是否收集有关 .NET 工具使用情况的数据并将其发送给 Microsoft。设置为true选择退出遥测功能(值true,1或yes接受)。否则,设置为false选择加入遥测特征(值false,0或no接受)。如果未设置,则默认为false且遥测功能处于活动状态。 DOTNET_SKIP_FIRST_TIME_EXPERIENCE 如果DOTNET_SKIP_FIRST_TIME_EXPERIENCE设置为true,NuGetFallbackFolder则不会扩展到磁盘,并且将显示较短的欢迎消息和遥测通知。 DOTNET_MULTILEVEL_LOOKUP 指定是否从全局位置解析 .NET 运行时、共享框架或 SDK。如果未设置,则默认为 1 (logical true)。设置为 0(逻辑false)以不从全局位置解析并具有隔离的 .NET 安装。有关多级查找的更多信息,请参阅多级 SharedFX 查找。 DOTNET_ROLL_FORWARD 确定前滚行为。有关详细信息,请参阅--roll-forward本文前面的选项。 从 .NET Core 3.x 开始可用。 DOTNET_ROLL_FORWARD_TO_PRERELEASE 如果设置为1(启用),则启用从发布版本前滚到预发布版本。默认情况下(0- 禁用),当请求 .NET 运行时的发布版本时,前滚将仅考虑已安装的发布版本。从 .NET Core 3.x 开始可用。 有关更多信息,请参阅前滚。 DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX 如果设置为 ,则禁用次要版本前滚0。有关更多信息,请参阅前滚。 此设置在 .NET Core 3.0 中被DOTNET_ROLL_FORWARD. 应改用新设置。 DOTNET_CLI_UI_LANGUAGE 使用区域设置值设置 CLI UI 的语言,例如en-us. 支持的值与 Visual Studio 相同。有关详细信息,请参阅Visual Studio 安装文档中有关更改安装程序语言的部分。.NET 资源管理器规则适用,因此您不必选择完全匹配——您还可以选择CultureInfo树中的后代。例如,如果您将其设置为fr-CA,CLI 将查找并使用fr翻译。如果您将其设置为不受支持的语言,CLI 将回退到英语。 DOTNET_DISABLE_GUI_ERRORS 对于启用 GUI 的生成的可执行文件 - 禁用对话框弹出窗口,该对话框通常显示某些类别的错误。它只stderr在这些情况下写入和退出。 DOTNET_ADDITIONAL_DEPS 相当于 CLI 选项--additional-deps。 DOTNET_RUNTIME_ID 覆盖检测到的 RID。 DOTNET_SHARED_STORE 在某些情况下,程序集解析回退到的“共享存储”的位置。 DOTNET_STARTUP_HOOKS 要从中加载和执行启动挂钩的程序集列表。 DOTNET_BUNDLE_EXTRACT_BASE_DIR 指定一个目录,单文件应用程序在执行之前要提取到该目录。从 .NET Core 3.x 开始可用。 有关详细信息,请参阅单文件可执行文件。 DOTNET_CLI_CONTEXT_* DOTNET_CLI_CONTEXT_VERBOSE:要启用详细上下文,请设置为true。 DOTNET_CLI_CONTEXT_ANSI_PASS_THRU:要启用 ANSI 直通,请设置为true。 DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_DISABLE 禁用工作负载的广告清单的后台下载。默认为false- 未禁用。如果设置为true,则禁用下载。有关更多信息,请参阅广告清单。 DOTNET_CLI_WORKLOAD_UPDATE_NOTIFY_INTERVAL_HOURS 指定工作负载的广告清单后台下载之间的最小小时数。默认为24- 不超过每天一次。有关更多信息,请参阅广告清单。 COREHOST_TRACE 控制诊断从托管组件跟踪,如dotnet.exe,hostfxr和hostpolicy。 COREHOST_TRACE=[0/1]- 默认为0- 禁用跟踪。如果设置为1,则启用诊断跟踪。 COREHOST_TRACEFILE=<file path>- 仅当通过设置启用跟踪时才有效COREHOST_TRACE=1。设置后,跟踪信息写入指定文件;否则,跟踪信息将写入stderr。从 .NET Core 3.x 开始可用。 COREHOST_TRACE_VERBOSITY=[1/2/3/4]- 默认为4. 该设置仅在通过 启用跟踪时使用COREHOST_TRACE=1。从 .NET Core 3.x 开始可用。 4 - 写入所有跟踪信息 3 - 仅写入信息、警告和错误消息 2 - 仅写入警告和错误消息 1 - 只写入错误信息 以获取有关应用程序启动详细的跟踪信息的典型方法是设置COREHOST_TRACE=1和COREHOST_TRACEFILE=host_trace.txt,然后运行该应用程序。host_trace.txt将在当前目录中创建一个包含详细信息的新文件。 SuppressNETCoreSdkPreviewMessage 如果设置为true,dotnet则在使用预览 SDK 时调用不会产生警告。 DOTNET_WATCH_* 以下 .NET 监视设置可用作环境变量: DOTNET_WATCH:该dotnet watch命令将此变量设置为1启动的所有子进程。 DOTNET_WATCH_ITERATION:每次更改文件并重新启动命令时,该命令都会dotnet watch将此变量设置为1并递增 1。 DOTNET_WATCH_SUPPRESS_STATIC_FILE_HANDLING: 如果设置为1, 或true,则不dotnet watch会对静态内容文件执行特殊处理。 DOTNET_WATCH_SUPPRESS_MSBUILD_INCREMENTALISM:默认情况下,dotnet watch通过避免某些操作(例如restore在每次文件更改时运行或重新评估监视文件集)来优化构建。如果设置为1或true,则禁用这些优化。 DOTNET_WATCH_SUPPRESS_LAUNCH_BROWSER:该dotnet watch run命令将尝试为launchBrowser在launchSettings.json文件中配置的Web 应用程序启动浏览器。如果设置为1或true,则此行为将被抑制。 DOTNET_WATCH_SUPPRESS_BROWSER_REFRESH DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME: 作为 的一部分dotnet watch,浏览器刷新服务器机制读取此值以确定 WebSocket 主机环境。的值127.0.0.1被替换localhost,并且http://和https://方案替换为ws://和wss://分别。 DOTNET_HOTRELOAD_NAMEDPIPE_NAME: 该值由dotnet watch应用程序启动时配置,并指定命名管道。 有关详细信息,请参阅GitHub:.NET SDK dotnet-watch。 DOTNET_USE_POLLING_FILE_WATCHER 当设置为1or 时true,dotnet watch将轮询文件系统以进行更改。这对于某些文件系统是必需的,例如网络共享、Docker 挂载卷和其他虚拟文件系统。该PhysicalFileProvider类使用DOTNET_USE_POLLING_FILE_WATCHER,以确定是否PhysicalFileProvider.Watch方法将依托PollingFileChangeToken。 在 .NET CLI 中配置 MSBuild 要执行的MSBuild外的过程中,设置DOTNET_CLI_RUN_MSBUILD_OUTOFPROC环境变量要么1,true或yes。默认情况下,MSBuild 将在进程内执行。要强制的MSBuild使用外部工作节点长寿的过程建设项目,设置DOTNET_CLI_USE_MSBUILDNOINPROCNODE到1,true或yes。这会将MSBUILDNOINPROCNODE环境变量设置为1,称为MSBuild Server V1,因为进入过程会将大部分工作转发给它。 DOTNET_MSBUILD_SDK_RESOLVER_* 这些是用于强制解析的 SDK 任务和目标来自给定的基本目录并向 MSBuild 报告给定版本(null如果未知)的覆盖。一个关键用例是测试 SDK 任务和目标,而无需使用 .NET Core SDK 部署它们。 DOTNET_MSBUILD_SDK_RESOLVER_SDKS_DIR:覆盖 .NET SDK 目录。 DOTNET_MSBUILD_SDK_RESOLVER_SDKS_VER:覆盖 .NET SDK 版本。 DOTNET_MSBUILD_SDK_RESOLVER_CLI_DIR:覆盖dotnet.exe目录路径。 DOTNET_NEW_PREFERRED_LANG 省略开关dotnet new时配置命令的默认编程语言-lang|--language。默认值为C#。有效值C#,F#或VB。有关详细信息,请参阅dotnet new。
.NET 环境变量
2022-01-05 09:36:54
浏览数 (1)