2012-10-30 63 views
1

下工作,我在管理使用的NuGet獲得Common.Logging.Log4Net一個C#項目的構建。單元測試都沒有錯誤傳遞從Visual Studio 2010中運行時,但是當我使用MSTest的命令行運行(因此當TeamCity的不一樣),我得到的失敗時,單元測試HIST一類,這是否:log4net的不是MSTest的

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:\顛覆\項目\ MyProject.Tests.Unit \ BIN \調試\ TestResults \ rac_DWM300619 2012-10- 30 11_58_34 \輸出\ MyProject.Tests.Unit.dll.config線168)---> Common.Logging.ConfigurationException:無法創建 類型'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,Common.Logging.Log4net'---> System.IO.FileNotFoundException:無法加載文件或 程序集'Common.Logging.Log4net'或其某個依賴關係。系統找不到 指定的文件。

我使用以下的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輸出文件夾 - 這是問題嗎?如果是這樣,我該如何解決這個問題?

+1

確保'Common.Logging.Log4net'組件複製到該目錄的試運行在那裏。 – Steven

+0

是的,但如何? Common.Logging.dll被複制,但Common.Logging.Log4net.dll不是。 – RCross

+2

從您的應用程序中添加對程序集的引用。 – Steven

回答

2

MSTest的一些次拷貝組件到一個新的文件夾,並從那裏運行測試。問題是某些版本(所有版本?)使用某種類型的靜態分析來複制要複製的組件。由於來自常見日誌記錄的log4net連接非常動態(使用常見日誌記錄的目的),程序集絕不會被複制,因此您的錯誤。
如果你想解決這個問題,你需要爲MSTest(從Visual Studio內部)創建一個testsettings文件。然後將deploymentItems(你的缺失的程序集)添加到它。然後你需要將你的命令行指向它。在teamcity中,您在配置MsTest runner時在「MSTest運行配置文件」中執行此操作。