2017-08-16 75 views
2

我使用下面的代码在我的.Net-Core 1.2环境中添加CommandLine,我可以使用命令行如dotnet run --urls "http://a.cn.com:5000" --environment "Production"WebHostBuilder。如何使用.NET-Core 2.0中的CommandLine设置URL地址?

public static void Main(string[] args) 
{ 
    var config = new ConfigurationBuilder() 
       .AddJsonFile("hosting.json", optional: true) 
       .AddCommandLine(args) 
       .Build(); 

    var host = new WebHostBuilder() 
       .UseKestrel() 
       .UseContentRoot(Directory.GetCurrentDirectory()) 
       .UseIISIntegration() 
       .UseStartup<Startup>() 
       .UseConfiguration(config) 
       .Build(); 

    host.Run(); 
} 

和迁移后到.NET核心2.0变得像

public static void Main(string[] args) 
{ 
    BuildWebHost(args).Run(); 
} 

public static IWebHost BuildWebHost(string[] args) 
{ 
    return WebHost.CreateDefaultBuilder(args) 
       .ConfigureLogging((context, logging) => 
       { 
        logging.AddSerilog(); 
       }) 
       .UseStartup<Startup>() 
       .Build(); 
} 

我使用相同的命令行,它失败。 如何在.net core 2.0中添加命令?

供应:2017年8月17日 launchsetting.json如下:

{ 
    "iisSettings": { 
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": { 
     "applicationUrl": "http://localhost:5005/", 
     "sslPort": 0 
    } 
    }, 
    "profiles": { 
    "IIS Express": { 
     "commandName": "IISExpress", 
     "launchBrowser": true, 
     "environmentVariables": { 
     "ASPNETCORE_ENVIRONMENT": "Development" 
     } 
    }, 
    "Robert.Project.Web": { 
     "commandName": "Project", 
     "environmentVariables": { 
     "ASPNETCORE_ENVIRONMENT": "Development" 
     }, 
     "applicationUrl": "http://localhost:5006" 
    } 
    } 
} 

我期待聆听是 Now listening on http://a.cn.com:5000 我得到的是:

enter image description here

我们不应该在Program.cs文件中添加任何其他代码,因为CreateDefaultBuilder包含addCommandLine。更多的细节,你可以看到WebHost.cs#L177

供应2017年0817 17:44 UTC + 8

[:]是IPv6相当于IPv4的0.0.0.0的。

+0

我使用命令'dotnet run --urls“http://a.cn.com:5000”'现在在听:'http:// localhost:5000' – doublnt

+0

so a.cn。com在您的开发机器上还是生产服务器上的本地主机的别名?或者你认为它忽略了--urls参数并默认为localhost?它可能是第一个,因为它的端口权利... – dlatikay

+0

a.cn.com是我的开发机器上的本地主机的别名。 – doublnt

回答

3

使用UseConfiguration直接设置由ARGS填充URL地址:

public static IWebHost BuildWebHost(string[] args) 
{ 
     var config = new ConfigurationBuilder().AddCommandLine(args).Build(); 

     return WebHost.CreateDefaultBuilder(args) 
      .UseConfiguration(config) 
      .UseStartup<Startup>() 
      .Build(); 
} 

,我们不应该加入的Program.cs文件中其他任何代码,造成CreateDefaultBuilder是包含addCommandLine。更多的细节,你可以看到WebHost.cs#L177

这并不完全正确,因为链接CreateDefaultBuilder实现使用ConfigureAppConfiguration方法,而不是UseConfiguration。而且是有区别的(关联Github issue):

ConfigureAppConfiguration旨在配置的应用服务IConfigurationUseConfiguration旨在配置WebHostBuilder的设置。由于url地址是WebHostBuilder上的设置,因此只有UseConfiguration才能在此工作。

请注意WebHostBuilder的配置被添加到应用程序的配置中,但反过来是不正确的;配置应用程序的配置不会影响WebHostBuilder的配置。

+0

已经尝试过这一点,但命令行参数正在被launchsettings.json覆盖,而这些都不会发生 – daw

相关问题