发布应用程序后,blazor 托管的模板项目无法正常工作

Posted

技术标签:

【中文标题】发布应用程序后,blazor 托管的模板项目无法正常工作【英文标题】:blazor hosted template project not working after publishing the app 【发布时间】:2021-04-28 10:21:14 【问题描述】:

我从 dotnet CLI 创建了一个名为 foo 的新 blazor 托管项目:

dotnet new blazorwasm --hosted

我运行应用程序

dotnet run -c Release

模板应用在请求 https://localhost:5001(或 5000)时正常工作

然后我发布应用程序:

dotnet publish -c Release

然后尝试启动它

dotnet Server/bin/Release/net5.0/publish/foo.Server.dll

我希望应用能够正确启动。但我实际上得到了 404 响应。这是为什么呢?

注意事项:

几天前它工作正常。 发布时,我们收到消息“优化程序集的大小,这可能会改变应用程序的行为。请务必在发布后进行测试。请参阅:https://aka.ms/dotnet-illink"。我认为这与我的问题,因为它之前工作正常。 我使用的是 Windows 10,dotnet sdk 版本 5.0.102

【问题讨论】:

【参考方案1】:

Blazor WASM 托管项目具有三个项目:客户端、服务器和共享。 要将解决方案发布为一个发布站点,请运行命令

dotnet publish MyWasmSolution.sln -C Release --output .\publish

发布文件夹包含服务器/客户端的所有 DLL,以及服务器和客户端的共享和 wwwroot,包括带有所有压缩文件的 blazor.webassembly.js。

然后,移动到发布文件夹(内容根目录,因为dotnet run 将当前文件夹视为内容根目录)。

运行下一个脚本:

cd path/to/folder/publish
dotnet foo.Server.dll

index.html 已加载到浏览器中,如果您单击 F12(开发工具),您不会发现任何错误。

【讨论】:

dotnet Server/bin/Release/net5.0/publish/foo.Server.dll 等价于cd Server/bin/Release/net5.0/publish 然后dotnet foo.Server.dll 请在运行命令时查看两种情况的内容根目录。它们是不同的,因为 `dotnet run ' 认为当前文件夹是内容根目录,实际上不是。 内容根目录会根据 dotnet 命令在哪个文件夹中执行而有效地改变(它从未引起我的注意)谢谢。现在我返回了 index.html,但应用程序仍然没有启动,因为对 blazor.webassembly.js https://localhost:5001/_framework/blazor.webassembly.js 的请求返回了 404 响应。我检查了_framework/ 文件夹并且文件丢失了。这又是一种正常的行为。为什么发布命令不把它放在那里? vs 2019 在 bin 文件夹下发布三个项目(不是一个),并假设您使用 dotnet run 该项目:) 并同时托管客户端和服务器。 你说得对,blazor 托管有特殊情况。当发布到一个输出时,客户端和服务器的 wwroot 合并到一个 wwroot 中,因此您只托管一个站点。请注意带有 /o 输出选项的两个发布命令的发布消息。

以上是关于发布应用程序后,blazor 托管的模板项目无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Blazor WebAssembly Server 项目如何引用客户端索引?

Blazor WebAssembly Server 项目如何引用客户端索引?

无法从 Visual Studio 2019 16.6.2 调试 Blazor 托管的 webassembly 3.2.0

无法托管 Blazor 应用程序

Blazor 托管 - 在显示应用程序之前立即授权

调试 Blazor WASM(Aspnet 托管)时无法使用热重载