为 dotnetcore Windows 服务设置环境变量——仅限进程,而不是系统或用户

Setting environment variables for dotnetcore Windows service -- process only, not system or user

我们的开发人员正在 .NET Core 3.1 中编写一些 Windows 服务。

据我了解,Core 开发的典型模式是检查 DOTNET_ENVIRONMENT 变量以开启不同的配置。

出于TM的原因,我们希望避免设置系统级甚至用户级机器环境变量。其中一些原因是:

对于由 IIS 启动的 Kestrel 托管应用程序,可以在 web.config 中设置额外的环境值。这不适用于命令行应用程序。

这方面的最佳做法是什么?有没有办法在启动可执行文件之前设置环境变量?或者在启动时通过从配置文件中读取环境变量来在进程中设置环境变量?

其他要提及的事项:

我已经确定了这个答案:在所有情况下,启动的 .NET 核心应用程序默认情况下不会查看任何配置文件来设置环境变量。因此,要么代码必须通过添加代码来设置自己的环境变量,要么需要包装器应用程序在生成应用程序之前设置这些变量。

隐藏在 Environment variable configuration provider 下的文档中的是以下摘录:

The default configuration loads environment variables and command-line arguments prefixed with DOTNET_. The DOTNET_ prefix is used by .NET for host and app configuration, but not for user configuration.

因此,如果您使用命令行参数 --environment Development,它应该被转换为 DOTNET_ENVIRONMENT=Development。这已经过测试,可用于 .NET 5.0 辅助角色服务。