HostBuilder.ConfigureWebHostDefaults()
中发生了很多隐藏的魔术(最终称为ConfigureWebDefaults
)。我想更好地了解它,因为我找不到有关它的文档。
This code似乎正在加载一些静态文件。什么是静态网络资产,为什么我们需要它们?这与将静态资产嵌入Blazor的库有关吗?
builder.ConfigureAppConfiguration((ctx, cb) =>
{
if (ctx.HostingEnvironment.IsDevelopment())
{
StaticWebAssetsLoader.UseStaticWebAssets(ctx.HostingEnvironment, ctx.Configuration);
}
});
答案 0 :(得分:5)
静态Web资产是可从Razor Class Library (RCL)获得的静态文件:
RCL可能需要伴随的静态资产,该静态资产可以由RCL的使用应用程序引用。 ASP.NET Core允许创建RCL,这些RCL包含可供消费应用程序使用的静态资产。
UseStaticWebAssets
使用清单文件(如果未通过{environment.ApplicationName}.StaticWebAssets.xml
进行设置,则使用清单文件(IConfiguration
)插入附加的file providers(StaticWebAssetsFileProvider
的实例),以确定从路径到基本路径的映射。
作为示例,使用ASP.NET Core Identity UI RCL时,应用程序的清单文件看起来像这样:
<StaticWebAssets Version="1.0">
<ContentRoot BasePath="/Identity" Path="\path\to\.nuget\packages\microsoft.aspnetcore.identity.ui\3.0.0\staticwebassets\V4" />
</StaticWebAssets>
所有操作最终都为CompositeFileProvider
设置了IWebHostEnvironment.WebRootFileProvider
。该复合提供程序执行以下两项操作:
wwwroot/
静态文件(假定使用默认配置)。wwwroot/Identity
请求的所有文件委派到身份UI的提取的NuGet软件包内容文件夹。如您问题中的代码段所示,只有在Development
环境中运行时,才会发生这种情况。 发布应用程序后,有问题的文件将被复制到wwwroot
文件夹中,就像它们是应用程序的一部分一样。