3

有一個引用託管C++庫的C#項目解決方案,該C++項目又引用了本機C++庫。 C#項目包含擴展它的BaseUserControl和ChildUserControl。VS2012 Designer無法加載程序集

問題是:如果在BaseUserControl的構造函數中調用本地C++代碼(通過託管C++庫),則不能在設計器視圖中查看ChildUserControl;也不能將BaseUserControl或ChildUserControl添加到表單中。我們得到以下錯誤:

Could not load file or assembly 'TestLibCPP, Version=1.0.4877.30347, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

我們該如何解決這個問題?

我已經包括一個simple VS2012 solution,它演示了這個問題。這是一個人爲的例子,它基於我們正在用最近從VS2005轉換到VS2012的大型代碼庫的問題。

感謝

+1

這是不可避免的,Windows需要能夠找到本地DLL當設計師加載它。它看起來很少的地方,將其存儲在PATH目錄將是必需的。非常脆弱。最好將DLL分成兩部分。 – 2013-05-09 17:42:32

+0

有沒有人有沒有涉及32位編譯的答案?我提供了賞金,因爲我們有這個問題的64位應用程序。編譯32位內容不是一種選擇。 – 2013-11-01 15:20:04

+0

ups剛剛看到了子問題...爲什麼不簡單地將C++ dll改爲x64。這樣您就可以將C#部件留在任何目標。用給出的例子對它進行測試,它就像一個魅力 – zewa666 2013-11-01 21:43:16

回答

0

如果你的源代碼,請嘗試重建使用的解決方案configuraion(X86平臺),然後嘗試用設計器中打開ChildUserControl。

0

問題可能是你的原生dll是建立在32位配置頂級嘗試在32位平臺

0

嘗試改變GUITest平臺目標x86的建設項目。它目前是'任何CPU'。無論您是在64位還是32位的機器上,都可以這樣做。請務必在您的配置中查看平臺(調試,發佈,..)

0

該問題完全基於C++項目的X86體系結構。您的WinForms項目引用「任何CPU」。

我已經包含了圖片,告訴你在哪裏改變它(SRY它在德國,但你應該從屏幕:)上的位置找到它

  1. 右鍵單擊您的WinForms項目,去設置
  2. 切換到標籤編譯(想這就是它的英文名)
  3. 更改目標平臺的x86
  4. 構建和樂趣;)

How to change Target Platform

編輯:

我剛剛看到賞金問題是關於擁有一切設置到64位,從而實現簡單地設定的C++動態鏈接庫的目標,以x64體系結構。

  1. 右鍵點擊任何C++的DLL,然後轉到設置
  2. 在上部區域,你會看到一個在只設置了所有C++動態鏈接庫到x64新打開的窗口稱爲配置經理
  3. 按鈕。
  4. 如果無法選擇,只需單擊箭頭併爲第二個項目創建一個新的x64(不是ARM)體系結構,即可刪除「創建新的」複選框並選擇以前創建的一個。

enter image description here