【发布时间】:2013-06-20 19:38:20
【问题描述】:
当我尝试在我的开发机器以外的机器上打开我的 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)。
另外,重要的是要注意,在我发布将extension method 添加到 MyApplication 项目的更新之前,测试机器能够毫无问题地运行 .exe。
也就是说,我给MyApplication添加了扩展方法,然后用ILMerge将.exe和.dll结合起来,测试机就会收到上述错误(有趣的是,我的开发机可以运行合并的.exe 没有问题)。
ILMerge 和扩展方法是否存在已知问题?这听起来很奇怪,但这是我的代码中唯一改变的地方。
由于我无法在我的开发机器上重现该问题,您对我如何解决测试机器上出现的System.TypeLoadException 错误有什么建议吗?
系统信息
- 面向 .NET Framework 4.0(我所有的测试机器都安装了这个)
- ILMerge 版本 2.12.803
- 开发机器:Windows 2008 Server R2; Visual Studio 2010 专业版
- 客户端计算机:XP、Win7 和 Win8(都出现错误)
【问题讨论】:
-
客户端机器安装了什么版本的 .NET 框架?是3.5还是客户端版本?
-
他们都安装了4.0
-
在你的构建机器上安装了 .net 4.5 吗?
-
也许它依赖于您机器上 GAC 中的程序集,但在测试机器上不存在。尝试挂钩 AppDomain.CurrentDomain.AssemblyResolve 事件,看看是否可以在它发生时记录它。