我使用Visual Studio 2010和C#來構建應用程序的WinForms和類庫。我有一些用於所有產品的公共庫,然後是我的應用程序的一些產品特定庫。我的組件都沒有GAC'd。所有項目將其輸出從各自的bin \ Debug文件夾複製到一個公用的Repository文件夾,並且所有組件引用都指向該Repository文件夾。Visual Studio 2010的大會參考文檔
例如,Common.DAL.dll,Common.BLL.dll,Product.DAL.dll,Product.BLL和Product.exe
組件之間的引用通常是這樣的:
- Product.exe包括提及Product.BLL
- Product.BLL包括到Common.BLL和Product.DAL引用
- Product.DAL包括提及Common.DAL
- 通訊on.BLL包括當所有這些都包含在同一個解決方案refrence到Common.DAL
,構建depencies是這樣的:
- Common.BLL取決於Common.DAL
- Product.DAL取決於Common.DAL
- Product.BLL取決於Common.BLL和Product.DAL
- Product.exe取決於Product.BLL
這使得構建順序是這樣的:
- Common.DAL
- Common.BLL
- Product.DAL
- Product.BLL
- Product.exe
通常情況下,試圖運行一個應用程序時,我得到以下錯誤:
無法加載文件或程序集「Common.DAL,版本= 1.0.0.0,文化=中性公鑰= 4e5249f2e70e1da8」或它的一個依賴。該系統找不到指定的文件。
我已經查明問題到一個事實,即在Product.exe的bin \ Debug文件夾不是所有的解決方案建立在組件結束。
如果我清潔解決方案,然後重建它,文件顯示是這樣的:
- Common.DAL \ BIN \調試包含Common.DAL.dll
- Common.BLL \ BIN \調試包含Common.BLL.dll和Common.DAL.dll
- Product.DAL \ bin \ Debug包含Common.DAL.dll和Product.DAL.dll
- Product.BLL \ bin \ Debug包含Common.BLL。 dll,Common.DAL.dll, Product.BLL.dll和Product.DAL。dll的
- 但Product.exe \ BIN \調試只包含Product.exe,Product.BLL和 Product.DAL。 它缺少公共程序集。所以當我運行 Product.exe時,出現上面列出的錯誤。
我檢查了我所有的項目和屬性的屬性。它們都使用.NET Framework 4.對我的程序集的所有引用都將「特定版本」屬性設置爲false,並將「複製本地」屬性設置爲true。
我可以力缺少的組件,以通過增加在Product.exe項目共同組件引用複製到Product.exe \ BIN \調試,但由於Product.exe不明確使用常見的組件,這感覺更像是一個混亂而不是解決方案。
我已經通過MSDN和Visual Studio文檔看了看,如果我能找出什麼影響或影響引用的程序集的拷貝,我已經如此搜查了類似的問題,但我還沒有發現任何有用的。
我在爲去哪裏或下一步要做什麼損失。
爲什麼你不希望使用項目參考?如果你到處使用項目引用,你是否仍然有這個問題? – McKay
我們在少數幾個項目中遇到過這種情況,最終以「copylocal = true」引用了最上面程序集(* .exe或網站)中的所有程序集。這是一種解決方法,我也想知道這種行爲的真正原因是什麼。 –
@McKay,當項目全部存在於同一個解決方案中時,項目引用纔是有效的。很多時候,所有的項目都不會採用相同的解決方案。 Common.DAL和Common.BLL程序集通常不在Product.exe解決方案中,甚至Product.DAL和Product.BLL項目也不一定必須位於Product.exe解決方案中。 –