0

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


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)。

extension method此外,重要的是要注意,在我发布将一个添加到 MyApplication 项目的更新之前,测试机器能够毫无问题地运行 .exe 。

也就是说,我在.exe和.dll中添加扩展方法后MyApplicationILMerge将.exe和.dll结合起来,测试机会收到上述错误(有趣的是,我的开发机可以运行合并的.exe没有问题)。

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

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

系统信息

  • 以 .NET Framework 4.0 为目标(我所有的测试机器都安装了这个)
  • ILMerge 版本 2.12.803
  • 开发机器:Windows 2008 Server R2;视觉工作室 2010 专业版
  • 客户端机器:XP、Win7 和 Win8(都出现错误)
4

2 回答 2

1

如果您在构建机器上安装了 .net 4.5,如果您不小心,它会损坏。

基本上微软改变了 1 属性的位置(从 System.Core 到 mscorlib)。

Matt Wrock 在他的帖子中解释了如何使用 ILMerge 解决这个问题。虽然这是针对测试版的,但它应该适用于该版本。

于 2013-06-20T19:43:23.310 回答
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"
于 2013-06-21T14:38:18.280 回答