使用團隊城市建構時“無法載入文件或程序集”
我在我們的 Team City (8.0.4) 建構伺服器上遇到了單元測試問題 - 程式碼通過 Resharper 和 nCrunch 在本地建構和執行所有測試。
但是在伺服器上執行時,我收到以下錯誤,即使 Unity 程序集與單元測試程序集存在於同一目錄中,並且在單元測試程序集中被引用。
設置方法失敗。SetUp:System.IO.FileNotFoundException:無法載入文件或程序集“Microsoft.Practices.Unity,版本=2.0.414.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依賴項之一。該系統找不到指定的文件。在 XXXX.Unity.UnityContainerAdapter..ctor() 在 XXXX.GraphExtensionsTests..ctor() 在 c:\TeamCityV7\Agent-1\work\f02f7e27c0bedfa2\XXXX\Graph.Tests\Extensions\GraphExtensionsTests.cs:line 44
我已經確認 Microsoft.Practices.Unity 的副本是正確的版本。
我還確認程序集是使用完整版本的框架建構的——而不是使用客戶端配置文件。
任何想法為什麼 Team City 可能會失敗?
檢查您用於定位測試程序集的模式。我在另一個庫中遇到了類似的問題,結果發現模式是在 bin\Release 和 obj\Release 下找到測試程序集;obj 文件夾不包含項目引用的所有程序集,實際上只是編譯器的臨時文件夾。
我最近發現的另一種可能性是,如果您使用的是未顯式引用的庫,TeamCity 將不會收集庫以供使用,並且在隱式引用程序集時會失敗。當我試圖弄清楚為什麼在我的測試項目中引用的 NHibernate.ByteCode.Castle 沒有被載入並導致 TeamCity 上的 FileNotFoundException 時,我發現了這一點。最終,我做了一個“虛擬”單元測試,如下所示:
using Microsoft.VisualStudio.TestTools.UnitTesting; using NHibernate.ByteCode.Castle; namespace MyNamespace { [TestClass] public class CastleProxyPresenceTest { [TestMethod] [TestCategory("Infrastructure: This test forces TeamCity to load the NHibernate.ByteCode.Castle.dll file.")] public void CastleProxyLoads() { var dummy = new LazyFieldInterceptor(); Assert.IsNotNull(dummy); } } }…在此之後,文件正確載入並編譯了我的單元測試。