我正在开发一个必须安装在 GAC 中的程序集,作为构建后步骤的一部分,我确保 GAC 在每次构建后都得到更新。如果我创建一个(Visual Studio)单元测试(在单独的测试程序集中)以在被测类上调用新方法,然后在被测类上实现该方法(TDD 样式),然后运行测试(CTRL R, T) 被测程序集和单元测试项目被构建(并且程序集在 GAC 中更新)。
测试失败(为新方法抛出 System.MissingMethodException)。如果我现在调试测试,测试通过,然后我可以运行测试,它会通过。
作为我调查的一部分,我在测试中添加了一个无限循环,然后运行它。我使用 Process Explorer 来查找在测试期间加载的 dll 的路径。我发现在 C:\WINDOWS\assembly\temp\4XY349E7C5 中有一个程序集的句柄。使用我在此处找到的技巧查看该目录,我发现我的 dll 版本比 GAC 中的旧版本,如果我使用 Reflector 检查 dll,我发现它不包含我添加的新方法,它解释了 MissingMethodException。
那么为什么 VSTestHost.exe 会在 temp 目录中加载 dll,我有什么方法可以确保使用正确的 dll 吗?