我使用PhysicalFileProvider 在多个 ASP.NET 核心 Web 项目之间共享静态资产,并且效果非常好。我也在此处发布了相同的答案:https://stackoverflow.com/a/52048104/188740,因为它也适用于那里。
为此,我在src 中创建了一个新文件夹。我称它为assets,所以我的解决方案资源管理器看起来像这样:
src/assets
src/Foo.Web1
src/Foo.Web2
test/Foo.Tests
我将所有共享的静态资产(例如 css、JavaScript、图像)放在 /src/assets 中。现在我使用PhysicalFileProvider 将/src/assets 映射到Foo.Web1 和Foo.Web2 项目中的wwwroot/assets 文件夹。在Startup.cs的Configure方法中,我添加了这个:
if (Env.IsDevelopment())
{
// app is IApplicationBuilder and Env is IHostingEnvironment
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Regex.Replace(Env.ContentRootPath, $"{Env.ApplicationName}$", "assets"))),
RequestPath = new PathString("/assets"),
OnPrepareResponse = ctx =>
{
// Optionally manipulate the response as you'd like. for example, I'm setting a no cache directive here for dev.
ctx.Context.Response.Headers.Append("Cache-Control", "no-cache, no-store, must-revalidate");
}
});
}
现在,来自/assets 的任何请求都将从/src/assets 文件夹提供,该文件夹可由Foo.Web1 和Foo.Web2 共享。 /src/assets 中的所有更改都将实时反映。这在开发中工作得很好,但在生产方面,我不这样做。相反,我在我的部署脚本中将文件从 /src/assets 复制到 Foo.Web1/wwwroot/assets 和 Foo.Web2/wwwroot/assets,因此不需要重新映射。