包含来自图书馆项目的wwwroot?

时间:2016-03-24 11:01:36

标签: asp.net-core

我正在开发一个项目结构,其中有多个项目为同一组静态文件提供服务。

开始时,每个项目都会为静态文件和API服务提供服务,但后来我计划将其中一些项目分成多个项目。

  • ProjectA将同时提供静态文件和API
  • ProjectB1仅提供与ProjectA中相同的静态文件
  • ProjectB2仅提供API

在经典VS库中,您可以将文件标记为内容。这些将包含在引用该库的任何项目的构建输出中。

我尝试创建一个包含静态文件的项目ProjectStatic,并从ProjectA和ProjectB1引用它,但ProjectStatic中的所有文件都不包含在ProjectA和ProjectB1的输出中。

可以使用project.json完成吗?

1 个答案:

答案 0 :(得分:5)

看看PinpointTownes在他的OpenIddict项目中如何实现这一点。

您可以UseStaticFiles使用EmbeddedFileProvider来电。它是rc1-final包的一部分,你可以看到here。相关代码位于GitHub

仅供未来的读者使用:

app.UseStaticFiles(new StaticFileOptions {
        FileProvider = new EmbeddedFileProvider(
            assembly: Assembly.Load(new AssemblyName("OpenIddict.Assets")),
            baseNamespace: "OpenIddict.Assets")
});

OpenIddict.Assets是包含静态资源的程序集/项目名称。

<强>更新

在挖掘源并找到正确的存储库之后,还可以使用PhysicalFileProvider而不是将其打包到程序集中并指向文件系统上的任意文件夹。

app.UseStaticFiles(new StaticFileOptions {
        FileProvider = new PhysicalFileProvider("/path/to/shared/staticfiles")
});

更新2:

为了完整起见,还有一个CompositeFileProvider,您可以使用它来创建多种IFileProviders来创建某种虚拟文件系统结构,即如果在该文件中找不到该文件PhysicalFileProvider指定位置,从EmbeddedFileProvider加载。