合并的可执行文件崩溃



我在.net 4.0上用c#开发了我的第一个winform应用程序。编译后的输出有一个.exe和一个.dll文件。在合并之前,我检查了可执行文件是否运行良好。我使用ILMerge合并了这两个文件。我是第一次使用ILmerge。所以我一定在某个地方犯了一些错误,但我无法解决这个问题。我得到了一个没有任何错误的可执行文件。但是打开结果文件后,它就崩溃了。

Windows在应用程序崩溃时产生了以下错误详细信息:

Description:
Stopped working
Problem signature:
Problem Event Name:  CLR20r3
Problem Signature 01:    mywinapp.exe
Problem Signature 02:    1.0.0.0
Problem Signature 03:    52383768
Problem Signature 04:    mscorlib
Problem Signature 05:    2.0.0.0
Problem Signature 06:    4ca2b851
Problem Signature 07:    f99
Problem Signature 08:    14e
Problem Signature 09:    System.TypeLoadException
OS Version:  6.1.7601.2.1.0.256.1
Locale ID:   16393

我安装了ILMerge,并在命令中从ILMerge的位置使用以下命令来创建合并的.exe文件。

ilmerge D:abcRemittanceForm.exe D:abcPdfFileWriter.dll  /out:D:outMyWinApp.exe      /target:winexe /ndebug /log:D:outaaa.txt

日志文件内容如下:

ILMerge版本2.12.803.0版权所有(C)Microsoft Corporation 2004-2006。保留所有权利。ILMerge D:\abc\RemittingForm.exe D:\abc\PdfFileWriter.dll/out:D:\out\MyWinApp.exe/target:winexe/ndebug/log:D:\out\aa.txt将平台设置为"v2",对mscorlib.dll使用目录"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50726"在Microsoft(R).NET Framework v2.0.50727上运行mscorlib.dll版本=2.0.0.0输入程序集的列表为:D: \abc\RemittingForm.exeD: \abc\PdfFileWriter.dll正在尝试从文件"D:\abc\RemittanceForm.exe"读取程序集。已成功读入程序集。汇款表格的元数据中没有报告错误。正在尝试从文件"D:\abc\PdfFileWriter.dll"读取程序集。已成功读入程序集。PdfFileWriter的元数据中未报告任何错误。检查所有输入程序集是否都具有兼容的PeKind。汇款表格.PeKind=ILPdfFileWriter.PeKind=IL所有输入程序集都具有兼容的PeKind值。AssemblyResolver:程序集"汇款表单"正在引用程序集"System.Windows.Forms"。AssemblyResolver:正在尝试引用程序集的目录。AssemblyResolver:在引用程序集的目录中找不到程序集。AssemblyResolver:正在尝试输入目录。AssemblyResolver:在输入目录中找不到程序集。AssemblyResolver:正在尝试用户提供的目录。AssemblyResolver:没有用户提供的目录。AssemblyResolver:正在尝试框架目录。已将程序集引用"System.Windows.Forms"解析为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50726\System.Windows.Forms.dll"。(已使用框架目录。)AssemblyResolver:程序集"汇款表单"正在引用程序集"系统"。AssemblyResolver:正在尝试引用程序集的目录。AssemblyResolver:在引用程序集的目录中找不到程序集。AssemblyResolver:正在尝试输入目录。AssemblyResolver:在输入目录中找不到程序集。AssemblyResolver:正在尝试用户提供的目录。AssemblyResolver:没有用户提供的目录。AssemblyResolver:正在尝试框架目录。已将程序集引用"System"解析为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50726\System.dll"。(已使用框架目录。)AssemblyResolver:程序集"汇款表单"正在引用程序集"System.Drawing"。AssemblyResolver:正在尝试引用程序集的目录。AssemblyResolver:在引用程序集的目录中找不到程序集。AssemblyResolver:正在尝试输入目录。AssemblyResolver:在输入目录中找不到程序集。AssemblyResolver:正在尝试用户提供的目录。AssemblyResolver:没有用户提供的目录。AssemblyResolver:正在尝试框架目录。已将程序集引用"System.Drawing"解析为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50726\System.Drawing.dll"。(已使用框架目录。)对目标程序集的程序集级别属性使用程序集"汇款表单"。正在将程序集"汇款表单"合并到目标程序集中。正在将程序集"PdfFileWriter"合并到目标程序集中。正在将程序集"汇款表单"中的1个Win32资源复制到目标程序集中。正在将入口点"Remitting_Form.Program.Main"从程序集"Remittance Form"传输到程序集"MyWinApp"。目标程序集的元数据中未报告任何错误。ILMerge:正在写入目标程序集"D:\out\MyWinApp.exe"。AssemblyResolver:程序集"System"正在引用程序集"System.Configuration"。AssemblyResolver:正在尝试引用程序集的目录。已将程序集引用"System.Configuration"解析为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Configuration.dll"。(用于引用Module的目录。)引用模块"gdi32.dll"的位置为"引用模块"Kernel32.dll"的位置为"引用程序集"System.Windows.Forms"的位置为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Windows.Forms.dll"System.Windows.Forms的元数据中未报告任何错误。引用程序集"System"的位置为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.dll"系统的元数据中没有报告错误。引用程序集"mscorlib"的位置为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll"mscorlib的元数据中没有报告错误。引用程序集"System.Drawing"的位置为"C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Drawing.dll"System.Drawing的元数据中未报告任何错误。ILMerge:完成

请帮我解决这个问题。

我将ILMerge命令修改为:

ilmerge D:abcRemittanceForm.exe D:abcPdfFileWriter.dll  /out:D:outMyWinApp.exe /target:winexe /ndebug /log:D:outaaa.txt /targetplatform:"v4,C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.0"

谢谢@Magnus Grindal Bakken

最新更新