2009-12-03 251 views
3

我在Visual Studio 2008中的「複製到輸出」功能有問題。也許我誤解了它應該如何工作。Visual Studio 2008項目參考

我有四個項目的解決方案:

  • TestApp1(Windows應用程序)
  • TestAppA(Windows應用程序)
  • TestProj1(類庫)
  • TestProjA(類庫)

依賴關係如下(依賴於項目引用中的依賴關係)。

  • TestProj1依賴於什麼。
  • TestApp1取決於TestProj1
  • TestProjA取決於TestProj1
  • TestAppA取決於TestProjA(並因此間接地TestProj1)

換言之,依賴樹看起來像這樣。

TestApp1 
    TestProj1 
TestProjA 
    TestProj1 
TestAppA 
    TestProjA 
     TestProj1 

(每個項目具有與標準組件(系統,System.Core程序,等),以及一個參考)

在TestProj1,我已經加入一個文本文件,Test.txt的。在這個文件的屬性中,我指定了「Build Action:Content」和「Copy to Output Directory:Copy always」。

當我生成解決方案,Test.txt的被複制到

  • TestApp1 \ BIN \調試
  • TestProj1 \ BIN \調試
  • TestProjA \ BIN \調試

的文件是而不是複製到TestAppA \ bin \ debug,這是我發現奇怪的。由於TestProj1依賴Test.txt工作,並且TestAppA依靠TestProj1,通過TestProjA,TestApp1將不起作用。

如果我將TestAppA的項目引用直接添加到TestProj1(所以我有一個引用TestProj1,另一個引用TestProjA),該文件將被複制到TestAppA \ bin \ debug文件夾。

當然,我可以設置一個自定義構建事件來將文件Test.txt複製到TestAppA \ bin \ debug,但是我對自定義構建事件有不好的經驗,並且寧願依靠內置的複製機制。

所以我的問題是:爲什麼不將Test.txt複製到TestAppA \ Bin \ debug?

回答

4

託德已經回答很好,但是這兩個常見的解決方案是:

  • 添加一個生成後步驟到XCOPY中的test.txt到他們的輸出文件夾
  • 添加文本的相關項目文件作爲你的TestProj1項目的組裝嵌入的資源和外部數據文件擺脫需要完全

我也建議你所有的依賴關係可以簡單地調用TestProj1的API來獲取他們所需要的信息,允許使用該程序集封裝數據並將其存儲在任何地方,然後以任何喜歡的格式存儲。

+1

+1爲封裝建議。 – Todd 2009-12-12 17:16:47

2

Visual Studio只查看內容文件的直接引用,所以TestAppA不知道Test.txt存在,因爲它沒有在TestProjA項目文件中看到它。

這是Visual Studio的限制,也是爲什麼許多人最終將其所有項目的輸出指向同一文件夾的原因。

您擁有的其他選項是創建一個「SharedContent」文件夾。然後,您可以將文本文件放在該文件夾中,並通過在每個項目上選擇「添加>現有項目...」將其添加到依賴於它的每個項目中。在添加項目對話框中,從共享文件夾中選擇文本文件,然後單擊「添加」按鈕上的向下箭頭。如果選擇「添加爲鏈接」,則可以將文件添加到項目中而不創建副本。