2016-07-28 92 views
0

類型「System.IO.FileNotFoundException」的未處理的異常發生在LoggerLibrary.dll無法在MS測試從C++包裝

附加信息加載文件或程序集「log4net的」 log4net,Version = 1.2.13.0,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a'或其依賴項之一。該系統找不到指定的文件。

從C++包裝器調用的log4Net導致這種情況 我在測試開始時向log4Net添加了一個調用,並且它很穩定,爲什麼? DLL是否尚未加載?

回答

1

好消息是,您可以從Visual Studio源代碼構建.net dll,並在log4Net站點https://logging.apache.org/log4net/download_log4net.cgi處提供,然後選擇適合您需求的正確目標框架。

然後,您可以將您想要的類作爲COM類公開,以便C++可以使用它們。你必須添加一些接口到代碼。

本文給出了一個很好的解釋「如何調用來自本機的Visual C託管DLL ++在Visual Studio.NET或Visual Studio 2005的代碼」 https://support.microsoft.com/en-ca/kb/828736

然後簽上你的DLL。

SN.EXE -k MyKeyFile.SNK

替換下面的代碼行中AssemblyInfo.cs文件

[assembly: ComVisible(false)] 
[assembly: AssemblyDelaySign(false)] 
[assembly: AssemblyKeyFile("")] 

用下面。

[assembly: ComVisible(true)] 
[assembly: AssemblyDelaySign(false)] 
[assembly: AssemblyKeyFile("..\\..\\MyKeyFile.SNK")] 

按下CTRL + SHIFT + B生成託管DLL,以在您的C++項目中使用。

+0

Log4Net的問題是,在測試開始時,我有能力使用log4Net寫入日誌文件,但在測試的幾步之後,它突然引發一個異常,「無法加載文件或程序集」 。測試是.Net,這稱爲包裝層,連接到非管理代碼(C++)。 Unmanage代碼會引發異常,而不會引發.Net(MS測試) –

+0

您可能必須編寫一個如下例所示的託管代碼的有問題的無代碼調用接口的包裝器。 //接口實現。 public class ManagedClass:ICalculator { public int Add(int Number1,int Number2) { return Number1 + Number2; } } – Markus

+0

我有一個包裝!順便說一句,這是我的解決方案在unmanage代碼的答案http://stackoverflow.com/questions/315051/using-a-class-defined-in-a-c-dll-in-c-sharp-code/36574077#36574077 –