您可以更改在 Web 服务器上运行的代码解析配置吗?这就是我建议做的事情。这将允许您在 Windows 设置中更自然地配置您的环境。
虽然配置 IHostingEnvironment.EnvironmentName 变量的传统方法是通过 ASPNETCORE_ENVIRONMENT 环境变量,但您可以更改 ASP.NET Core 解析其配置的方式,以便您可以通过命令行参数设置变量.
进入细节...
默认情况下,dotnet new -t web 命令发出的Program.cs 文件如下所示:
public static void Main(string[] args) {
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
这使得 ASP.NET Core 使用 the default configuration processing (environment variables with a ASPNETCORE_ prefix) 来确定 IHostingEnvironment.EnvironmentName 的值,您将使用它来配置应用程序的运行方式。
幸运的是,您可以利用 UseConfiguration() extension method on WebHostBuilder 更改 ASP.NET Core 解析配置的方式。以下是使用默认实现的自定义配置的示例:
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("ASPNETCORE_")
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
从这里开始,我将对其进行更改,以便它可以使用除了ASPNETCORE_ 前缀的环境变量之外的命令行。这将允许您使用所需的任何环境名称轻松运行应用程序,如下所示:
public static void Main(string[] args) {
var configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("ASPNETCORE_")
.AddCommandLine(args)
.Build();
var host =
new WebHostBuilder()
.UseConfiguration(configuration)
.UseKestrel()
.UseUrls("http://0.0.0.0:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
然后,当您使用dotnet run 启动您的dotnet core 应用程序时,您可以在命令行中设置环境,如下所示:
dotnet run environment=development
dotnet run environment=staging
现在ASPNETCORE_ENVIRONMENT 环境变量仍将受到尊重,但您可以在进行本地开发时通过命令行覆盖它。请注意,如果您尚未将 Microsoft.Extensions.Configuration.CommandLine nuget 包包含到您的 project.json 文件中,则需要这样做才能获得 AddCommandLine() 扩展方法。