网络主机生成器。如何在 .NET-Core 2.0 中使用命令行设置 url 地址?

dou*_*lnt 5 c# asp.net-core

我使用下面的代码在我的 .Net-Core 1.2 环境中添加命令行,我可以使用像dotnet run --urls "http://a.cn.com:5000" --environment "Production".

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();
}
Run Code Online (Sandbox Code Playgroud)

迁移到 .net core 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();
 }
Run Code Online (Sandbox Code Playgroud)

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

供应:2017.08.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"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

并且我们不应该在Program.cs文件中添加任何其他代码,因为 CreateDefaultBuilder 包含 addCommandLine。有关更多详细信息,您可以查看WebHost.cs#L177

供应 2017 0817 17:44 UTC+8

[::] 是 IPv4 0.0.0.0 的 IPv6 等价物。

Set*_*Set 4

直接使用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();
}
Run Code Online (Sandbox Code Playgroud)

而且我们不应该在 Program.cs 文件中添加任何其他代码,因为 CreateDefaultBuilder 包含 addCommandLine。有关更多详细信息,您可以参见 WebHost.cs#L177

这并不完全正确,因为链接CreateDefaultBuilder实现使用的是ConfigureAppConfiguration方法,而不是UseConfiguration. 并且有一个区别(来自相关的Github 问题):

旨在ConfigureAppConfiguration配置IConfiguration应用程序服务中的 ,而UseConfiguration旨在配置WebHostBuilder. WebHostBuilder由于 url 地址是唯一的设置,UseConfiguration因此此处有效。

请注意,WebHostBuilder 的配置已添加到应用程序的配置中,但反之则不然;配置应用程序的配置不会影响 WebHostBuilder 的配置。