ASP.NET MVC Core 2.0 - 删除用于部署到Azure网站的UserKestrel()?
在ASP.NET MVC Core 2.0中向BuildWebHost()添加可选方法的正确方法是什么?ASP.NET MVC Core 2.0 - 删除用于部署到Azure网站的UserKestrel()?
我需要在我的开发环境中添加UseKestrel()以在本地启用HTTPS,但是由于Azure网站不喜欢它,因此我需要删除它。
背景:
我将ASP.NET MVC Core 1.1应用程序迁移到2.0。特别是,我也跟着关于Program.cs的变化在这里列出的步骤:
https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/#update-main-method-in-programcs
该文件概述了构建虚拟主机......基于这样所需的新格局,这里是新的2.0版的我BuildWebHost()方法,在发展工程:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseIISIntegration()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("mycert.pfx", "password");
});
})
.Build();
部署到Azure中后,我得到了502.5的错误,并期待在捻事件日志,我发现这一点:
Application 'MACHINE/WEBROOT/APPHOST/BEASTMUFFIN' with physical root 'D:\home\site\wwwroot\' failed to start process with commandline 'dotnet .\BeastMuffin.Web.dll', ErrorCode = '0x80004005 : e0434352.
搜索并阅读有关该特定错误代码,我意识到这可能与我的Program.cs有关,并且已经关注了UseKestrel()方法调用。
我注意到了该行,并重新发布,它的工作完美。
因此,回到原来的问题......我如何遵循构建虚拟主机的新模式,但在本地运行时,包含UseKestrel()方法及其选项?
首先我想说我是你的粉丝。很多年前,在LearnVisualStudio.net上咬牙切齿,甚至说服我的雇主(当时)给我终生会员资格。谢谢你,先生!
选项#1:我已经看到了肖恩Wildermuth在几个不同的Pluralsight视频使用此代码(#如果DEBUG),并怀疑它可能工作为您的目的。
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseIISIntegration()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
#if DEBUG
.UseKestrel(options =>H
{
options.Listen(IPAddress.Loopback, 5001, listenOptions =>
{
listenOptions.UseHttps("mycert.pfx", "password");
});
})
#endif
.Build();
选项#2:添加IHostingEnvironment到程序主方法签名,并呼吁根据环境变量不同HostBuild方法。
public static void Main(string[] args, IHostingEnvironment env)
{
if (env.IsEnvironment("Development"))
{
BuildLocalWebHost(args).Run();
}
else
{
BuildAzureWebHost(args).Run();
}
}
希望这有助于或在正确的方向至少百分点。
双倍的好答案。 :)首先,感谢#if DEBUG提示。我听说肖恩做了一件了不起的工作。我只是不愿意看到别人的内容,因为害怕剽窃指责。另外,我没有意识到你可以在这样的方法调用链中使用它!第二,谢谢你的个人笔记。我很高兴成为这么多人的学习体验的一小部分。祝你好! –
其实,我先尝试了后一种解决方案,因为它感觉正确......但是,IHostingEnvironment会传递给它吗?在我的情况下,当我尝试运行这个命令时,我收到一条错误消息:“程序不包含适用于入口点的静态'Main'方法” –
另外,还有一件事情是......从实验中,名称该方法必须是:BuildWebHost()...否则EF Core 2工具将不起作用。在我看来,这在文档中没有被充分强调。 –