Visual studio 如何从VisualStudio2019部署Blazor服务器托管的应用程序
我正在使用VS2019预览版。 我使用最新的Blazor扩展(16.0.19227)创建了一个“服务器托管”Blazor应用程序。这是包含3个独立项目的变体Visual studio 如何从VisualStudio2019部署Blazor服务器托管的应用程序,visual-studio,blazor,blazor-server-side,Visual Studio,Blazor,Blazor Server Side,我正在使用VS2019预览版。 我使用最新的Blazor扩展(16.0.19227)创建了一个“服务器托管”Blazor应用程序。这是包含3个独立项目的变体 MyApp.Client MyApp.Server MyApp.Shared 我可以通过使MyApp。服务器成为活动项目来调试它,并且一切正常,但我正在努力将其发布/部署到Azure。我试过以下方法 在解决方案资源管理器中右键单击MyApp.Server 选择“发布” 执行向导以创建新的发布配置文件 将部署模式更改为“自包含” 点击发
- MyApp.Client
- MyApp.Server
- MyApp.Shared
- 在解决方案资源管理器中右键单击MyApp.Server
- 选择“发布”
- 执行向导以创建新的发布配置文件
- 将部署模式更改为“自包含”
- 点击发布
更新2通过编辑xml删除发布配置文件中的RuntimeIdentifier标记只会导致部署时错误,指出空RuntimeIdentifier与自包含部署不兼容。不幸的是,自包含部署是必要的,因为Azure尚未直接承载.net core 3。无法在评论中添加图片,所以我想在这里展示它。这是我当前的发布向导 只是通过新建项目->Asp.net核心web应用程序->blazor(Asp.net核心托管)构建并发布了一个全新的项目,并将其发布到azure应用程序服务fine 因为Azure尚未直接承载.net core 3 但确实如此 在Azure门户中,在部署后转到您的WebApp(或事先创建一个) 转到扩展并单击添加[+],然后选择ASP.NET Core 3(x86用于免费托管) 同时转到“设置”、“常规”和“启用WebSocket”,默认情况下它们处于关闭状态
临时: 请注意,Preview-6不能作为扩展提供,因此请使用Preview-5或作为自包含的部署 我的答案是:
- 将发布配置文件配置为“自包含”部署模式
- 编辑所有.csproj文件以将
节点名称更改为..
。(另见:)..
- 在运行时在
类中修复web根文件夹路径字符串,如下所示Startup
使用Microsoft.AspNetCore.Builder;
使用Microsoft.AspNetCore.Hosting;
使用Microsoft.AspNetCore.ResponseCompression;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.FileProviders;
使用Microsoft.Extensions.Hosting;
使用Newtonsoft.Json.Serialization;
使用System.IO;
使用System.Linq;
命名空间BlazorHostedOnAzure.Server
{
公营创业
{
//此方法由运行时调用。请使用此方法将服务添加到容器中。
//有关如何配置应用程序的更多信息,请访问https://go.microsoft.com/fwlink/?LinkID=398940
public void配置服务(IServiceCollection服务)
{
services.AddMvc().AddNewtonsoftJson();
services.AddResponseCompression(选项=>
{
opts.MimeTypes=ResponseCompressionDefaults.MimeTypes.Concat(
新[]{“应用程序/八位字节流”});
});
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
app.UseResponseCompression();
//----附加部分。1开始----
var clientBlazorWebRootPath=默认值(字符串);
//----附加第1部分结束----
if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBlazorDebugging();
}
//----附加部分。2开始----
其他的
{
if(env.WebRootPath!=null)
{
var pathOfIndex=Path.Combine(env.WebRootPath,“index.html”);
var pathOfContent=Path.Combine(env.WebRootPath,“_content”);
如果(!File.Exists(pathfindex)&&Directory.Exists(pathfcontent))
{
clientBlazorWebRootPath=Directory.GetDirectories(pathOfContent.FirstOrDefault();
if(clientBlazorWebRootPath!=null)
{
env.WebRootPath=clientBlazorWebRootPath;
}
}
}
}
//----附加第2部分结束----
app.UseClientSideBlazorFiles();
app.UseRouting();
app.UseEndpoints(端点=>
{
endpoints.MapDefaultControllerOute();
MapFallbackToClientSideBlazor(“index.html”);
});
//----附加部分。3开始----