4

似乎在标准的 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 元素,包括演示 toast 消息的代码
  2. 测试 toast 是否正常工作 将 launchSettings.json ASPNETCORE_ENVIRONMENT 更改为 Staging、Production 或除 Development 之外的任何内容
  3. 再次运行程序(使用 ISS Express 本地调试),注意 css 格式不正确
  4. 更改调试设置以改用 Kestrel(将 IIS Express 下拉菜单更改为 BlazorApp1 或类似的)
  5. 注意红隼,css工作正常

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

4

1 回答 1

10

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

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

默认情况下,它仅对开发环境启用。您可以通过确保您UseStaticFiles拨打电话UseStaticWebAssets并在Program.CreateHostBuilder.

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

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>();
        });
于 2019-11-15T15:25:59.487 回答