-2

当我从 .NET 模板创建 ASP.NET Core 托管的 Blazor 应用程序时,我得到如下信息:

  • WebHost项目(Microsoft.NET.Sdk.Web,Exe 输出类型)
  • BlazorApp项目(Microsoft.NET.Sdk.BlazorWebAssembly,Exe 输出类型)

我可以轻松地dotnet publishWebHost项目上运行,并将获得一个托管 Blazor Web 应用程序所有内容的可执行文件。

因此,如果我想添加一个服务器配置 UI,例如使用 WPF,我最终会得到这样的结果。(WebHost 项目现在是一个库,由 ServerUI 使用/引用)

  • 服务器界面项目
    • Microsoft.NET.SdkUseWPF设置一起使用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 publishServerUI项目上运行,我最终会得到一个可执行文件,该可执行文件显示用户界面并拥有 ASP.NET Core 托管内容,但访问 Blazor Web 应用程序将失败,因为wwwroot文件夹不会以这种方式发布。

现在有两种方法可以解决我知道的这个问题:

  • 要么你让ServerUI也使用Microsoft.NET.Sdk.Web
  • 或者您将WebHostBlazorApp项目显式发布到与ServerUI项目相同的文件夹中。

这让我想到了一个问题,它实际上是否可以Microsoft.NET.Sdk.Web用于图书馆项目,如果可以,有什么限制。

重现步骤

  • 克隆这个repo
  • 在签出文件夹中打开终端
  • dotnet publish ServerUI -o bin\publish
  • wwwroot目录中将缺少文件bin\publish
  • 相比之下,运行dotnet run --project ServerUI仍将按预期工作,因为它不依赖于发布行为
4

1 回答 1

2

当您发布桌面项目并单独运行它时,您就处于 VS 开发环境之外。我不知道wwwroot将 WASM 项目的文件夹复制到桌面项目的隐含方式。

这就是我所做的:

  1. 为您的应用程序设置一个接收文件夹。
  2. 将 ServerUI 发布到文件夹。
  3. 将 BlazorApp 发布到同一文件夹。

您需要修复index.html中的 css 。

    <link href="css/app.css" rel="stylesheet" />
    <link href="BlazorApp.styles.css" rel="stylesheet" />

然后,您可以从发布的目录运行该应用程序。

在此处输入图像描述

在此处输入图像描述

于 2022-01-18T14:39:57.390 回答