zoukankan      html  css  js  c++  java
  • 在 Visual Studio 单元测试中使用CallContext 导致的 Unit Test Adapter threw exception: Type is not resolved for member... 异常

    该问题的表现形式是:

      在运行单元测试(或其他的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")]

    到特定的方法上


  • 相关阅读:
    BZOJ5212 ZJOI2018历史(LCT)
    BZOJ5127 数据校验
    253. Meeting Rooms II
    311. Sparse Matrix Multiplication
    254. Factor Combinations
    250. Count Univalue Subtrees
    259. 3Sum Smaller
    156. Binary Tree Upside Down
    360. Sort Transformed Array
    348. Design Tic-Tac-Toe
  • 原文地址:https://www.cnblogs.com/PurpleTide/p/2398519.html
Copyright © 2011-2022 走看看