代码之家  ›  专栏  ›  技术社区  ›  Johnny Oshika

ASP。Net核心:使用共享项目在多个项目之间共享静态资产(css/js)

  •  7
  • Johnny Oshika  · 技术社区  · 8 年前

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

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

    enter image description here

    然后,我从ASP.NET添加了对这个共享项目的引用。Net核心web项目。但是,我在运行项目时无法访问此文件。我尝试了以下网址(包括许多其他网址):

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

    结果都是404。似乎我没有找到一种方法使这些文件在我的web项目中可用,或者我错误地引用了它们。有人知道怎么做吗?

    2 回复  |  直到 8 年前
        1
  •  6
  •   Johnny Oshika    7 年前

    下面是我解决这个问题的方法。我没有使用共享项目,因为我无法让它工作。相反,我用 PhysicalFileProvider 它就像魅力一样。

    为此,我在中创建了一个新文件夹 src .我叫它 assets 因此,我的解决方案资源管理器如下所示:

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

    我将所有共享的静态资产(例如css、JavaScript、图像)放入 /src/assets .现在我要地图了 /src/资产 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/资产 可由共享的文件夹 福。Web1 福。Web2 .所有的变化 /src/资产 将实时反映。这项工作在dev中非常好,但在生产方面,我不这么做。相反,我从 /src/资产 Foo.Web1/wwwroot/assets Foo.Web2/wwwroot/assets 在我的部署脚本中,这样就不需要重新映射。

        2
  •  3
  •   Andres    5 年前

    我知道这个问题已经存在两年了,但我需要在我的blazor应用程序中共享静态资产,该应用程序支持两种托管模式(服务器和WebAssembly),并找到了另一种解决方案。

    以防万一,共享项目是一个Razor类库。

    enter image description here

    wwwroot在Ux上。两个用户体验都引用的共享项目。服务器(Blazor服务器托管模式)和Ux。Wasm(Blazor WebAssembly托管模型)。 要在两个项目中使用此资产,您只需使用:

    _content/{LIBRARY NAME}/
    

    例如在索引中。您引用此资产的每个项目的html如下:

     <link href="_content/Ux.Shared/css/bootstrap/bootstrap.min.css" rel="stylesheet" />
    

    这在Blazor中很好用,我想它在Asp中也可以用。净核心。