如何在.NET中调试System.TypeLoadException错误?

我在其中一个引用的程序集上遇到以下错误:

Could not load type 'System.Func`2' from assembly 'MyAssembly, ...

我会说实话,我不认为我上次看到System.TypeLoadException错误时会记得,或者如果我看到它,解决方案很明显。 我的第一直觉是看MSDN对此有什么看法 :

当公共语言运行库找不到程序集,程序集中的类型或无法加载类型时,抛出TypeLoadException。

也许我读错了,但是说CLR根本找不到类型? 如果这不是mscorlib中的内容,那可能会更有意义。 这些都是在带有VS2010的.NET4上构建的,因此没有单声道或其他奇怪的库问题。 我在想这个吗? 这是怎么回事?

问题是您的版本不匹配。 确保为.NET 4编译所有程序集。

重构后我收到了这个错误。 我有两个项目编译为具有相同名称的DLL。

检查项目属性“应用程序”部分中的“程序集名称”。

我不确定您的具体方案,但程序集绑定日志查看器(fuslogvw)通常在调试类型加载问题时非常有用。 有关详细信息,请访问http://msdn.microsoft.com/en-us/library/e74a18c4.aspx

如果您更改正在尝试加载的程序集但在GAC中仍有旧版本,则也可能会出现此问题。 它试图加载GAC的版本,而不是你在VS项目中引用的版本。

当我在清理工作中将一个类从一个项目移动到另一个项目时,我遇到了这个错误。 在查看所有其他可能的原因后,重新加载我的解决方案中的每个项目,一切正常。

  1. 右键单击解决方案资源管理器中的项目名称
  2. 选择卸载项目
  3. 右键单击解决方案资源管理器中的项目名称
  4. 选择重新加载项目

当我重构将一些类移动到他们自己的库时,我遇到了这个exception,并引用了它试图加载到新库(使用NuGet获取)的库的不同版本,而不是我在原始项目中使用的版本。

解决这个问题的方法是在旧项目中打开NuGet Manager,并将相应的软件包更新为我在新库中使用的相同版本。