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

localization - ILMerge 和本地化资源程序集

我们有一个应用程序,其编译后的结构如下所示:

    • 铌-NO
      • 文本资源.dll
    • SV-SE
      • 文本资源.dll
    • 酒吧.dll
    • Foo.exe
    • 文本.dll

是否可以在此使用 ILMerge?你会怎么做?

0 投票
3 回答
1509 浏览

.net - 合并程序集中的 .NET 类型定义 (ILMerge)

我正在使用 ILMerge 合并几个 .NET 程序集,包括一些第 3 方程序集。自从这样做以来,我遇到了几个错误,这些错误都归结为类型定义与定义它们的程序集相关联的事实。

一个简单的示例是我的 App.config 中的 log4net 配置部分定义。它使用 type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" 这将不起作用,因为 log4net 程序集一旦合并到我的合并程序集中就不存在了。不过没什么大不了的,我将程序集名称更改为我的合并程序集,它工作正常。

一个稍微复杂一点的例子是二进制序列化类型。我的系统使用二进制序列化在进程之间发送某些对象。所有可序列化对象都在所有其他项目引用的公共程序集中定义。我正在使用默认的二进制序列化,但是在反序列化对象时它开始失败,并出现错误,指出它找不到序列化对象的合并程序集。同样,没什么大不了的,我实现了一个自定义 SerializationBinder,它在任何加载的程序集中查找类型,而不仅仅是给定的。

当序列化类型引用其他可序列化类型时,前面的示例变得更加复杂。我继续遇到越来越多的问题,这些问题越来越难以处理。

我想在这里说明的一点是 .NET 类型系统和 ILMerge 似乎不能很好地协同工作。有没有人对他们如何解决这个问题有任何经验?是否可以告诉 .NET 运行时我不在乎该类型说它应该在哪个程序集中,只要在任何地方寻找它?

注意:请不要回复询问我为什么要合并程序集,这不是这个问题的重点。

0 投票
2 回答
8941 浏览

visual-studio - 在 VS Setup 项目中,如何从 MSI 中排除项目的依赖项?

我在 C# 中工作。我有一个带有 4 个项目的小型 VS 解决方案:

  1. 一个DLL
  2. 引用 DLL 的 EXE
  3. 一个合并项目,它只对前两个步骤中的程序集执行 ILMerge
  4. 一个安装项目,它打包了 Merge 项目的 .EXE 输出。(我已将“项目的主要输出”添加到设置中,并在此处指定合并项目)

问题是,安装项目会自动将项目#1 和#2 检测为项目#3 的依赖项。当我将第三个项目的主要输出包含到 MSI(安装项目)中时,依赖项也会自动拖入。我不想要这个。

我怎样才能阻止它?

我尝试指定“排除过滤器”,但无法使其正常工作。无论我尝试什么,依赖项总是被拖进来。

替代文字

我尝试手动修改 Setup.vdproj,以删除自动检测到的依赖项项目,但是当我在 VS 中重新加载 .vdproj 时,自动检测到的依赖项又回来了。

帮助?

0 投票
6 回答
14736 浏览

c# - ILMerge DLL:程序集未正确合并,仍列为外部引用

在 .NET C# 工具的构建过程中,我一直在使用 ILMerge 将程序集合并到一个 exe 中。

我最近添加了一个新的类库,现在 ILMerge 失败了。我记得告诉它合并到新的 DLL 中!

它现在给了我这个错误,我不太明白:

ILMerge.Merge:程序集“DataObjects”未正确合并。它仍然在目标程序集中列为外部引用。

我使用“项目”引用完成的所有程序集引用,过去都没有失败。

任何人都可以为我解释这个错误,或者建议一个解决方法吗?

0 投票
2 回答
2611 浏览

.net - 如何使用 ILMerge 将 XML 文档文件与 DLL 合并?

我知道我可以将 PDB 与 DLL 文件合并,但我正在尝试对 XML 文档文件做同样的事情。

这应该是可能的,因为您没有带有 .NET 程序集的 .xml 文件,但您在 IDE 中有文档。

这该怎么做?

0 投票
2 回答
2726 浏览

.net - 使用 Sgen 和 ILMerge 预生成 XmlSerializer。数组有问题

我广泛使用 XmlSerializer,而不是允许 .NET 在运行时生成必要的序列化程序集,我想提前生成这些程序集并将它们与我的应用程序捆绑在一起。我能够在构建时使用 Sgen 生成这些程序集。此外,我必须为要序列化的每个数组类型单独运行 Sgen(使用 sgen /t:Foo[])。最后,我使用 ILMerge 将数组类型序列化类合并到 Foo.XmlSerializers.dll 程序集中。我已经用 ildasm 验证了 Foo.XmlSErializers.dll 实际上包含所有合并的类。

在运行时,.NET 成功地从 Foo.XmlSerializers.dll 加载 FooSerializer,而无需调用 csc 并生成临时程序集。但是,.NET 无法从同一个 dll 加载 ArrayOfFooSerializer,并且实际上调用了 csc。

如何成功地为数组预生成序列化类型?

考虑以下 2 个程序集及其简化内容:

程序集:MyApp.exe

程序集:Foo.dll

更多信息:

以下 app.config 导致将 XmlSerialization 相关事件添加到事件日志中

我没有看到 Foo 类型的事件。我看到 Foo[] 的以下消息:

预生成的序列化程序“Foo.XmlSerializers”已过期。您需要为 'Foo[]' 重新生成序列化程序。

0 投票
2 回答
233 浏览

resharper - ILMerged 类对 Resharper 不可见

我已经 ILMerged 一些程序集。例如:

  • 美食吧
  • 吧台
  • 福巴兹

成一个组件。例如:

  • FooBarBaz.Merged

它有效。也就是说,当我引用FooBarBaz.Merged并在代码中使用类似Foo.Bar.MyClass的东西时,它编译得很好。

但是 Resharper (v5) 不起作用。合并程序集中的任何类型的用法都是血红色的。更糟糕的是,我对这些类型也没有智能感知。基本上这个程序集不能与 Resharper 共存。

我想知道是否有一些 ILMerge 参数可以解决这个问题。ILMerge 文档隐藏得很好,但我发现了这个. 我已经破解了各种开关......无济于事。

或者,是否有一些我可以更改的 Resharper 设置。我真的不想这样做,因为这是一个 OSS 项目。

0 投票
1 回答
1196 浏览

visual-studio - 合并的 DLL,Intellisense 不拾取单独的 XML 文档文件

我使用 ILMerge 将我的几个 C# 项目 DLL 合并到一个用于整个解决方案的 DLL 中。我让每个项目为 Intellisense 生成其文档的 .XML 文件,当我尝试在另一个解决方案中使用合并的 DLL 作为参考时,我无法显示这些注释。我将这些文件都放在同一个目录中:

  • MergedProjectDlls.dll
  • 项目1.XML
  • 项目2.XML
  • 项目3.XML
  • 项目4.XML

我尝试将单个项目 XML 文件重命名为 MergedProjectDlls.XML,然后在 Visual Studio 中删除并重新添加引用,但 Intellisense 仍然没有收到我知道的我重命名的项目 XML 文件中存在的注释。

我希望以某种方式将所有这些项目 XML 文件合并到一个名为 MergedProjectDlls.XML 的文件中。那可能吗?当它与 MergedProjectDlls.dll 位于同一目录中时,Intellisense 会自动获取它吗?

编辑:刚刚在MSDN上找到了这个:

要将生成的 .xml 文件用于 IntelliSense 功能,请让 .xml 文件的文件名与您要支持的程序集相同,然后确保 .xml 文件与程序集位于同一目录中。因此,在 Visual Studio 项目中引用程序集时,也会找到 .xml 文件。

并且:

除非您使用 /target:module 进行编译,否则文件将包含指定文件名称的标记,该文件包含编译输出文件的程序集清单。”

0 投票
1 回答
3634 浏览

c# - ILMerge:如何配置对应的app.config

我只是在尝试 ILMerge 将我的应用程序和所需的库合并到一个可执行文件中。我使用命令行只是为了做一些测试。我拿了一个示例项目:

这似乎按预期工作。但如果我有一个Program.exe.config? 它仍然适用吗?

有人如何做到这一点?

0 投票
1 回答
5102 浏览

f# - 在 ILMerge 中允许重复的泛型类型

根据 ILMerge 文档,它允许合并具有冲突类型的程序集。我正在尝试合并 FSharp.Core.dll 和 System.Reactive.dll 但我无法弄清楚命令行参数。

ILMerge 抱怨System.IObservable<T>. 我怎么能告诉它解决这个冲突。

谢谢和问候,叉子