我的解決方案主要是C#,但我有一個C++項目可以創建一個C#代碼調用的DLL。這裏的佈局:Visual Studio 2008中丟失的目標文件
[編輯:有兩個層次的間接,這將導致問題]
我們會打電話給解MySolution。它有四個項目:
MySolution MyCppDll (creates an unmanaged DLL) MyCSharpWrapper (Managed wrapper for the unmanaged DLL) MyCSharpLibrary (Contains classes that access the wrapper) MyCSharpProgram (Creates classes from MyCSharpLibrary)
我有正確設置,使MyCppDll首先編譯,然後包裝,圖書館,程序的依賴關係。但是,在IDE中構建時,MyCppDll的輸出不會複製到MyCSharpLibrary的輸出目錄。
我可以通過爲MyCSharpLibrary創建後期構建步驟來解決該問題,使其將MyCppDll.dll複製到MyCSharpLibrary \ bin \ Debug(或\ Release)目錄中。
但是,當編譯MyCSharpProgram時,它會獲得與包裝器和庫相關的文件,但它不會獲取DLL。再次,我可以創建一個後期製作步驟來做到這一點,但這並不理想,原因有兩個。
真正的解決方案有幾十個項目,其中許多參考了MyCSharpLibrary。正如你可以想象的那樣,爲每一個創建一個後期構建步驟都是令人厭煩和容易出錯的。每次我添加一個引用該程序集的新項目時,我都必須創建另一個後構建步驟。
而且它不應該是必要的。當我從命令行構建該解決方案時,將按預期方式從MyCSharpLibrary目錄複製該DLL。也就是說,從IDE構建目錄MyCSharpProgram \ bin \ Debug包含MyCSharpProgram.exe,MyCSharpLibrary.dll,MyCSharpWrapper.dll(以及相關的.pdb文件)。但是,如果我從命令行(使用MSBuild)構建,那麼該目錄包含所有AND MyCppDll.dll。
是否有其他人遇到這個問題?我正在使用Visual Studio 2008並且尚未升級到SP1。
[編輯 - 問題似乎是,除非程序項目直接引用Wrapper項目,否則不會複製文件。也就是說,如果我在MyCSharpProgram項目中添加對MyCSharpWrapper的引用,則會複製該DLL。再次,這隻發生在IDE中。從命令行構建時,它沒有任何參考就可以正常工作。]
Downvoter?習慣上提供解釋性評論。 – 2014-12-17 15:18:02