问题标签 [ilmerge]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
751 浏览

visual-studio-2010 - 在 VS2010 中合并包含 Lambda 的程序集时,ILMerge 是否损坏?

我一直在尝试使用 ILMerge 来合并 VS2010 中的程序集,而生成的主程序集最终无法使用。这似乎只发生在被合并的程序集包含带有 Lambda 表达式的方法时。此外,它似乎在 VS2008 中运行良好。

我在这里更详细地概述了我的调查。

任何有关如何解决此问题的见解将不胜感激。

0 投票
4 回答
3277 浏览

debugging - 如何调试到 ILMerged 程序集?

概括

我想更改 2 组件解决方案的构建过程,以便调用对 ILMerge 的调用,并生成单个程序集。此外,我希望能够调试生成的程序集。

准备 - 一个简单的例子

  1. 新解决方案 - ClassLibrary1
  2. 在 Class1 中创建一个静态函数“GetMessage”,它返回字符串“Hello world”
  3. 创建引用 ClassLibrary 的新控制台应用程序。
  4. 通过控制台从 main() 输出 GetMessage。

您现在有一个 2 程序集应用程序,它向控制台输出“Hello World”。

那么接下来呢..?

我想更改控制台应用程序构建过程,包括使用 ILMerge 的构建后步骤,将 ClassLibrary 程序集合并到控制台程序集中

在这一步之后,我应该能够:

  • 在不存在 ClassLibrary1.dll 的情况下直接运行控制台应用程序
  • 在 VS 中通过 F5(或 F11)运行控制台应用程序,并能够调试到 2 个项目中的每一个。

有限的成功

我阅读了这篇博文,并设法通过构建后命令实现了我所追求的合并...

...和一个 ILMerge.bat 文件,它读取...

这工作得相当好,并且实际上会根据需要生成一个在 VS 环境之外运行的 exe。但是,它似乎不会产生 VS 能够用来调试代码的符号(.pdb 文件)。

我认为这是拼图的最后一块。

有谁知道我怎样才能使这项工作?

FWIW 我在 x64 Win7 x64 机器上运行 VS2010。

更新:我为什么要这样做?

有人问:“我真的需要在调试场景中进行 ILMerge 吗?”

我的解决方案的程序集需要与其他解决方案的程序集共存于同一文件夹中(其中一些我可能会开发)

其中一些解决方案将共享对某些程序集的不同版本的依赖关系。

因此,Solution1 可能由 Console1 和 ClassLibrary1.dll(v1) 组成,Solution2 可能由 Console2 和 Classlibrary1.dll(v2) 组成。

我认为我可以将正确版本的依赖项合并到解决方案的主要程序集中以避免冲突,而不是在 GAC 中注册所有内容。

但是,这目前导致无法调试解决方案,我需要与将出现的其他解决方案一起进行。

这听起来很复杂吗?那是因为它是.. :D

0 投票
2 回答
4522 浏览

.net - ILMerge 和项目参考

我有一个具有以下结构的 VS 解决方案 (.sln)。

  • 项目A
  • 项目 B(包含对项目 A 的引用以及对 NHibernate、StructureMap 等 3rd 方程序集的引用)

我想使用 ILMerge 将第 3 方程序集滚动到 ProjectB.dll 中。但是,我不想合并 ProjectA。

我使用了此处突出显示的过程。在合并第三方程序集方面,这对我来说是无缝的。但是,我在构建 ProjectB 时仍然遇到此错误:

合并期间发生异常:不允许未解析的程序集引用:ProjectA。

我没有明确指定 ProjectA 被合并。换句话说,我不会说这个项目是真的。如何让 IlMerge 忽略 ProjectA?顺便说一句,ProjectA 是一个项目引用,而不是直接的程序集引用。

谢谢!

0 投票
2 回答
8522 浏览

.net - 使用 ILMerge 错误构建

有人对 IlMerge 有此错误吗?我正在尝试使用 4.0 框架为 .NET 项目合并一些程序集。

ILMerge /log /lib:..\Libraries /targetplatform:v4 /internalize:..\SolutionFiles\CJCommon.exclude /ndebug /out:bin\Release\Common.dll obj\Release\Common.dll C:\Development\CJCommon \Libraries\FluentNHibernate.dll C:\Development\CJCommon\Libraries\HibernatingRhinos.Profiler.Appender.dll C:\Development\CJCommon\Libraries\Iesi.Collections.dll C:\Development\CJCommon\Libraries\log4net.dll C: \Development\CJCommon\Libraries\Microsoft.Practices.ServiceLocation.dll C:\Development\CJCommon\Libraries\NHibernate.ByteCode.Castle.dll C:\Development\CJCommon\Libraries\NHibernate.dll C:\Development\CJCommon\Libraries \NHibernate.Linq.dll C:\Development\CJCommon\Libraries\StructureMap.dll

将平台设置为“v4”,使用目录“C:\Windows\Microsoft.NET\Framework64\v2.0.50727..\v4.0.20107”作为 mscorlib.dll

合并时发生异常:

你调用的对象是空的。

C:\Program Files (x86)\MSBuild\Ilmerge.CSharp.targets(8,5): error MSB3073: The command ""C:\Program Files (x86)\Microsoft\Ilmerge\Ilmerge.exe" /log /lib :"..\Libraries" /targetplatform:v4 /internalize:./.exited with code 1...

...

==========全部重建:3成功,1失败,0跳过==========

0 投票
1 回答
969 浏览

.net - ILMerge 或 ResolveAssembly 之间用于嵌入程序集的缺点、优势等?

目前我知道将程序集嵌入到一个应用程序文件中的两种方法:ILMerge 和使用 ResolveAssembly 事件。

我想知道是否有人在其中一个方面取得了更大的成功。

使用其中任何一个(性能、安全性……)有什么缺点吗?

从我的角度来看,看起来我们应该始终将所有“私有”程序集合并到一个应用程序中,因为当将应用程序作为一个整体考虑时,这种方式更干净。

有什么想法吗?

0 投票
2 回答
990 浏览

dll - 合并 DLLs n .cs 文件

大项目的一部分是支付系统,我想重用它。我想将此支付系统的所有类文件合并到 DLL 中,以便将它们作为引用添加到所有其他项目中。目前的支付系统也使用来自商业应用程序的 DLL 的命名空间(nsoftware-paypal n 其他几个)。我尝试 csc 将单个文件编译成 DLL,但无法使其工作。我也尝试了ILMerge,但这似乎也不起作用。

CSC

由于 .cs 文件使用来自 nsoftware-Paypal 的 DLL 的命名空间,因此我在 csc 命令中包含了 DLL 文件和 .cs。它给了我一个错误,说“...nsoftware.InPayPal.dll 是二进制文件而不是文本文件”。当我尝试在没有贝宝 DLL 的情况下进行编译时,它会抛出一个错误,提示“缺少名为 nsoftware 的类型或命名空间”。

ILMerge 也不允许 .cs 文件(因为它当然不是程序集)。

我需要做的就是为整个系统生成一个(或多个)DLL,以便我可以在其他项目中使用它。

可能的?

0 投票
3 回答
763 浏览

c# - 是否有合并程序集(如 ILMerge)但适用于 wpf 的免费程序?

我没有任何运气使用 ILMerge 合并 wpf 程序集。

0 投票
2 回答
1524 浏览

.net - BadImageFormatException 与 Windows 7 64 中的 .NET ILMerged DLL

我正在使用 Visual Studio 2008 在 Windows 7 64 位中进行开发。我有一组类库,我使用 ILMerge 将它们合并到一个 DLL 中。但是,当我尝试使用这个合并的 DLL 时,我得到了

[ BadImageFormatException : 无法加载文件或程序集“MyMergedDll”或其依赖项之一。试图加载格式不正确的程序。]

我一直在四处寻找帮助,看起来我需要在 MyMergedDll 中的每个项目中将 Build 属性设置为以 x86 为目标,所以我这样做了。我还在 Web 服务中设置了所有非 MSTest 项目,其中我将 MyMergedDll 引用为目标 x86。但是,我仍然收到此错误。

如果可以相信此博客条目,我会因为执行以下操作而收到此错误:

也就是说,对泛型具有类约束。不过,博客条目是 2007 年的,所以我不知道这是否仍然适用。在我追踪项目中的每个泛型类以检查约束之前,我想从 StackOverflow 获得一些关于你们认为问题所在的信息。

如果重要,MyMergedDll 是强名称签名的。我正在尝试在控制台应用程序和 Web 服务中使用 MyMergedDll。我不知道每次重建 Web 服务时 IIS 是否都在更新,这是否会使事情变得复杂。使用控制台应用程序,我似乎只BadImageFormatException在以发布模式构建时才得到。

0 投票
5 回答
9764 浏览

.net - ILMerge 和 .NET 4.0 的严重问题

对于我的一生,我似乎无法让我的 .NET 4 应用程序与 ILMerge 正确合并。即使在设置 /targetplatform、/lib、/ndebug添加自定义 ILMerge.exe.config 文件后,输出文件也无法正常工作(它似乎无法“找到”合并的库)。

我已经尝试过这个无济于事。除非我使用配置文件,否则我什至无法构建它,但是当我这样做时它不起作用。如果没有配置文件,我一直收到错误消息“ Unresolved assembly reference not allowed: PresentationFramework ”。

以下是用作构建后事件的 ILMerge 命令的当前状态:

关于我做错了什么的任何想法?

0 投票
1 回答
702 浏览

c# - 程序集引用问题——“未引用程序集”与两个程序集中的类型

我在程序集引用方面遇到问题。我有四个程序集:

  1. 一个名为 EncryptionUtils 的类库
  2. 另一个名为 PasswordUtils 的类库使用 EncryptionUtils
  3. 另一个名为 Toolkit 的类库是许多库的 ILMerge,包括 EncryptionUtils
  4. 使用 Toolkit 和 PasswordUtils 的 WPF 应用程序

在我的 WPF 应用程序中,如果我不包含对 EncryptionUtils 的引用,我会收到以下错误:

“EncryptionUtils.RSAPublicKey”类型在未引用的程序集中定义。您必须添加对程序集“EncryptionUtils,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”的引用。

但是,一旦我添加对 PasswordUtils 和 Toolkit 构建时所用的相同 EncryptionUtils 的引用,就会出现以下错误:

“EncryptionUtils.MyClass”类型存在于“c:...\EncryptionUtils.dll”和“c:...\Toolkit.dll”中

我如何摆脱这个 22 号陷阱?我是否必须将构成 Toolkit 的所有单个库添加到我的 WPF 应用程序中?