为什么VSTestHost.exe从c:\ windows \ assembly \ temp目录加载程序集?

时间:2010-01-08 15:12:37

标签: unit-testing gac vstesthost

我正在开发一个必须安装在GAC中的程序集,作为构建后步骤的一部分,我确保在每次构建后更新GAC。如果我创建一个(Visual Studio)单元测试(在单独的测试程序集中)在被测试的类上调用一个新方法,然后在被测试的类上实现该方法(TDD样式),然后运行测试(CTRL R,T)被测组件和单元测试项目构建(并且组件在GAC中更新)。

测试失败(抛出新方法的System.MissingMethodException)。如果我现在调试测试通过,那么我可以运行测试,它将通过。

作为调查的一部分,我在测试中添加了无限循环,然后运行它。我使用Process Explorer来查找在测试期间加载的dll的路径。我发现 在C:\ WINDOWS \ assembly \ temp \ 4XY349E7C5中有一个程序集句柄。使用我发现here查找该目录的技巧,我发现我的dll的旧版本比GAC中的版本更高,如果我使用Reflector检查dll,我发现它不包含我添加的新方法解释了MissingMethodException。

那么为什么VSTestHost.exe会在临时目录中加载dll,是否有一些方法可以确保使用正确的dll?

1 个答案:

答案 0 :(得分:2)

阅读此article指出了问题的原因 - VSTestHost.exe保持加载程序集的版本(即gac \ temp文件夹中引用的版本) ,当VSTestHost退出时,融合将卸载)。

问题的解决方案是更改工具/选项/测试工具/测试执行中的设置 - 取消选中“保持测试执行引擎在测试之间运行”。现在,VSTestHost为每次测试运行启动一个新实例,并从GAC加载正确版本的dll。