如何诊断“System.TypeLoadException”错误

时间:2013-06-20 19:38:20

标签: winforms .net-4.0 ilmerge

当我尝试在我的开发机器以外的机器上打开我的Windows窗体应用程序(我将其称为MyApplication.exe)时,会弹出一个对话框窗口:


MyApplication已停止工作

Windows可以在线查看问题的解决方案

  • 在线查看解决方案并关闭程序
  • 关闭程序

详情

问题签名:

  Problem Event Name:   CLR20r3
  Problem Signature 01: myapplication
  Problem Signature 02: 1.2.0.0
  Problem Signature 03: 51c34395
  Problem Signature 04: mscorlib
  Problem Signature 05: 4.0.0.0
  Problem Signature 06: 50484bd7
  Problem Signature 07: 1204
  Problem Signature 08: 89
  Problem Signature 09: System.TypeLoadException
  OS Version:   6.1.7600.2.0.0.256.48
  Locale ID:    1033
  Additional Information 1: 0a9e
  Additional Information 2: 0a9e372d3b4ad19135b953a78882e789
  Additional Information 3: 0a9e
  Additional Information 4: 0a9e372d3b4ad19135b953a78882e789

请务必注意,我使用ILMerge将MyApplication.exe和引用的MyLibrary.dll程序集合并到一个程序集中(输出名称为MyApplication.exe)。

此外,重要的是要注意测试计算机能够在没有问题的情况下运行.exe,直到我发布了向MyApplication项目添加extension method的更新。

换句话说,在我将扩展方法添加到MyApplication之后,然后使用ILMerge来组合.exe和.dll,测试计算机将收到上述错误(有趣的是,我的开发机器可以运行合并的.exe而没有任何问题。)

ILMerge和扩展方法是否存在已知问题?这听起来很奇怪,但这是我的代码中唯一发生了变化的事情。

由于我无法在我的开发机器上重现该问题,您对如何解决测试机器上发生的System.TypeLoadException错误有任何建议吗?

系统信息

  • 定位.NET Framework 4.0(我的所有测试计算机都已安装)
  • ILMerge版本2.12.803
  • Dev Machine:Windows 2008 Server R2; Visual Studio 2010 Pro
  • 客户端计算机:XP,Win7和Win8(所有这些都得到错误)

2 个答案:

答案 0 :(得分:1)

如果您的构建计算机上安装了.net 4.5,如果您不小心,它将会中断。

Microsoft基本上更改了1个属性所在的位置(从System.Core到mscorlib)。

his post中的Matt Wrock解释了如何使用ILMerge解决它。虽然这是针对测试版的,但它应该适用于发行版。

答案 1 :(得分:1)

Matt Wrocks的帖子(感谢@Daniel White)获得了我正在寻找的信息。但是,他指定的/ targetplatform路径对我不起作用。

而不是Wrocks路径

/targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"

我必须使用

/targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"