【问题标题】:Include wwwroot from a library project?包括图书馆项目中的 wwwroot?
【发布时间】:2016-07-11 22:50:36
【问题描述】:

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

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

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

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

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

这可以使用 project.json 来完成吗?

【问题讨论】:

  • 目前不可能在通过构建创建的 nuget 中包含内容文件,但我的理解是,一旦我们到达 RC2,它应该是可能的
  • 就目前而言,我已经编写了一些 gulp 任务来将共享的 HTML/JS/CSS 资产从库项目复制到解决方案中的几个不同的 Web 项目 - 如果有点骇人听闻...如果这听起来有帮助,我可以将其写成答案,并详细说明我是如何做到的?它每次都作为预构建任务运行,因此无需手动同步。
  • @MarkHughes 我已经制定了一个计划,以防万一这将是唯一的解决方案,但请随时分享您的。它在我的特定情况下无济于事,但其他人可能会觉得它很有用。
  • 我喜欢@Tseng 的答案的样子——如果这样的话,那将比我的 gulp hack 更直接地回答这个问题。
  • 这可能并不能完全解决他的问题,因为资源将被编译到程序集中。但是,如果您的项目共享相同的服务器和相同的虚拟文件系统(即在 same docker 容器中运行),您也可以对文件夹进行符号链接。或者,您可以实现自己的IFileProvider,它将从您选择的公共文件夹中读取文件

标签: asp.net-core


【解决方案1】:

看看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 加载它。

【讨论】:

  • 我认为 EmbeddedFileProvider 最接近原始问题,不确定 PhysicalFileProvider 将如何帮助从链接项目中获取文件。
猜你喜欢
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多