2016-03-31 25 views
2

我有一個第三方C++程序集,我需要在我的C#項目中使用它。因此,我爲C++程序集編寫了一個C++/CLI包裝器。一切都在我的開發機器上編譯和運行。如何在另一臺計算機上使用C++/CLI程序集運行項目?

但是,當我將我的bin目錄的內容複製到我們的其他機器之一時,它崩潰了。原因是,它無法加載我的C++/CLI-Wrapper程序集。它給出了典型的消息:FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

所以我做了一些調查:我確信,找不到MyWrapperAssembly,並向assembly resolve event添加事件處理程序。在該處理程序中,我加載了MyWrapperAssembly for reflection only。然後我加載了所有的referenced assemblies。只有MyWrapperAssembly的加載才能起作用。所以我相信,該文件可以找到。但是,當我嘗試加載它

Assembly.LoadFrom("hiddenDirectory\MyWrapperAssembly.dll"); 

它崩潰與上面提到的錯誤FileNotFoundException: Could not load file or assembly 'MyWrapperAssembly' or one of its dependencies.

由於反射僅負荷工作,我確信一定有什麼問題在C++層。我在開發機器和測試機器上比較了C++ Redistributable的已安裝版本,並注意到有一些軟件包丟失。所以,我下載並安裝這些軟件包的測試機上:

,並沒有工作。然後我測試了6臺不同的電腦。我的程序在3臺電腦上運行,在另外3臺電腦上崩潰。唯一能區分PC的是Microsoft Visual C++ 2010 Runtime。安裝後,它似乎工作。

但我無法找到該軟件包在互聯網上的安裝程序。所以我在一臺PC上安裝了Visual Studio 2013,在那裏我的程序崩潰了。在我安裝Visual Studio(以及C++ Runtime)之後,我的程序運行。

所以我假設我需要C++運行時。我們的客戶PC上不需要Visual Studio。所以我需要部署C++運行時。但問題是:

從哪裏獲得Visual C++運行時?

還是有人知道我是否錯過了另一件事?

+0

您可能需要安裝.NET框架/運行時間 – OMGtechy

+0

還要檢查您的C++代碼是否以發佈模式編譯。我在嘗試在目標機器上運行在Debug中編譯的本地C++時遇到問題,因爲有不同的vc運行時庫 – MDK

+0

@OMGtechy:安裝了.NET框架。 –

回答

1

如果您使用Visual Studio 2013,則需要2013運行時,而不是2010運行時。

Visual C++ Redistributable Packages for Visual Studio 2013

+0

在其運行的機器上,僅安裝了2010運行時。所以我認爲,我需要至少一個安裝的運行時。 –

+1

@ Rico-E no,你需要運行時匹配已編譯的程序 – OMGtechy

+1

@ Rico-E如果它適用於安裝2010運行時,那麼你的問題是什麼?您已經知道它在哪裏以及如何下載它,只要確保它與您的程序一起安裝即可。 –

1

你可以從這裏最新的運行時間:The latest supported Visual C++ downloads

您需要至少與您用來構建C++/CLI項目的VS版本匹配的那個(所以如果您使用VS2010,則需要VC++ 2010運行時)。

然後,如果您打包的C++庫也需要VC++運行庫,那麼您也必須安裝該庫。圖書館提供者應該告訴你這些依賴關係。

請注意,如果您鏈​​接到第三方.lib文件,則應該使用它們用於編譯它的相同VS版本。否則,你最終會同時使用兩個不同的運行時間,這可能會導致問題。 C++/CLI將不得不使用兼容manged的運行時,但如果版本匹配,則不太可能導致麻煩。

相關問題