2009-01-22 28 views
0

我的解決方案主要是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中。從命令行構建時,它沒有任何參考就可以正常工作。]

+0

Downvoter?習慣上提供解釋性評論。 – 2014-12-17 15:18:02

回答

1

我們在使用Build時遇到了Visual Studio和混合C++和C#項目的問題。然後,我們切換到只使用重建,它的工作。您可能從命令行重建並在IDE中生成。

順便說一句,不可能這個引用需要在那裏,因爲項目依賴於它嗎?

+0

Stefan說得對。參考文獻不是傳遞性的。您需要添加參考。 – 2009-04-15 11:36:51

相關問題