2011-10-12 43 views
2

我有興趣將一個.cpp文件(包含本機代碼和託管代碼)組合到一個更大的C#項目中。我不想爲CPP代碼使用單獨的DLL,這兩者都是因爲僅僅爲了幾行代碼「浪費」整個DLL似乎很愚蠢,並且因爲代碼具有一些我希望混淆的安全功能通過將其隱藏在較大的組件中。 (並且在有人推薦它之前,我不能使用ILmerge或AL,因爲它們不適用於本機代碼。)從VS2008中的csproj調用C++ LINK

編譯.cpp和.cs文件組的基本過程已經被覆蓋了幾次;領先的候選人建議似乎是:

然而,這些(以及所有相關的鏈接,我能找到)的兩個只處理命令行上的建築。我更喜歡改變我現有的.csproj文件來編譯並鏈接到C++代碼中(我不介意C++構建本身在單獨的.vcproj中,儘管如此,如果不是更好,但鏈接不得不成爲在.csproj中),並且它們都可以在VS2008中構建,這樣項目的用戶就不需要知道區別。

不幸的是,我似乎無法成功調用由VS編譯的.csproj內的link.exe。帶有「鏈接」的「Exec」元素找不到可執行文件,因爲它不在PATH中。明確指定位置(「$(DevEnvDir).... \ VC \ bin \ link」)確實開始運行它,但它立即失敗並顯示錯誤代碼,表明它無法加載它需要的庫(可能是因爲再次,它不在PATH中)。

在Visual Studio中,是否有任何成功從csproj調用LINK的示例?


編輯:好吧,我已經成功地解決這個問題,現在,一切都被編譯,鏈接,並運行良好 - 在釋放模式。它仍然在調試模式下運行正常,但由於某種原因,它的SxS清單(其中LINK生成,但我必須通過mt手動應用)僅指發佈CRT,而不是DebugCRT。任何想法如何解決這個問題?

+0

是的,你必須用* set path =%path%; etcetera *來設置路徑。更嚴重的障礙是IDE不會讓你指定/ module編譯選項。你必須破解msbuild。 –

+0

我曾考慮過這樣做,但我無法制定出正確的語法來執行此操作(Exec元素內部或外部)。我不想爲此創建批處理文件,這看起來很笨拙。我試圖這樣做的方式是覆蓋CoreCompile目標;這似乎工作到目前爲止。這算不算黑客msbuild? – Miral

+0

(編輯發生在這裏,所以上面的討論不再適用) – Miral

回答

0

當您使用調試配置構建的使用obj和lib文件進行鏈接時,應該引用DebugCRT。

你的命令行是什麼樣的?