Blazor 服务器 - 静态文件在非开发环境中不 link

Blazor Server - static files don't link in non-DEV environments

在标准的 Blazor 服务器应用程序中,除了开发环境之外,_content 文件夹项目没有被正确引用。例如,此引用在任何非开发环境中都会失败:

来自 _Host.cshtml:

<link href="_content/Blazored.Typeahead/blazored-typeahead.css" rel="stylesheet" />

Repro,以 Blazored-toast lib 为例(但任何静态文件引用似乎都有这个问题):

创建一个新的 Blazor Server 项目 (dotnet new blazorserver)

  1. 添加所有必要的 Blazored / Toast 元素,包括要演示的代码 敬酒消息
  2. 测试 toast 是否正常工作 Change launchSettings.json ASPNETCORE_ENVIRONMENT 到暂存、生产、 或开发以外的任何其他内容
  3. 运行 再次编程(使用ISS express local debug),注意css格式不正确
  4. 更改调试设置以改用 Kestrel(更改 IIS Express 下拉到 BlazorApp1 或类似的)
  5. 红隼通知,css是 工作正常

我错过了什么能让这个引用在其他环境中工作?

使用 Razor 中的静态资产 Class 库在发布应用程序时开箱即用。您只需像以前一样通过 <link href="..." /> 包含静态内容。

但是,当 运行从构建输出 (dotnet 运行) 或通过 Visual Studio 中的 F5 连接应用程序时,您必须确保为给定的启用了 StaticWebAsset 功能环境。

默认仅对开发环境启用。您可以通过确保在 Program.CreateHostBuilder.

中调用 UseStaticFiles 并调用 UseStaticWebAssets 来无条件地打开该功能

因此,请确保您使用的应用程序具有:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...

    app.UseStaticFiles();

    ...
}

在你的Program.cs中你应该

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStaticWebAssets();
            webBuilder.UseStartup<Startup>();
        });