从库项目中包含wwwroot?

hul*_*ist 7 asp.net-core

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

在开始时,每个项目都将服务于静态文件和API服务,但稍后我计划将其中一些项目分成多个项目.

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

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

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

可以使用project.json完成吗?

Tse*_*eng 5

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

您可以使用UseStaticFiles呼叫EmbeddedFileProvider.它是rc1-final软件包的一部分,你可以在这里看到.相关代码可在GitHub找到.

仅供未来读者使用:

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

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

更新:

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

app.UseStaticFiles(new StaticFileOptions {
        FileProvider = new PhysicalFileProvider("/path/to/shared/staticfiles")
});
Run Code Online (Sandbox Code Playgroud)

更新2:

只是为了完整性,还有一个CompositeFileProvider可以IFileProviders用来创建某种虚拟文件系统结构的多个,即如果在PhysicalFileProvider给定位置找不到该文件,则从中加载它EmbeddedFileProvider.