【问题标题】:Merged Executable Crashing合并的可执行文件崩溃
【发布时间】:2013-09-21 22:50:14
【问题描述】:

我在 .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 位置的 cmd 中使用以下命令来创建合并的 .exe 文件。

 ilmerge D:\abc\RemittanceForm.exe D:\abc\PdfFileWriter.dll  /out:D:\out\MyWinApp.exe      /target:winexe /ndebug /log:D:\out\aaa.txt

日志文件内容如下:

ILMerge 版本 2.12.803.0 版权所有 (C) Microsoft Corporation 2004-2006。版权所有。 ILMerge D:\abc\RemittanceForm.exe D:\abc\PdfFileWriter.dll /out:D:\out\MyWinApp.exe /target:winexe /ndebug /log:D:\out\aaa.txt 将平台设置为“v2”,使用目录“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50727”作为 mscorlib.dll 在 Microsoft (R) .NET Framework v2.0.50727 上运行 mscorlib.dll 版本 = 2.0.0.0 输入程序集的列表是: D:\abc\RemittanceForm.exe D:\abc\PdfFileWriter.dll 试图从文件“D:\abc\RemittanceForm.exe”中读取程序集。 在汇编中成功读取。 Remittance Form 的元数据中没有报告错误。 试图从文件“D:\abc\PdfFileWriter.dll”中读取程序集。 在汇编中成功读取。 PdfFileWriter 的元数据中没有报告错误。 检查所有输入程序集是否具有兼容的 PeKind。 汇款表格.PeKind = ILonly PdfFileWriter.PeKind = ILonly 所有输入程序集都有一个兼容的 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.50727\System.Windows.Forms.dll”。 (使用的框架目录。) AssemblyResolver:程序集“汇款表格”正在引用程序集“系统”。 AssemblyResolver:尝试引用程序集的目录。 AssemblyResolver:在引用程序集的目录中未找到程序集。 AssemblyResolver:正在尝试输入目录。 AssemblyResolver:在输入目录中未找到程序集。 AssemblyResolver:尝试用户提供的目录。 AssemblyResolver:没有用户提供的目录。 AssemblyResolver:正在尝试框架目录。 将程序集引用“系统”解析为“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50727\System.dll”。 (使用的框架目录。) AssemblyResolver:程序集“汇款表格”正在引用程序集“System.Drawing”。 AssemblyResolver:尝试引用程序集的目录。 AssemblyResolver:在引用程序集的目录中未找到程序集。 AssemblyResolver:正在尝试输入目录。 AssemblyResolver:在输入目录中未找到程序集。 AssemblyResolver:尝试用户提供的目录。 AssemblyResolver:没有用户提供的目录。 AssemblyResolver:正在尝试框架目录。 将程序集引用“System.Drawing”解析为“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\..\v2.0.50727\System.Drawing.dll”。 (使用的框架目录。) 对目标程序集的程序集级属性使用程序集“汇款表格”。 将程序集“汇款单”合并到目标程序集。 将程序集“PdfFileWriter”合并到目标程序集中。 将 1 个 Win32 资源从程序集“汇款表格”复制到目标程序集。 将入口点“Remittance_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”。 (用于引用模块的目录。) 引用模块“gdi32.dll”的位置是“” 引用模块“Kernel32.dll”的位置是“” 引用程序集“System.Windows.Forms”的位置是“C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Windows.Forms.dll” System.Windows.Forms 的元数据中没有报告错误。 引用程序集“系统”的位置是“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:完成。

请帮我解决这个问题。

【问题讨论】:

标签: c# deployment .net-4.0 ilmerge


【解决方案1】:

我将 ILMerge 命令修改为以下内容:

ilmerge D:\abc\RemittanceForm.exe D:\abc\PdfFileWriter.dll  /out:D:\out\MyWinApp.exe /target:winexe /ndebug /log:D:\out\aaa.txt /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"

谢谢@Magnus Grindal Bakken

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2022-12-04
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2019-09-01
    相关资源
    最近更新 更多