.Net 6 Blazor 服务器端 CSS 隔离不起作用

.Net 6 Blazor Server-Side CSS Isolation not working

我创建了一个新的 .NET 6 Blazor 服务器端项目并进行了一些更改。我有几个使用 CSS 隔离的文件(如 Contact.razor + Contact.razor.css)。在 _Layout.cshtml 页面中,模板添加了以下内容:

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

其中 CustomerPortal 是我的项目名称。我可以看到文件在“CustomerPortal\CustomerPortal\obj\Debug\net6.0\scopedcss\projectbundle\CustomerPortal.bundle.scp.css”和“C:\Data\Git\WebApps\CustomerPortal\CustomerPortal\obj\Debug\net6.0\scopedcss\bundle\CustomerPortal.styles.css" 但是当我 运行 使用内核或 IIS Express 的项目时,如果我尝试手动导航到 CSS,我会收到 404 not found for the CSS,我也无法找到它。有任何想法吗?我的 csproj 没有任何会影响它的标志。

这里有几个选项可以解决这个问题,具体取决于您要采用的方法。我想我们已经弄清楚为什么会这样,但是 UseStaticWebAssets() 似乎不支持新的最小启动代码。所以,这是我能想到的选项。

  1. 将您的代码迁移回执行应用程序启动的“旧”方式。这仍然是一种受支持且完全有效的方法,因为存在不支持的边缘情况(如这个)。
  2. 将新的 WebApplicationOptions 传递给 CreateBuilder() 方法,并根据环境在单独(且正确)的位置查找静态文件。参见 some examples here.
  3. 在现有 builder 的情况下,检查环境并使用 StaticWebAssetsLoader 加载静态 Web 资产。

#3 的完整示例

if (builder.Environment.IsEnvironment("Local"))
{
    StaticWebAssetsLoader.UseStaticWebAssets(builder.Environment, builder.Configuration);
}

话虽这么说 - 我想他们最终会堵上这个洞并为 UseStaticWebAssets() 提供平价。您可以在 this open GitHub issue.

中看到这项工作的进展

对于其他人... 我在 .net 6 blazor 服务器应用程序中遇到了完全相同的问题。对我来说,归根结底是我更改了项目名称,但 _Layout.cshtml 中对 {project}.styles.css 的引用仍然指向旧项目名称。 只需将此处的 {project} 更新为正确的项目名称即可解决我的问题。