【问题标题】:asp.net core 2.0 not allowing environment variable to be overrided using command argsasp.net core 2.0 不允许使用命令 args 覆盖环境变量
【发布时间】:2018-03-03 03:37:41
【问题描述】:

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

property 不等于 dev。相反,它仍然是 Production 的默认设置。

这在 asp.net core 2.0 中被破坏了吗?这以前使用正确的包在 asp.net core 1.1 中工作

似乎不再允许传递命令行参数 --environment

【问题讨论】:

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


    【解决方案1】:

    发布应用后,您可以在发布文件夹(运行dotnet &lt;application_name&gt;.dll 的位置)中通过设置ASPNETCORE_ENVIRONMENT 变量来临时更改环境。

    在您的发布文件夹中打开命令提示符或 powershell,然后:

    cmd => set ASPNETCORE_ENVIRONMENT=Development

    ps => $Env:ASPNETCORE_ENVIRONMENT = "Development"

    然后运行dotnet &lt;application_name&gt;.dll

    这些命令只对当前窗口生效。当窗口关闭时,ASPNETCORE_ENVIRONMENT 设置恢复为默认设置或机器值。要在 Windows 上全局设置值,请打开控制面板 > 系统 > 高级系统设置并添加或编辑 ASPNETCORE_ENVIRONMENT 值。

    【讨论】:

    • 现在我有几十个运行 asp.net core 1.1 的 asp.net core web api,它们都接受命令行参数来设置 ASPNETCORE_ENVIRONMENT 的值。我的目标是使用命令行参数,因为我需要能够在具有不同环境的同一台机器上运行两个不同的应用程序。命令行参数以前工作过,所以我需要知道它是否可以使用命令行参数方法这样做。此外,使用“dotnet”不起作用,api 是自包含的,并且在 iis 后面 --> 由 IIS 的 asp.net 核心模块启动,而不是 dotnet myapp.dll。
    • 这很重要,因为自包含与依赖框架之间存在差异。您上面显示的示例依赖于框架,因此对于此特定用例来说不是一个很好的示例
    【解决方案2】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-04
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多