问题标签 [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 投票
12 回答
55733 浏览

c# - ILMerge 最佳实践

你使用 ILMerge 吗?您是否使用 ILMerge 合并多个程序集以简化 dll 的部署?在 ILMerging 程序集在一起之后,您是否发现生产中的部署/版本控制问题?

我正在寻找一些关于使用 ILMerge 减少部署摩擦的建议,如果这可能的话。

0 投票
2 回答
1718 浏览

c# - ILMerge 和网络资源

我们正在尝试将我们的 DLL 合并为一个以进行部署,即 ILMerge。几乎一切似乎都很好。我们有几个使用的 web 控件,ClientScript.RegisterClientScriptResource它们在合并后是 404-ing(这些在合并之前工作)。

例如,我们的一个控件看起来像

它将位于 Project WebControls、程序集 Company.WebControls 中。下面是 ControlA.cs 和 ControlA.js。ControlA.js 被标记为嵌入式资源。在 AssemblyInfo.cs 我包括以下内容:

将其合并到 CompanyA.dll 后,引用此 Web 资源的正确方法是什么?ILMerge 命令行如下(来自构建后的 bin 目录):"C:\Program Files\Microsoft\ILMerge\ILMerge.exe" /keyfile:../../CompanySK.snk /wildcards:True /copyattrs:True /out:Company.dll Company.*.dll

0 投票
6 回答
1314 浏览

c# - C# 编译器错误地优化代码

我有一个在远程 Web 服务器上运行的 ASP.NET 应用程序,我刚开始收到此错误:

我反汇编了 DLL 中的代码,似乎编译器错误地优化了代码。(请注意,Set 是一个实现一组唯一对象的类。它继承自 IEnumerable。)这一行:

编译成这一行:

CalendarModule 类是一个完全不相关的类!!以前有没有人注意到 .NET 错误地编译了这样的代码?

更新 #1:这个问题似乎是由 Microsoft 的ILMerge工具引入的。我们目前正在研究如何克服它。

更新 #2:到目前为止,我们找到了两种解决此问题的方法。我们不太了解根本问题是什么,但是这两个都解决了它:

  1. 关闭优化。

  2. 在另一台机器上将程序集与 ILMerge 合并。

所以我们想知道构建机器是否以某种方式错误配置(考虑到我们已经使用该机器构建版本已经一年多了,这很奇怪)或者是否是其他问题。

0 投票
4 回答
3791 浏览

.net - 合并程序集的最佳实践?

我想知道在创建要包含在与依赖项相关的其他项目中的库版本时的启发式方法是什么,以及是否应该包含它们。

我的问题如下:

我有一个 CommonUtilities 库,顾名思义,它提供了一组可以在多个地方使用的实用程序。CommonUtilities 的依赖项包括 log4net.dll(日志框架)和 Oracle.DataAccess.dll(数据库驱动程序)。

我有另一个名为 MyProject 的项目,我想在其中包含 CommonUtilities。MyProject 还依赖于 Oracle.DataAccess。

如果我使用 ILMerge 并将 CommonUtilities 合并到单个程序集 CommonUtilities.dll 中并从 MyProject 中引用它,那么一切都会编译,但我确信我应该从 MyProject 显式引用 Oracle.DataAccess,因为它是一个依赖项,而不是使用合并到 CU 中的程序集。添加对 Oracle.DataAccess 的引用也会导致使用语句不明确,因为引用了两个 Oracle.DataAccess 程序集。

在我的情况下使用 ILMerge /Internalize 会导致编译错误,因为来自内部化的 Oracle.DataAccess 程序集的类型正在从 CommonUtilities 返回,并且它们被标记为内部 MyProject 无法识别返回的类型。

完成这项工作的唯一方法就是不将此特定程序集 (Oracle.DataAccess) 合并到 CommonUtilities 中,而仅从 MyProject 中引用它。这反过来又产生了一个新问题:我应该引用哪个 Oracle.DataAccess.dll - 是否使用 CommonUtils 分发的依赖项?

还有其他方法可以解决这一切吗?

0 投票
2 回答
5098 浏览

c# - 如何在安装项目中使用 IlMerge?

我使用 IlMerge 将我项目的所有 dll 合并到一个 exe 中。我使用了一个在主 csproj 的“导入”中引用的目标文件。

目标中的 ExecCommand 是:

这行得通。

但是后来我有一个安装项目,当它构建时,它会忽略“导入”并且它不会合并 dll。如何在安装项目中使用目标文件?

我曾尝试在主项目的构建后事件(在项目的属性中)中为 Ilmerge 编写相同的代码,但它给了我错误代码 1。

0 投票
2 回答
768 浏览

c# - ilmerge 是否优化输出?

我有许多使用 Microsoft 的 ILMERGE.EXE 工具合并的 DLL。所有 DLL 都未选中“优化我的代码”。

尝试在 Web 应用程序中调试代码时,模块屏幕(在 Visual Studio 中)显示 dll 已优化。在尝试调试应用程序的某些部分时,这显然会导致问题。

有没有一种方法可以使用不优化代码的 ILMERGE 构建 DLL?

0 投票
2 回答
2659 浏览

.net - 如何签署由 ILMerge 操作生成的程序集?

我设法使用 ILMerge 将项目中的所有程序集合并到一个程序集中,但问题是似乎没有办法对合并的程序集进行签名。

是否有某种可以运行的命令行选项或命令让我向 ILMerge 生成的合并程序集添加一个强名称?

0 投票
1 回答
726 浏览

reflection - 类上的 ILMerge 和自定义属性

我将一些 dll 文件合并在一起,现在我的代码将在其中一个合并的 dll 文件中找到类,但无法看到我在它们上拥有的自定义属性。它可以很好地找到所有类,但缺少属性。有什么想法可以解决这个问题吗?

编辑:进一步调查显示属性在类上,但类型的 Guid 与原始类型不同,因此 GetCustomAttribute 找不到它。

0 投票
2 回答
839 浏览

icons - 最终 .exe 的 ILMERGE 图标

我有几个 dll 和一个 .exe 文件(称为 input.exe)。这些当前使用 ILMERGE 合并到单个 output.exe 文件中。

input.exe 文件带有一个图标。但是,创建的 output.exe 在 input.exe 中没有图标

所以总结一下,我想要一个 output.exe 的图标(使用 ILMERGE 创建)

你能帮我解决这个问题吗?

谢谢。

0 投票
1 回答
199 浏览

resources - 如何在 CLR 程序集中添加、删除和更新资源?

我环顾四周,找不到任何有关更改程序集中托管资源的信息(请注意,我已经熟悉 Win32 资源和更改这些资源的 API)。

我的应用程序具有最终用户需要更新的资源,并且该应用程序将作为单个可执行文件分发(因此我不能只使用附属程序集)。

我看到了一些可能的解决方法,但它们看起来很老套:

第一种是使用 ILMerge:我将在内存中创建一个新的程序集,其中包含新资源,并使用 ILMerge 将其与原始程序集组合以形成新程序。唯一的缺点是无法更新或删除资源。

第二个有点相似:会有一个 .netmodule(从 C# 编译器发出),它使用 /embed 开关针对 al.exe 运行,以添加资源以形成新的程序集。缺点是原始程序集中的任何资源都不存在。

我倾向于 ILMerge 选项,但重新分配的条款是模棱两可的。EULA 没有提及再分配权(所以我认为在这个负面自由社会中是允许的)但微软研究页面说不允许再分配(但它的措辞模棱两可,据我所知,它可能指的是商业再分配,这不适用于我,因为这是一个非盈利的 GPL 项目)。

谢谢