首页 新闻 会员 周边

请问在 .NET-Core 2.0 中如何使用 AddCommandLine

0
[已解决问题] 解决于 2017-08-16 21:26

对应包:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.0.0" />

.net-core 1.2如下写法

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

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

            host.Run();
        }

.NET -Core 2.0

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

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
问题补充:

目的是为了能够在命令行直接指定参数。

BUTTERAPPLE的主页 BUTTERAPPLE | 老鸟四级 | 园豆:3190
提问于:2017-08-16 18:08
< >
分享
最佳答案
0

CreateDefaultBuilder 就已经包含了,不需要另外添加,详 WebHost.cs#L177

奖励园豆:5
dudu | 高人七级 |园豆:31007 | 2017-08-16 21:25

还是需要添加的,当 Program.cs 如下所示时:

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

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }

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

在命令行 输入 dotnet run --urls "http://localhost:5001" --enviroment "Production" 时,控制台上还是显示 从 launchSettings.json中读取 启动设置 监听 Now listening on: http://localhost:5006
这说明用控制台 --urls 参数 指定监听的端口号无效

Program.cs 改为如下时

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

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

再次执行上述命令, 控制台上显示监听成功。
Now listening on: http://localhost:5001

也在Stackoverflow 上问了一下,参考其中的一个解答Why should AddCommandLine

BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-08-21 22:24

@BUTTERAPPLE: 赞!后来我尝试用 dotnet run 命令的 --no-launch-profile 参数,结果不仅 launchSettings.json 不起作用,--urls 也不起作用。

dudu | 园豆:31007 (高人七级) | 2017-08-22 14:47

@dudu: 是的,这个变化确实没想到。

BUTTERAPPLE | 园豆:3190 (老鸟四级) | 2017-08-22 14:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册