Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net core 为dotnetcore Windows服务设置环境变量--仅进程,而不是系统或用户_.net Core_Configuration - Fatal编程技术网

.net core 为dotnetcore Windows服务设置环境变量--仅进程,而不是系统或用户

.net core 为dotnetcore Windows服务设置环境变量--仅进程,而不是系统或用户,.net-core,configuration,.net Core,Configuration,我们的开发人员正在用.NETCore3.1编写一些Windows服务 据我所知,核心开发的典型模式是检查DOTNET_环境变量以切换不同的配置 出于理由,我们希望避免设置系统级甚至用户级的机器环境变量。其中一些原因是: 推出新服务器时要设置的其他内容 可能希望在同一台服务器上运行不同的“环境”——可能不是针对服务,而是针对其他命令行应用 对于IIS启动的Kestrel托管应用程序,可以在web.config中设置额外的环境值。这无法应用于命令行应用程序 这方面的最佳做法是什么?在启动可执行文

我们的开发人员正在用.NETCore3.1编写一些Windows服务

据我所知,核心开发的典型模式是检查DOTNET_环境变量以切换不同的配置

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

  • 推出新服务器时要设置的其他内容
  • 可能希望在同一台服务器上运行不同的“环境”——可能不是针对服务,而是针对其他命令行应用
对于IIS启动的Kestrel托管应用程序,可以在web.config中设置额外的环境值。这无法应用于命令行应用程序

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

其他需要提及的事项:

  • 当我们开始进行容器化时,设置容器级环境变量显然是一种方法,但是对于这样的共享Windows服务器(实际上是VM),我们需要一种不同的方法
  • 我们已经进行了审查。尽管它的目标是ASP.NET核心,而不是核心中的控制台/服务应用程序

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

下面的文档中包含以下摘录:

默认配置加载环境变量和前缀为
DOTNET\uuu
的命令行参数。.NET使用
DOTNET\uu
前缀进行和,但不用于用户配置


因此,如果使用命令行参数
--environment Development
,则应将其转换为
DOTNET\u environment=Development
。这被测试为与.NET 5.0 worker服务一起使用。

您应该能够在命令行上通过配置,即
MyService.exe--environment Development
这是一个非常好的主意,如果您给出答案,我将接受它。