【问题标题】:ILMerge DLL: Assembly not merged in correctly, still listed as an external referenceILMerge DLL:程序集未正确合并,仍列为外部引用
【发布时间】:2010-12-20 22:17:13
【问题描述】:

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

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

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

ILMerge.Merge:程序集 'DataObjects' 未合并 正确。它仍然被列为 目标中的外部参考 组装。

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

谁能帮我解释一下这个错误,或者建议一个解决方法?

【问题讨论】:

  • 它会告诉你源程序集吗?或者您可以使用 .Net 反射器找到它吗?
  • 它实际上只是输出上面的行。我尝试合并的一些程序集引用了“DataObjects”程序集,但这种情况已经有一段时间了,只有在添加引用它的新程序集时,我才会收到上述错误。
  • 你找到解决这个问题的方法了吗?
  • 是的,请看我的回答 - 希望对您有所帮助!

标签: c# build-process assemblies ilmerge


【解决方案1】:

我不得不使用/closed 参数。根据official docs

关闭

如果在调用 Merge 之前设置, 然后是“传递闭包” 计算并添加输入程序集 到输入程序集列表。一个 大会被认为是的一部分 如果是传递闭包 直接引用或引用 间接地,从最初的一个 指定的输入程序集,它有 对其中之一的外部引用 输入程序集,或其中之一 具有此类引用的程序集。 复杂,但这就是生活……

【讨论】:

  • 要添加一些上下文,将 /close 开关添加到 ilmerge 命令可能会“工作”,但潜在的问题是有一个(或多个)未合并的程序集直接引用某些东西你正试图合并不存在。您可能想检查这是否是故意的,并可能将程序集显式添加到合并操作中 - 如果不是,则删除引用,以避免将来混淆......
【解决方案2】:

在尝试发布将所有输出合并到单个程序集的 Web 应用程序时,我收到了类似的错误消息:

合并程序集时出错:ILMerge.Merge:目标程序集将自身列为外部引用。

如果您要合并的程序集名称与Properties > Application 下的 Web 应用程序的程序集名称匹配,则会发生这种情况。更改输出程序集名称应该可以解决它。

【讨论】:

    【解决方案3】:

    我收到了这个错误,它指向了我正在合并到单个 dll 中的 Microsoft.Xrm.Sdk 引用。当我设置另一个引用 Microsoft.Xrm.Sdk.Deployment 以合并到 dll 中时,问题已得到解决。有趣的是在一个单独的项目中,我有第一个参考合并和第二个部署 dll 没有合并,它根本没有抱怨。

    【讨论】:

      【解决方案4】:

      这正是@HughJeffner 作为图像的答案。我花了一段时间并尝试复制这些说明。

      【讨论】:

      • 这是vs2022吗?
      【解决方案5】:

      发布时从配置中选择“不合并”,然后发布项目

      【讨论】:

        【解决方案6】:

        System.Memory.dll 出现此错误,这很奇怪。在合并和部署 Dynamics CRM 插件 dll 的上下文中。

        我实际上只是忽略了它并部署了我的合并 DLL... 相信 Dynamics CRM 的插件上下文会在部署时提供它。

        即使出现关于System.Memory.dll 的错误,MergedPlugin.dll 仍然可以构建。所以我刚刚将插件部署到 CRM,它就可以工作了。

        【讨论】:

          猜你喜欢
          • 2012-07-31
          • 1970-01-01
          • 2014-09-17
          • 2017-12-03
          • 1970-01-01
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          • 2011-06-05
          相关资源
          最近更新 更多