2016-07-28 89 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 –