【问题标题】:Visual Studio unit tests throw MissingMethodException when assembly is in GAC?当程序集在 GAC 中时,Visual Studio 单元测试会抛出 MissingMethodException?
【发布时间】:2008-10-14 19:52:13
【问题描述】:

我的应用程序包含一段在组件服务内部执行的代码,因此我们需要在 GAC 中注册我们的业务规则层(及其依赖项)。这些依赖项之一是 FooCore.dll,它包含对整个应用程序可见的类和服务。

一切正常,直到我在 FooCore 中的一个类中添加了一个新方法。现在,当我运行单元测试时,任何调用此新方法的测试都会引发 MissingMethodException,即使我使用最新版本的程序集更新了 GAC。唯一的解决方法是在运行测试之前从 GAC 中删除 FooCore。

我尝试了以下方法:

  • 重建整个解决方案,刷新 GAC 中的内容,然后运行测试 = 失败
  • 在测试项目中删除并重新添加了 FooCore 程序集引用 = 失败
  • 确保 FooCore 在 properties = failure 中设置为“Copy Local”

我可以做些什么来确保 VSTS 从它们明确定义的位置而不是从 GAC 加载引用的程序集?

【问题讨论】:

    标签: visual-studio gac


    【解决方案1】:

    进一步的研究出现了this forum thread on this issue,其中有人认为这可能是由于 VS2008 的性能分析功能保留了旧版本的程序集。

    我能够通过以下方式解决我的问题:

    1. 然后重建我的解决方案
    2. 刷新 GAC 中的所有内容,然后
    3. 在我的测试项目中删除并重新添加程序集引用,然后
    4. 关闭并重新打开 Visual Studio 2008

    我不确定其中哪些步骤是明确必要的,但这种“厨房水槽”方法为我解决了这个问题。

    更新:This Microsoft article 指出,当编译解决方案时,GAC 中的程序集永远不会复制到输出 bin\ 文件夹中,即使“复制本地”设置为 true。

    【讨论】:

      【解决方案2】:

      就我而言,我有两个位置不同的(几乎)相同的程序集。 测试项目引用了第一个程序集,而 UnitTest 项目引用了第二个程序集(它们完全一样)。

      因此,请仔细检查所有项目参考资料。

      【讨论】:

        猜你喜欢
        • 2013-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多