从这里获取灵感:http://rion.io/2017/03/22/sharing-is-caring-using-shared-projects-in-asp-net/,我试图使用共享项目在多个ASP.Net Core项目之间共享静态 Assets (例如css/js)。

我创建了一个共享项目,并将此文件添加到此文件夹层次结构中:

visual-studio - ASP.Net Core : Use Shared Project to share static assets (css/js) between many projects-LMLPHP

然后,我从ASP.Net Core Web项目中添加了对该共享项目的引用。但是,我在运行项目时无法访问此文件。我尝试了以下这些URL(还有许多其他URL):

http://localhost:50000/assets.style.css
http://localhost:50000/wwwroot/assets/style.css

它们都导致404。似乎我要么没有找到使这些文件在我的Web项目中可用的方法,要么我引用不正确。有人知道如何进行这项工作吗?

最佳答案

这是我解决此问题的方法。我没有使用共享项目,因为我无法使用它。取而代之的是,我使用了PhysicalFileProvider,它的作用就像魅力。

为此,我在src中创建了一个新文件夹。我将其称为assets,因此我的解决方案资源管理器看起来像这样:

src/assets
src/Foo.Web1
src/Foo.Web2
test/Foo.Tests

我将所有共享的静态 Assets (例如css,JavaScript,图像)放在/src/assets中。现在,我使用/src/assetswwwroot/assets映射到Foo.Web1Foo.Web2项目中的PhysicalFileProvider文件夹。在Startup.csConfigure方法中,添加以下代码:
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/assetsFoo.Web1可以共享的Foo.Web2文件夹中提供。 /src/assets中的所有更改将实时反射(reflect)。这项工作在开发人员中非常出色,但是在生产中,我不这样做。相反,我在部署脚本中将文件从/src/assets复制到Foo.Web1/wwwroot/assetsFoo.Web2/wwwroot/assets,因此不需要重新映射。

关于visual-studio - ASP.Net Core : Use Shared Project to share static assets (css/js) between many projects,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50651162/

10-14 16:40
查看更多