Asp.net-Core

包括圖書館項目中的 wwwroot?

  • April 15, 2022

我正在研究一個項目結構,其中多個項目服務於同一組靜態文件。

在開始時,每個項目都將同時提供靜態文件和 API 服務,但稍後我計劃將其中一些分成多個項目。

  • ProjectA 將同時提供靜態文件和 API
  • ProjectB1 將只提供與 ProjectA 中相同的靜態文件
  • ProjectB2 將只提供 API

在經典的 VS 庫中,您可以將文件標記為內容。這些將包含在引用該庫的任何項目的建構輸出中。

我試圖製作一個包含靜態文件的項目 ProjectStatic 並從 ProjectA 和 ProjectB1 中引用它,但 ProjectStatic 中的任何文件都不包含在 ProjectA 和 ProjectB1 的輸出中。

這可以使用 project.json 來完成嗎?

您可以將UseStaticFiles呼叫與EmbeddedFileProvider. 它是 rc1-final 包的一部分,您可以在此處看到。

只為未來的讀者:

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.

引用自:https://stackoverflow.com/questions/36198633