Вот как я решил эту проблему.Я не использовал Shared Project, потому что не мог заставить это работать.Вместо этого я использовал PhysicalFileProvider
, и он работает как шарм.
Для этого я создал новую папку в src
.Я назвал его assets
, поэтому мой Solution Explorer выглядит примерно так:
src/assets
src/Foo.Web1
src/Foo.Web2
test/Foo.Tests
Я поместил все общие статические ресурсы (например, CSS, JavaScript, изображения) в /src/assets
.Теперь я сопоставляю /src/assets
с папками wwwroot/assets
в проектах Foo.Web1
и Foo.Web2
, используя PhysicalFileProvider
.В методе 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
будут отражены в режиме реального времени.Это прекрасно работает в dev, но когда дело доходит до производства, я этого не делаю.Вместо этого я копирую файлы из /src/assets
в Foo.Web1/wwwroot/assets
и Foo.Web2/wwwroot/assets
в своем сценарии развертывания, поэтому переопределение не требуется.