0

我进行了很多搜索,阅读了有关 MsBuild、构建后作业、csproj-config 的信息,但没有成功:

位于 Blazor 组件库中的静态文件(如 css 或 js)不会复制到最终应用的 wwwroot 文件夹

我有的:

  • 作为消费者的 Blazor webassembly(.Net6,客户端)项目。
  • 一个 Razor-Lib-project 作为可重用控件的库,例如通知
  • 还有一些,但在这里无关紧要

该库有自己wwwroot的 CSS 和脚本。

在构建期间,文件最终在TheConsumerProject\bin\Debug\net6.0\wwwroot. 但是当使用 IIS Express(直接从 VS)进行调试时,文件应该从TheConsumerProject\wwwroot. 那失败了……当我手动复制文件时,它起作用了。

目标:任何消费者都不需要配置任何特殊的东西。只需引用 lib 并准备就绪。

我发现

  • <StaticWebAssetBasePath>在 lib 的 csproj 中指定,但没有设法进一步了解这一点。
  • 使用. <Target>_ $(MsBuildVariable)这实际上有效,文件被复制到指定的目的地,但我没有找到指向最终应用程序的wwwroot.
  • 进行了一些调整,<ItemGroup>但没有任何效果。

我不想使用任何项目特定的数据,比如相对路径。如果可能,这应该适用于任何项目结构。

有任何想法吗?

4

1 回答 1

1

不应将 Razor 类库项目中的文件复制到引用它的项目中(即 Blazor 前端)。运行时会进行一些神奇的重新路由。

在您要使用这些静态资产的页面中,您应该使用一个 URL,例如_content/YourClassLibraryName/path-from-wwwroot. 例如,如果您在 RCL 的 wwwroot 文件夹中有一个类似 flair.css 的文件,您可以在前端项目中将其导入为

<link href="_content/YourClassLibraryName/flair.css" rel="stylesheet" />

同样,位于 wwwroot/img 文件夹中的图像文件(例如 solarFlare.png)将是:

YourClassLibraryName如果您通过 NuGet 使用 RCL,则可以是项目名称或 NuGet 包名称。它们的行为应该相同。

文件:

于 2022-01-29T20:43:51.867 回答