2016-07-28 11 views
0

CからMS試験でファイルまたはアセンブリ「log4netの」をロードできませんでしたlog4net、バージョン= 1.2.13.0、文化=ニュートラル、PublicKeyToken = 669e0ddf0bb1aa2a 'またはその依存関係の1つ。システムは、指定されたファイルを見つけることができません。は型「System.IO.FileNotFoundException」の未処理の例外がLoggerLibrary.dll</p> <p>で発生しました追加情報++ラッパー

C++ラッパーから呼び出されたlog4Netは、この徴候を引き起こします テスト開始時にlog4Netへの呼び出しを追加しましたが、それはなぜですか? DLLはまだロードされていませんか?

答えて

1

Visual Studioソースコードから.net dllをビルドしてlog4Netサイトhttps://logging.apache.org/log4net/download_log4net.cgiで提供し、ニーズに合った適切なターゲットフレームワークを選択することをお勧めします。

次に、C++がそれらを消費できるように、必要なクラスをCOMクラスとして公開することができます。コードにいくつかのインターフェースを追加する必要があります。

この記事は、その後、あなたのdllに署名https://support.microsoft.com/en-ca/kb/828736

を「ビジュアルStudio.NETまたはVisual Studio 2005でネイティブのVisual C++コードからマネージ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キーを押して、C++プロジェクトで使用するマネージDLLを生成します。

+0

Log4Netの問題点は、テスト開始時にlog4Netを使用してログファイルに書き込むことができますが、テストのいくつかのステップの後に「ファイルまたはアセンブリをロードできませんでした」という例外が突然発生することです。 。テストは.Netであり、これはアンマネージコード(C++)に接続されたラッパーレイヤーに呼び出されます。 Unmanageコードでは例外が発生しますが、.Net(MSテスト)では発生しません –

+0

この例のように、問題のある無差別コード呼び出しインターフェイスの周囲に、マネージコードへのラッパーを記述する必要があります。 //インターフェイスの実装。 パブリッククラスManagedClass:ICalculator { public int Add(int Number1、int Number2) { return Number1 + Number2; } } – Markus

+0

私はラッパーを持っています!これは私のアンマネージコードのラッパーの答えです。http://stackoverflow.com/questions/315051/using-a-class-defined-in-a-c-dll-in-c-sharp-code/36574077#36574077 –