我有一個第三方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的已安裝版本,並注意到有一些軟件包丟失。所以,我下載並安裝這些軟件包的測試機上:
- Microsoft Visual C++ 2010 Redistributable Package (x86)
- Microsoft Visual C++ 2010 Redistributable Package (x64)
,並沒有工作。然後我測試了6臺不同的電腦。我的程序在3臺電腦上運行,在另外3臺電腦上崩潰。唯一能區分PC的是Microsoft Visual C++ 2010 Runtime
。安裝後,它似乎工作。
但我無法找到該軟件包在互聯網上的安裝程序。所以我在一臺PC上安裝了Visual Studio 2013,在那裏我的程序崩潰了。在我安裝Visual Studio(以及C++ Runtime)之後,我的程序運行。
所以我假設我需要C++運行時。我們的客戶PC上不需要Visual Studio。所以我需要部署C++運行時。但問題是:
從哪裏獲得Visual C++運行時?
還是有人知道我是否錯過了另一件事?
您可能需要安裝.NET框架/運行時間 – OMGtechy
還要檢查您的C++代碼是否以發佈模式編譯。我在嘗試在目標機器上運行在Debug中編譯的本地C++時遇到問題,因爲有不同的vc運行時庫 – MDK
@OMGtechy:安裝了.NET框架。 –