我创建了一个简单的asp.net core 2.0 web api,并在program.cs文件中使用了以下代码行
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args)
{
var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
config.AddCommandLine(args);
}).UseStartup<Startup>()
.Build();
return webHost;
}
当我将应用程序作为自包含的可执行文件运行时,我传入一个命令行参数
--environment dev
然而,
的价值env.EnvironmentName
属性不等于dev。相反,它仍然是默认的生产。
这是否在asp.net core 2.0中被破坏了?这通过使用正确的包
在asp.net核心1.1中工作似乎不再允许传递命令行arg --environment
答案 0 :(得分:0)
发布应用后,在发布文件夹(运行dotnet <application_name>.dll
的位置)中,您可以通过设置ASPNETCORE_ENVIRONMENT
变量临时更改环境。
在发布文件夹中打开命令提示符或powershell,然后:
cmd =&gt; set ASPNETCORE_ENVIRONMENT=Development
ps =&gt; $Env:ASPNETCORE_ENVIRONMENT = "Development"
然后运行dotnet <application_name>.dll
。
这些命令仅对当前窗口生效。窗口关闭时,ASPNETCORE_ENVIRONMENT
设置将恢复为默认设置或机器值。要在Windows上全局设置值,请打开控制面板&gt;系统&gt;高级系统设置,并添加或编辑ASPNETCORE_ENVIRONMENT
值。
答案 1 :(得分:0)
ConfigureAppConfiguration运行太晚,必须在主机上配置环境,而不是应用程序。您需要将命令行参数添加到主机:
var configuration = new ConfigurationBuilder().AddCommandLine(args).Build();
var webHost = new WebHostBuilder()
.UseConfiguration(configuration)
这是一个相关的错误,在2.1.0-preview1中对此进行了改进:https://github.com/aspnet/MetaPackages/issues/221