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?
答案很明显:您应该将 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 的“正确”方法,但它有效