什么是ASP.NET Core静态Web资产?

时间:2019-10-17 15:54:13

标签: asp.net-core asp.net-core-mvc blazor

HostBuilder.ConfigureWebHostDefaults()中发生了很多隐藏的魔术(最终称为ConfigureWebDefaults)。我想更好地了解它,因为我找不到有关它的文档。

This code似乎正在加载一些静态文件。什么是静态网络资产,为什么我们需要它们?这与将静态资产嵌入Blazor的库有关吗?

builder.ConfigureAppConfiguration((ctx, cb) =>
{
    if (ctx.HostingEnvironment.IsDevelopment())
    {
        StaticWebAssetsLoader.UseStaticWebAssets(ctx.HostingEnvironment, ctx.Configuration);
    }
});

1 个答案:

答案 0 :(得分:5)

静态Web资产是可从Razor Class Library (RCL)获得的静态文件:

  

RCL可能需要伴随的静态资产,该静态资产可以由RCL的使用应用程序引用。 ASP.NET Core允许创建RCL,这些RCL包含可供消费应用程序使用的静态资产。

UseStaticWebAssets使用清单文件(如果未通过{environment.ApplicationName}.StaticWebAssets.xml进行设置,则使用清单文件(IConfiguration)插入附加的file providersStaticWebAssetsFileProvider的实例),以确定从路径到基本路径的映射。

作为示例,使用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。该复合提供程序执行以下两项操作:

  1. 像往常一样处理wwwroot/静态文件(假定使用默认配置)。
  2. 将从wwwroot/Identity请求的所有文件委派到身份UI的提取的NuGet软件包内容文件夹。

如您问题中的代码段所示,只有在Development环境中运行时,才会发生这种情况。 发布应用程序后,有问题的文件将被复制到wwwroot文件夹中,就像它们是应用程序的一部分一样。