我Template在專案中有一個不應編譯的檔案夾或任何內容,但應在構建時包含在內,以便我的應用程式稍后可以復制它。內容也可能包括 C# 檔案。我以前使用此宣告來復制所有內容:
<ItemGroup>
<Compile Remove="Template\**\**" />
<Content Remove="Template\**\**" />
<Folder Remove="Template\**\**" />
<None Include="Template\**\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
但是今天我意識到它不包括空檔案夾。我想使用通配符宣告,而不是<Folder Include="..." />像其他關于 SO 的文章那樣分開,因為Template稍后可能會更改內容,我不希望我或我的隊友忘記添加它。有這樣的宣告嗎?
uj5u.com熱心網友回復:
該功能沒有標志或宣告或元資料CopyToOutputDirectory可以使其復制空目錄。
該CopyToOutputDirectory功能使用Copy任務并且Copy任務不會復制空目錄。
有關于MSBuild復制空目錄的討論/功能請求,因此將來可能會更改,但今天不可用。
一般情況下應該問一個問題,復制的目錄結構真的需要有空目錄嗎?空目錄不包含在輸出中是否可以接受(或可以接受)?例如,如果目錄結構被代碼使用,是否可以更新使用代碼以優雅地處理“丟失”目錄?
對于需要空目錄時,兩種方法是:
- 創建一個自定義 MSBuild 目標,在輸出目錄中靜態構建預期的目錄結構。這個目標很容易實作,它可以是一個單一的
MakeDir任務,但是每當目錄結構改變時都需要維護(即改變)。如果更改不頻繁,這可能沒問題。 - 創建一個動態遍歷目錄結構并在輸出目錄中創建匹配目錄的自定義 MSBuild 目標。這個目標需要更多的努力來實作,但在目錄結構改變時不會“過時”。
如果這些任務是非破壞性的并且僅添加缺少的目錄,則它們可以CopyToOutputDirectory在構建中的步驟發生之前或之后運行。
如果實作了這些目標之一,那么最好也實作一個在clean洗掉目錄結構的 a 上調??用的目標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531096.html
上一篇:在Windows之間切換
