在实验实例中运行时加载了过时的项目程序集

时间:2013-11-27 10:39:45

标签: c# visual-studio-2010 dll resharper

我在VisualStudio 2010中有两个C#项目A和B.项目A是一个类库。项目B是ReSharper-Plugin项目,它引用项目A(ProjectReference)。当我在实验实例中运行项目A时,这两个项目都会编译和处理属性。

现在,我最近在项目A中重命名了一个带有一些扩展方法的静态类。两个项目仍然可以编译。但是当我运行项目B时,我得到 new 类名的TypeLoadException。当我改回班级的名字时,一切都恢复正常。

我的猜测是项目B是针对新代码编译的,但是针对过时的dll运行。我尝试了从清除,重建到重启的所有内容,但无济于事。我还手动检查项目A中的新dll是否放在项目B的bin / Debug文件夹中,就是这种情况。在构建项目A之后,我手动复制了dll。问题仍然存在。

现在我问自己在运行实验实例之前是否还有另一个dll被复制到的位置。是这样的吗?如果是这样,在哪里?是否有旧版本可以形成的其他地方?或者是否存在可能导致问题的完全不同的东西?

提前致谢!

2 个答案:

答案 0 :(得分:1)

确定。您是否引用了DLL或项目?在Visual Studio解决方案中,您可以引用项目。如果您在项目B中引用项目A,则B应始终使用项目A中的最新代码。

答案 1 :(得分:0)

我自己弄清楚了,感谢Google上的正确关键字( MissingMethodException ProjectReference )让我a blogpost了解有关解决方案的问题。同样的症状。在我的情况下,导致问题的不是GAC,而是

下的缓存程序集
C:\Users\{name}\AppData\Local\Microsoft\VisualStudio\10.0Exp\

这是实验实例的所有程序集所在的位置。这里有一个过时的VsExtension,它依赖于项目A,并且在其中有一个已加载的项目A的过时副本。简单地跳过了从项目引用加载新版本,因为已经加载了程序集的副本(具有相同版本)。

所以问题最终是由我的解决方案中删除了扩展名造成的。从这一点开始,VS不再更新扩展,但它也没有删除!经验教训:在对基础结构进行重大更改后,您可能希望删除上述路径下的所有缓存程序集......

感谢大家的帮助!