【问题标题】:What are ASP.NET Core Static Web Assets?什么是 ASP.NET Core 静态 Web 资产?
【发布时间】:2019-10-17 15:54:13
【问题描述】:

HostBuilder.ConfigureWebHostDefaults()(最终调用ConfigureWebDefaults)中有很多隐藏的魔法。我想更好地理解它,因为我找不到关于它的文档。

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

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

【问题讨论】:

  • 我不确定这是否仅与 Blazor 有关,但通常与 Web 托管有关:mvc 应用程序、Razor Pages 应用程序和 Blazor 应用程序。我猜静态网络资产是 JavaScript 文件、样式表和图像等对象。
  • 只是好奇,但你有没有 inspect that class's source code 看看它在做什么?
  • 静态资产是您发送给用户且服务器不会更改的对象。图像是静态资产的一个示例。显示的代码只是检查在哪里寻找静态资产的配置。

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


【解决方案1】:

静态网络资产是从Razor Class Library (RCL) 提供的静态文件:

RCL 可能需要可被 RCL 的消费应用引用的伴随静态资产。 ASP.NET Core 允许创建包含可供消费应用使用的静态资产的 RCL。

UseStaticWebAssets 插入额外的file providersStaticWebAssetsFileProvider 的实例),使用清单文件({environment.ApplicationName}.StaticWebAssets.xml,如果未通过IConfiguration 设置)来确定从路径到基本路径的映射列表。

例如,当使用 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>

这一切都以CompositeFileProviderIWebHostEnvironment.WebRootFileProvider 结束。这个复合提​​供者做了两件事:

  1. 照常处理wwwroot/ 静态文件(假设默认配置)。
  2. 将从wwwroot/Identity 请求的任何文件委托给已提取的用于标识 UI 的 NuGet 包内容文件夹。

正如您问题中的代码 sn-p 所示,这只发生在 Development 环境中运行时。当您的应用发布时,相关文件会被复制到wwwroot 文件夹中,就好像它们是您应用的一部分一样。

【讨论】:

  • 感谢@kirk-larkin 的精彩回答。如上一段所述,您能否澄清一下,当应用发布时有问题的文件被复制到wwwroot 文件夹中?我有一个名为“测试”的环境,但这种魔法没有发生;我需要设置/做什么才能使其适用于测试(也就是说,除了手动调用StaticWebAssetsLoader.UseStaticWebAssets())?
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2017-02-25
  • 1970-01-01
  • 2022-09-25
  • 2010-11-08
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多