我正在开发一个必须安装在GAC中的程序集,并且作为构建后步骤的一部分,我确保在每次构建之后GAC都会得到更新。如果我创建一个(Visual Studio)单元测试(在一个单独的测试程序集中)调用被测试类的新方法,然后在被测试类(TDD样式)上实现该方法,然后运行运行测试(CTRL R,T)待测组件和单元测试项目建立(并且程序集在GAC中进行更新)。为什么VSTestHost.exe从c: windows assembly temp目录加载程序集?
测试失败(为新方法抛出System.MissingMethodException)。如果我现在调试测试通过测试,然后我可以运行测试,它会通过。
作为我调查的一部分,我为测试添加了一个无限循环,然后运行它。我使用Process Explorer来查找测试过程中加载的dll的路径。我发现 有一个C:\ WINDOWS \ assembly \ temp \ 4XY349E7C5中的程序集句柄。使用技巧,我发现here在该目录中查找我发现我的dll的旧版本比在GAC中,如果我使用Reflector检查dll,我发现它不包含我添加的新方法,它解释了MissingMethodException。
那么,为什么VSTestHost.exe加载临时目录中的DLL,并有一些方法可以确保使用正确的DLL?
我有一个类似的问题与SharePoint和OWSTIMER-问题是它很难重新启动OWSTIMER服务比它是VSTest。 http://stackoverflow.com/questions/5047694/sharepoints-owstimer-service-keeping-references-to-feature-receiver-assemblies – Ryan