2016-03-24 70 views
4

我正在處理一個具有多個項目的項目結構,這些項目服務於同一組靜態文件。包含來自庫項目的wwwroot?

在開始時,每個項目都會服務於靜態文件和API服務,但後來我打算將它們中的一部分分成多個項目。

  • 項目A將服務器靜態文件和API
  • ProjectB1只會相同的靜態文件,在項目A
  • ProjectB2只會在API

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

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

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

+0

目前不可能將內容文件包含在通過構建創建的nuget中,但我的理解是,一旦我們進入RC2,它應該是可能的 –

+0

就目前而言,我已經寫了一些gulp任務來複制將一個庫項目中的HTML/JS/CSS資源共享到一個解決方案中的幾個不同的Web項目 - 如果有點冒險的話,它可以很好地工作......如果這聽起來很有幫助,我可以把它寫成一個答案,我做的?它每次都作爲預生成任務運行,因此不需要手動同步。 –

+0

@MarkHughes我已經制定了一個計劃,以防止這是唯一的解決方案,但可以隨時與您分享。這對我的特殊情況沒有幫助,但其他人可能會覺得它有用。 – hultqvist

回答

4

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

+0

我認爲EmbeddedFileProvider與原始問題最接近,不確定PhysicalFileProvider如何幫助從鏈接項目獲取文件。 – hultqvist