2016-07-28 35 views
0

Eine nicht behandelte Ausnahme des Typs ‚System.IO.FileNotFoundException‘ aufgetreten Datei oder Assembly ‚log4net‘ in MS-Test lädtkann nicht in LoggerLibrary.dll aus einem C++ Wrapper

Zusätzliche Informationen: Die Datei oder Assembly 'laden log4net, Version = 1.2.13.0, Culture = neutral, PublicKeyToken = 669e0ddf0bb1aa2a 'oder eine seiner Abhängigkeiten. Die angegebene Datei wurde vom System nicht gefunden.

Das log4Net von einem C++ Wrapper aufgerufen Ursache diese Ausnahme Ich habe einen Anruf an das log4Net zu Beginn des Tests und es ist stabil, warum? Wurde die DLL noch nicht geladen?

Antwort

1

Gute Neuigkeiten ist, dass Sie die .net dll aus Visual Studio-Quellcode auf der log4Net-Site https://logging.apache.org/log4net/download_log4net.cgi erstellen können und wählen Sie das richtige Zielframework, das Ihren Anforderungen entspricht.

Dann können Sie die gewünschten Klassen als COM-Klassen verfügbar machen, damit C++ sie konsumieren kann. Sie müssen dem Code einige Schnittstellen hinzufügen.

Dieser Artikel gibt eine große Erklärung "Wie eine verwaltete DLL aus nativen Visual C++ Code in Visual Studio.NET oder Visual Studio 2005 nennen" https://support.microsoft.com/en-ca/kb/828736

dann Ihre DLL unterzeichnen.

sn.exe -k MyKeyFile.SNK

Ersetzen Sie die folgenden Codezeilen in der Datei AssemblyInfo.cs

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

mit den folgenden.

Drücken Sie STRG + UMSCHALT + B, um die verwaltete DLL zu generieren, die in Ihrem C++ - Projekt verwendet werden soll.

+0

Das Problem mit dem Log4Net ist, dass ich zu Beginn des Tests in der Lage bin, mit log4Net in die Protokolldatei zu schreiben, aber nach ein paar Schritten im Test wird plötzlich eine Ausnahme ausgelöst: "Datei oder Baugruppe konnte nicht geladen werden" . Der Test ist .Net, und dies rief eine Wrapper-Schicht auf, die mit einem Unmanage-Code (C++) verbunden war. Der Unmanage-Code löst die Ausnahme und nicht den .Net-Test aus (MS-Test). –

+0

Sie müssen möglicherweise einen Wrapper um die problematische Unmanaged-Code-Aufrufschnittstelle zum verwalteten Code schreiben, wie in diesem Beispiel. // Schnittstellenimplementierung. öffentliche Klasse ManagedClass: ICalculator { public int Hinzufügen (int Number1, int Number2) { Rückgabe Number1 + Number2; } } – Markus

+0

Ich habe einen Wrapper! BTW das ist meine Antwort für Wrapper in Unmanage-Code http://StackOverflow.com/questions/315051/using-a-class-defined-in-a-c-dll-in-c-sharp-code/36574077#36574077 –