在 Visual Studio 單元測試中使用CallContext 導致的 Unit Test Adapter threw exception: Type is not resolved for m

來源:互聯網
上載者:User

該問題的表現形式是:

  在運行單元測試(或其他的VS測試類型)的時候 拋出異常  Unit Test Adapter threw exception: Type is not resolved for member... 

  但是同樣的測試在應用程式/網站中都沒有問題


該問題的根本原因是:

Visual Studio運行測試代碼的時候實際上是在一個獨立的AppDomain中啟動並執行,該AppDomain 無法找到CallContext中儲存的類型

所以拋出了這個異常,不過這個異常資訊非常不清晰,只看異常資訊很難找到問題原因


目前為止有3個解決方案:

  1.拷貝DLL到QAAgent32.exe所在的目錄 (一般在visual studio安裝目錄裡面,一般是C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE)

    該方案對DLL沒有特殊要求,就是麻煩了點

    可以通過在Build Event中的 Post-build event command line 裡面增加一個自動的copy命令 來簡化手動操作

    同時由於QAAgent32.exe會一直保持運行,會導致檔案被鎖定無法自動覆蓋,所以要設定Tools->Options->Test Tools->Test Excetion -> 取消 keep test exection engine running between test runs 的勾

  2.修改QAAgent32.exe.config 中的AssemblyRedirect 重新綁定一個路徑

  3.將程式集註冊到GAC (強烈推薦)

    將程式集註冊到GAC的好處不僅僅是本地可以運行,當使用TFS Build來運行自動化測試的時候,在其他機器上也可以運行測試,而不需要再次配置

    此外將程式集做成強式名稱還有很多其他的好處,(大家可以自己google下~~~)

  可以在Build成功以後自動將產生的程式集註冊到GAC

  配置步驟如下:

    1.添加GACUtil.exe到專案檔中 (有很多個版本的GACUtil.exe 高版本相容低版本)

    2.右擊GACUtil.exe -> 屬性 -> Copy To Output Directory  設定為Copy if newer (並且保持Build Action 為預設值 Content)

    3.右擊項目屬性->Build Event ->Post-build event command line  添加如下代碼

      

        "$(TargetDir)gacutil" -u "$(TargetName)"

        "$(TargetDir)gacutil" -i "$(TargetPath)"

        @echo add assembly to GAC $(TargetPath)

      以上代碼的大意就是,先從GAC中移除同名的DLL,然後再註冊進去,然後列印一些資訊出來


PS:好吧。。其實還有一個辦法是增加一個Attribute

[DeploymentItem("Arch.Base.Logging.API.dll")]

到特定的方法上


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.