我试图用ILMERGE将库合并到另一个库中。
主要组件大约33 kb,与其合并的组件大约为5 Mb。 合并后,新组件的尺寸为1.2 Mb。
我想帮助理解合并中的日志,因为我不认为合并的程序集应该小得多。
这是日志:
ILMerge版本2.13.307.0 版权所有(C)Microsoft Corporation 2004-2006。版权所有。 ILMerge /lib:C:\Windows\Microsoft.NET\Framework\v4.0.30319 / lib:C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ PublicAssemblies / t:dll /log:merge.log / zeropekind /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:ericsconnectionsM.dll ericsconnections_32.dll chilkatdotnet45.dll 使用目录' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319'将平台设置为' v4'对于mscorlib.dll 在Microsoft(R).NET Framework v4.0.30319上运行 mscorlib.dll版本= 4.0.0.0 输入程序集列表是: ericsconnections_32.dll chilkatdotnet45.dll 尝试从文件' C:\ Users \ eervawo \ Documents \ Visual Studio 2010 \ Projects \ EricsConnections \ EricsConnections \ bin \ Debug \ ericsconnections_32.dll'中读取程序集。 成功阅读大会。 EricsConnections_32的元数据中没有报告错误。 尝试从文件' C:\ Users \ eervawo \ Documents \ Visual Studio 2010 \ Projects \ EricsConnections \ EricsConnections \ bin \ Debug \ chilkatdotnet45.dll'中读取程序集。 找不到PDB文件。调试信息将无法用于汇编&ch; chilkatdotnet45.dll'。 成功阅读大会。 ChilkatDotNet45的元数据中没有报告错误。 检查所有输入程序集是否具有兼容的PeKind。 EricsConnections_32.PeKind = ILonly,需要32位 ChilkatDotNet45.PeKind = 0 有效的PeKind为ChilkatDotNet45'将被视为:ILonly 所有输入程序集都具有兼容的PeKind值。 AssemblyResolver:Assembly' EricsConnections_32'正在引用程序集&System; .Xml.Linq'。 AssemblyResolver:尝试引用程序集的目录。 AssemblyResolver:在引用程序集的目录中找不到程序集。 AssemblyResolver:尝试输入目录。 AssemblyResolver:未在输入目录中找到程序集。 AssemblyResolver:尝试用户提供的目录。 已解决的程序集参考' System.Xml.Linq'到' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Xml.Linq.dll'。 (使用客户端提供的目录。) 找不到PDB文件。调试信息将无法用于汇编和System.Xml.Linq'。 AssemblyResolver:Assembly' EricsConnections_32'正在引用程序集System.Core'。 AssemblyResolver:尝试引用程序集的目录。 AssemblyResolver:在引用程序集的目录中找不到程序集。 AssemblyResolver:尝试输入目录。 AssemblyResolver:未在输入目录中找到程序集。 AssemblyResolver:尝试用户提供的目录。 已解决的装配参考' System.Core'到&#C; \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Core.dll'。 (使用客户端提供的目录。) 找不到PDB文件。调试信息将无法用于汇编和System.Core'。 使用汇编' EricsConnections_32'用于目标程序集的程序集级属性。 合并程序集' EricsConnections_32'进入目标组装。 合并装配&ChackatDotNet45'进入目标组装。 程序集级别属性' System.Security.AllowPartiallyTrustedCallersAttribute'来自汇编&ChilkatDotNet45'从目标程序集中删除 从程序集中复制8个Win32资源' EricsConnections_32'进入目标组装。 目标程序集的元数据中没有报告错误。 ILMerge:编写目标程序集' ericsconnectionsM.dll'。 AssemblyResolver:Assembly' System'引用程序集&System;配置'。 AssemblyResolver:尝试引用程序集的目录。 找不到PDB文件。调试信息将无法用于汇编和System.Configuration'。 已解决的装配参考' System.Configuration'到' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Configuration.dll'。 (用于引用Module&#39目录。) 引用模块的位置' KERNEL32.dll'是'''' 引用模块的位置''是'''' 引用汇编的位置' mscorlib'是' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.dll' mscorlib的元数据中没有报告错误。 参考汇编的位置' Microsoft.VisualBasic'是' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.VisualBasic.dll' Microsoft.VisualBasic的元数据中没有报告错误。 参考汇编的位置' System.Xml.Linq'是' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Xml.Linq.dll' System.Xml.Linq的元数据中没有报告错误。 参考汇编的位置' System.Core'是' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Core.dll' System.Core的元数据中没有报告错误。 参考汇编的位置' System.Data'是' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Data.dll' System.Data的元数据中没有报告错误。 参考装配的位置'系统'是' C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ system.dll' 系统的元数据中没有报告错误。 ILMerge:完成。
出了什么问题?
答案 0 :(得分:3)
来自公司的网站:
Chilkat.NET组件是用托管Visual C ++编写的
以其专有名称C ++ / CLI更为人所知。哪个创建混合模式程序集,它们无法合并。 ILMerge不知道如何正确处理这种程序集中的非托管代码。另外值得注意的是你的/ targetplatform命令行参数是错误的,它会导致this failure mode。
答案 1 :(得分:2)
我放弃了ILmerge。试试Costura.Fody。只需安装nugget包(如果使用Packet Manager Install-Package Costura.Fody
就可以了)。就是这样。
下次构建时,生成的.exe将所有引用合并为资源,并自动加载它们。您的输出目录仍将包含引用的DLL,但您的应用程序将在没有它们的情况下工作。
由于您似乎正在使用非托管库,因此您可能必须在FodyWeavers.xml
文件中设置一些选项(在安装nugget包时它将添加到您的项目中)。引用项目的文档:
无法以与托管程序集相同的方式加载混合模式程序集。
因此,为了帮助Costura识别哪些程序集是混合模式,以及在中加载它们的环境,您应该在其中一个或两个列表中包含其名称。
不要在名称中包含.exe或.dll。
<Costura>
<Unmanaged32Assemblies>
Foo32
Bar32
</Unmanaged32Assemblies>
<Unmanaged64Assemblies>
Foo64
Bar64
</Unmanaged64Assemblies>
</Costura>
请务必检查项目page以了解其他用例。