2014-12-02 79 views
1

因此,我嘗試使用NDepend API爲我的代碼上的某些度量標準(這很好地工作)設置項目,但是,當我嘗試運行測試框架(NUnit) ,我得到了TypeInitializationExceptions拋出。使用NUnit測試時,NDepend TypeInitializationExceptions

下面是一些代碼來重現,我發現了錯誤:

  • 創建一個類庫項目,並在$NDependInstallPath$\lib\NDependAPI引用NDepend的API DLL,設置複製本地false。創建一個類,如下所示:

    public class NDependProjectLoader 
    { 
        public void LoadAnNDependProject() 
        { 
        var provider = new NDependServicesProvider(); 
        } 
    } 
    
  • 創建的解決方案,這將是您的測試類第二類庫項目。 NUnit的參考和項目創建引用NDependAPI

    [TestFixture] 
    public class NDependProjectLoader_Tests 
    { 
        [Test] 
        public void I_can_load_an_depend_project() 
        { 
        new NDependProjectLoader().LoadAnNDependProject(); 
        } 
    } 
    
  • 構建,並使用你選擇的測試運行運行測試(我試過ReSharper的測試運行和NUnit的GUI)。

  • 您將在行上獲得TypeInitializationException var provider = new NDependServicesProvider();

  • 尋找那TypeInitializationException內表明根異常的消息是:

"{"Could not load file or assembly 'NDepend.Platform.DotNet' or one of its dependencies. The system cannot find the file specified.":"NDepend.Platform.DotNet"}".

「的可執行程序集必須生成到$ NDependInstallPath $ \」

  • 在代碼從測試運行器啓動的情況下,可執行文件將不在ndepend安裝路徑中。

  • 從一個控制檯應用程序,它的.exe在$ NDependInstallPath $ \ LIB \生成調用NDependProjectLoader.LoadAnNDependProject()(注意,該.exe似乎需要的\ lib \子文件夾中生成未在$ NDependInstallPath $ \如入門指南中所述)不會產生異常,這進一步指出這是原因。

所以,問題是,如何使用除了控制檯應用程序之外的其他任何東西的NDepend API?例如,在這裏我想從一個測試跑步者那裏做這件事。另一個明顯的候選人是IIS應用程序。我錯過了明顯的東西嗎?

回答

0

確實問題來自於程序集解析。 您必須告訴CLR在哪裏可以找到NDepend程序集(即在目錄$ NDependInstallPath $ \ Lib中) 您有2個選擇來執行此操作。假設$ NDependInstallPath $是 「C:\ NDepend的」 只是舉例:

  • 無論是編輯AssemblyResolverHelper在解決組件 「C:\ NDepend的\ Lib文件」

  • 無論是創建一個app.config文件你的EXE,add a <probing> element引用「C:\ NDepend \ Lib」。當CLR不能解決大會,那麼它會看在這樣的元素迪爾

+0

謝謝,現在工作的魅力! – thejackamo 2014-12-03 02:29:38