在具有自定义环境的 .NET 6 Web 应用程序中找不到 site.css

Ran*_*age 4 .net css web .net-6.0

使用最新的默认 Web 应用程序模板,例如dotnet new blazorserver,如果我将环境从本地调试更改为Development本地LocalDevelopment调试,我会丢失所有样式,因为找不到我的 site.css 文件(我们在本地调试时使用此自定义环境,以区分从在我们的共享开发网络服务器上运行。)

我相信这是因为,根据文档,

开发环境中默认启用静态 Web 资源。要在从构建输出运行时支持其他环境中的资产,请UseStaticWebAssets调用Program.cs.

执行此操作的一种方法是使用 .NET 3.1/5 样式托管模型,如下所示,以启用 UseStaticWebAssets:

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

我的问题是,如何使用 .NET 6 风格的托管模型来完成此任务?我们希望为所有新应用程序使用新模型。我尝试过以下方法:

builder.WebHost.UseStaticWebAssets();
Run Code Online (Sandbox Code Playgroud)

这会产生以下异常:

Web 根目录从“C:\Web\BlazorServerApp\wwwroot”更改为“C:\Web\BlazorServerApp\”。不支持使用 WebApplicationBuilder.WebHost 更改主机配置。请改用 WebApplication.CreateBuilder(WebApplicationOptions)。

我试过这个:

builder.Host.ConfigureWebHost(c => c.UseStaticWebAssets());
Run Code Online (Sandbox Code Playgroud)

我什至尝试过这个

var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
    WebRootPath = "wwwroot"
});
Run Code Online (Sandbox Code Playgroud)

最后一段代码似乎与本意相反;应用程序的根似乎被设置为/而不是预期的wwwroot,因为在浏览器调试窗口中它似乎正在寻找/site.css而不是wwwroot/site.css.

有没有什么方法可以使用新的 .NET 6 托管模型/最小模板来在自定义环境中使用 StaticWebAssets?

Ale*_*ski 5

答案很明显:您应该将 Web 根路径设置回“wwwroot”:

builder.WebHost.UseWebRoot("wwwroot");
builder.WebHost.UseStaticWebAssets();
Run Code Online (Sandbox Code Playgroud)

或者

WebApplicationBuilder builder = WebApplication.CreateBuilder(
    new WebApplicationOptions
    {
        Args = args,
        WebRootPath = "webroot"
    }
);
builder.WebHost.UseStaticWebAssets();
Run Code Online (Sandbox Code Playgroud)

我不知道 .Net 6 的“正确”方法,但它有效