当我尝试在我的开发机器以外的机器上打开我的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
错误有任何建议吗?
系统信息
答案 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"