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

时间:2011-04-17 02:46:41

标签: c# clr

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

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

我会说实话,我不认为我上次看到System.TypeLoadException错误时会记得,或者如果我看到它,解决方案很明显。我的第一直觉是看MSDN had to say about it

  

当引发TypeLoadException时抛出   公共语言运行库找不到   装配,内部的类型   装配,或无法加载类型。

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

7 个答案:

答案 0 :(得分:27)

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

答案 1 :(得分:25)

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

检查"程序集名称"在项目的属性' "用途"部分。

答案 2 :(得分:13)

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

答案 3 :(得分:3)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

如果您在不同项目中安装了不同版本的NuGet软件包,则可能会出现此问题。为了识别这些情况,

  1. 在解决方案资源管理器中右键单击解决方案,然后选择“管理解决方案的Nuget程序包”
  2. 选择“合并”标签
  3. 对于所有已标识的软件包,请标识所需的版本,然后单击“安装”以将该软件包合并到该版本。