对应包:
<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();
}
目的是为了能够在命令行直接指定参数。
CreateDefaultBuilder 就已经包含了,不需要另外添加,详 WebHost.cs#L177
还是需要添加的,当 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: 赞!后来我尝试用 dotnet run 命令的 --no-launch-profile 参数,结果不仅 launchSettings.json 不起作用,--urls 也不起作用。
@dudu: 是的,这个变化确实没想到。