1

NuGet を使用して Common.Logging.Log4Net を取得する C# プロジェクトのビルドを管理しています。Visual Studio 2010 から実行すると、単体テストはすべてエラーなしで合格しますが、MSTest を使用してコマンド ラインから実行すると (したがって、TeamCity が同じことを行うと)、単体テストがこれを行うクラスをヒストすると失敗します。

private static readonly ILog Log = LogManager.GetCurrentClassLogger();

エラーは次のとおりです。

テスト メソッド MyProject.Tests.Unit.BusinessDateBuilderTest.CreateElementalTest が例外をスローしました: System.TypeInitializationException: 'MyProject.Common.Library' の型初期化子が例外をスローしました。---> System.TypeInitializationException: 'MyProject.Common.Initialization.Impl.InitializationLoaderImpl' の型初期化子が例外をスローしました。---> Common.Logging.ConfigurationException: 構成セクション 'common/logging' から Common.Logging の構成を取得できませんでした。---> System.Configuration.ConfigurationErrorsException: 共通/ログ用の構成セクション ハンドラーの作成中にエラーが発生しました: タイプ 'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net' を作成できません (C:\Subversion\Project\ MyProject.Tests. Unit\bin\Debug\TestResults\rac_DWM300619 2012-10- 30 11_58_34\Out\MyProject.Tests.Unit.dll.config 行 168) ---> Common.Logging.ConfigurationException: タイプ 'Common.Logging.Log4Net を作成できません.Log4NetLoggerFactoryAdapter、Common.Logging.Log4net' ---> System.IO.FileNotFoundException: ファイルまたはアセンブリ 'Common.Logging.Log4net' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。

次の NuGet 依存関係を使用しています。

Common.Logging.2.1.1 (DLL のバージョンは 2.1.1.0) Common.Logging.Log4Net.2.0.1 (DLL のバージョンは 2.0.0.0) log4net.1.2.10 (DLL のバージョンは 1.2.10)

Common.Logging.Log4net.dll が testresults 出力フォルダーにコピーされていないことに気付きました - これは問題ですか? もしそうなら、どうすればこれを解決できますか?

4

1 に答える 1

3

MSTest は、アセンブリを新しいフォルダーにコピーし、そこからテストを実行することがあります。問題は、一部のバージョン (すべてのバージョン?) が、コピーするアセンブリのある種の静的分析を使用することです。また、共通ロギングからの log4net 接続は非常に動的であるため (共通ロギングを使用する目的)、アセンブリはコピーされないため、エラーが発生します。
これを修正したい場合は、MSTest のテスト設定ファイルを作成する必要があります (Visual Studio 内から)。そして、それに deploymentItems (不足しているアセンブリ) を追加します。次に、コマンドラインでそれを指す必要があります。teamcity では、MsTest ランナーを構成するときに「MSTest 実行構成ファイル」でこれを行います。

于 2012-12-17T12:50:46.623 に答える