AspNet Core 2.0 Windows 服务和唯一的 ASPNETCORE_ENVIRONMENT 变量

pau*_*guy 6 windows-services environment-variables asp.net-core

我有一个在服务器 A 上执行的 ASPNET Core 2.0 Windows 服务。它是使用以下方法创建的:

sc create...
Run Code Online (Sandbox Code Playgroud)

服务器 A 具有系统 ASPNETCORE_ENVIRONMENT="Staging"。Windows 服务使用 appsettings.Staging.json 进行设置。

我想为演示目的安装一个重复的 Windows 服务,它需要指向 appsettings.demo.json 进行设置。

如何使用独特的 ASPNETCORE_ENVIRONMENT="Demo" 执行 ASPNET Core 2.0 演示 Windows 服务?

谢谢。

Mat*_*jeS 7

我遇到了这个确切的问题,您实际上可以通过传入命令行参数来设置环境。您需要像这样创建您的服务:

sc create MyDemoService binPath= "C:\MyDemoService.exe --environment Demo"
Run Code Online (Sandbox Code Playgroud)

这将传入一个参数,然后您可以在构建 WebHost 时在 Program.cs 的 Main 函数中使用该参数。像这样:

var builder = new ConfigurationBuilder();
builder.AddCommandLine(args);
var config = builder.Build();

var host = new WebHostBuilder()
    .UseConfiguration(config)
    ...
Run Code Online (Sandbox Code Playgroud)

当我访问应用程序中其他地方的 appsettings.{EnvName}.json 时,我需要将其注册IHostingEnvironment为单例,然后我只能读取该服务的环境名称,而无需设置ASPNETCORE_ENVIRONMENT.