2010-06-13 65 views
2

我有兩個版本的項目。一個用於Silverlight,一個用於.NET。 SL項目擁有絕大多數的代碼庫。我想將SL項目中的所有文件作爲鏈接文件全局添加到.NET版本中。我已經成功地在.NET版本中的csproj文件,以便成功地這樣做:Visual Studio鏈接文件目錄結構

<Compile Include="..\MyProj.Common.SL\**\*.cs" Exclude="..\MyProj.Common.SL\Properties\**"> 

不幸的是,這增加的所有文件中我的項目的根......所以我結束了一個.NET項目中長期不可讀的鏈接文件列表。我真的不希望手工維護整個重複的目錄結構,並處理目錄名稱更改和文件名稱更改等等。

那麼,有沒有什麼辦法讓Visual Studio在通配符方式上面添加鏈接文件時保留目錄結構?或者至少有一種方法可以將所有鏈接文件組合在一起,像MyProj.Common.SL.Links這樣的.NET項目的目錄下。

我最接近的是設置<Visible>false</Visible>標籤下的<Compile>標籤,它有效地刪除了300多個文件的長長的不可讀列表....但不幸的是,這使得Resharper不再能夠看到這些文件爲在所有參考.NET項目的項目中,它都是瘋狂的。如果我能想出一種使Resharper不會搞砸的方法,那也是一個可以接受的解決方案......

有什麼建議嗎?

謝謝。

+1

我希望看到像這樣實現的VS插件。將其稱爲「鏈接所有項目文件」或其他內容,您可以在項目A中並告訴它鏈接項目B中的所有項目文件,然後將項目B中的所有文件添加到項目A中,作爲與目錄結構完全一致的鏈接。然後它可以作爲預構建步驟運行。任何有VS擴展經驗的人都可以參加? – PhilChuang 2011-02-25 22:15:27

回答

4

我想我找到得到這個工作的一種方式:

<Compile Include="..\MyProj.Common.SL\**\*.cs" Exclude="..\MyProj.Common.SL\Properties\**"> 
    <Link>MyProj.Common.SL.LinkedFiles\MyProj.Common.SL.LinkedFiles</Link> 
</Compile> 

這將創建一個文件夾下的文件夾MyProj.Common.SL.LinkedFiles和組的所有鏈接的文件。

0

我想我會做到這一點:

  • 複製現有項目的<Compile>項目,這大概有例如Include="foo.cs"Include="Folder\bar.cs"
  • 它們粘貼到新的項目
  • 搜索和替換<Compile Include="(.*?)" /><Compile Include="..\Other\$1" ><Link>$1</Link></Compile>

我不知道,如果我得到了正則表達式搜索和替換語法完全正確的,但問題是,你已經有了一個很好的項目,你應該能夠剪切,粘貼,正則表達式 - 替換它以獲得相同的一組文件,只從不同的文件夾中引用,並且具有相同的目錄結構。

你現在仍然有兩個.csproj來維護,但這也很容易修復。現在將這個新的編譯項目列表放入一個名爲例如「Common.csproj」只包含帶有這些編譯項目的屬性組,然後同時包含兩個項目<Import Include="..\Common.csproj" />並且不包含任何Compile項目。

基本上,一些手動工作來重構.csproj文件共享一次,然後我認爲你會被設置。我不確定這是否是解除阻礙的最簡單方法,但我想這聽起來像是您想要的「理想」結構。