当我从 .NET 模板创建 ASP.NET Core 托管的 Blazor 应用程序时,我得到如下信息:
- WebHost项目(Microsoft.NET.Sdk.Web,Exe 输出类型)
- BlazorApp项目(Microsoft.NET.Sdk.BlazorWebAssembly,Exe 输出类型)
我可以轻松地dotnet publish
在WebHost项目上运行,并将获得一个托管 Blazor Web 应用程序所有内容的可执行文件。
因此,如果我想添加一个服务器配置 UI,例如使用 WPF,我最终会得到这样的结果。(WebHost 项目现在是一个库,由 ServerUI 使用/引用)
- 服务器界面项目
Microsoft.NET.Sdk
与UseWPF
设置一起使用true
OutputType
被设定为WinExe
- 旨在成为(服务器)应用程序入口点的顶级项目
- 包含用于设置服务器的图形用户界面(例如端口、身份验证等)
- 参考WebHost项目
- 网络主机项目
- 用于
Microsoft.NET.Sdk.Web
访问 ASP.NET Core 运行时 OutputType
被设定为Library
- 包含 ASP.NET Core 托管的所有代码
- 参考BlazorApp项目
- 用于
- BlazorApp项目
- 用途
Microsoft.NET.Sdk.BlazorWebAssembly
OutputType
设置为Exe
(默认)- 包含要在浏览器中运行的所有 Blazor Web 应用程序内容
- 用途
如果我现在dotnet publish
在ServerUI项目上运行,我最终会得到一个可执行文件,该可执行文件显示用户界面并拥有 ASP.NET Core 托管内容,但访问 Blazor Web 应用程序将失败,因为wwwroot
文件夹不会以这种方式发布。
现在有两种方法可以解决我知道的这个问题:
- 要么你让ServerUI也使用
Microsoft.NET.Sdk.Web
- 或者您将WebHost或BlazorApp项目显式发布到与ServerUI项目相同的文件夹中。
这让我想到了一个问题,它实际上是否可以Microsoft.NET.Sdk.Web
用于图书馆项目,如果可以,有什么限制。
重现步骤
- 克隆这个repo
- 在签出文件夹中打开终端
- 跑
dotnet publish ServerUI -o bin\publish
wwwroot
目录中将缺少文件bin\publish
夹- 相比之下,运行
dotnet run --project ServerUI
仍将按预期工作,因为它不依赖于发布行为