Blazor 服务器 - 静态文件不会在非 DEV 环境中链接

Ran*_*age 4 blazor blazor-server-side blazored

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

来自_Host.cshtml:

<link href="_content/Blazored.Typeahead/blazored-typeahead.css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

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

创建一个新的 Blazor 服务器项目 (dotnet new blazorserver)

  1. 添加所有必要的 Blazored / Toast 元素,包括演示 Toast 消息的代码
  2. 测试 toast 是否正常工作将 launchSettings.json ASPNETCORE_ENVIRONMENT 更改为 Staging、Production 或 Development 以外的任何内容
  3. 再次运行程序(使用ISS Express本地调试),发现css格式不正确
  4. 更改调试设置以使用 Kestrel(将 IIS Express 下拉菜单更改为 BlazorApp1 或类似的)
  5. 请注意 kestrel,css 工作正常

我缺少什么可以让这个引用在其他环境中工作?

Pos*_*rte 9

当应用程序发布时,使用 Razor 类库中的静态资产开箱即用。你只需要<link href="..." />像你一样包含静态内容。

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

默认情况下,它仅在开发环境中启用。您可以通过确保你叫无条件地打开该功能UseStaticFiles,并呼吁UseStaticWebAssetsProgram.CreateHostBuilder

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

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

    app.UseStaticFiles();

    ...
}
Run Code Online (Sandbox Code Playgroud)

在你的 Program.cs 中你应该有

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