asp.net core 2.0不允许使用命令args

时间:2018-03-03 03:37:42

标签: asp.net asp.net-core asp.net-core-2.0

我创建了一个简单的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

2 个答案:

答案 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