【问题标题】:.NET assembly merge troubleshooting ilmerge.NET 程序集合并疑难解答 ilmerge
【发布时间】:2017-12-03 04:30:06
【问题描述】:

寻找一种工具来合并 .NET 程序集我总是在尝试ILMerge 时结束。但我不让它工作。现在我只尝试了一个非常简单但不起作用的示例。

我的库只包含这个接口:

namespace CommonLib
{
    public interface IPlugin
    {
        string Name { get; }
        string Version { get; }
        void Load();
    }
}

我的控制台应用程序包含类:

using System;
using CommonLib;

namespace ILMergeTest
{
    internal class DirectTestPlugin : IPlugin
    {
        public string Name => "DirectTestPlugin";
        public string Version => "4711.0.8.15";
        public void Load()
        {
            Console.WriteLine("Loading Plugin: " + Name + " [Version " + Version + "]");
        }
    }
}

和 Program.cs

using System;

namespace ILMergeTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            var plugin = new DirectTestPlugin();
            plugin.Load();
            Console.ReadKey();
        }
    }
}

编译应用程序后一切正常。

现在我将 ILMerge.exe 复制到我的二进制文件所在的输出目录并创建以下批处理来执行 ILMerge

mkdir Merged

ilmerge /union /ndebug /t:exe /copyattrs /closed /out:Merged\MergedProgram.exe /targetplatform:v4,"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1" "ILMergeTest.exe" "CommonLib.dll"
pause

我的项目目标框架是.NET 4.6.1.

我总是收到以下错误:

ILMerge.Merge:程序集“CommonLib”未正确合并。 它仍然在目标程序集中列为外部引用。
北 ILMerging.ILMerge.Merge() 北 ILMerging.ILMerge.Main(String[] 参数)

我该如何解决这个问题? ILMerge 的文档对我一点帮助都没有。

谢谢

【问题讨论】:

  • 你的终极目标是什么?这样做似乎违背了共享接口插件系统的意义
  • ILMerge 在 GitHub 上是开源的,所以当文档不够用时,请查看它的源代码,github.com/microsoft/ilmerge
  • @Alex K.:最终目的是合并几个 dll。通过这个简单的测试项目,我将了解 ILMerge 在哪里/为什么总是以错误结束。在这个简单的测试中,我将embed dll 放到可执行文件中。稍后在我的实际项目中,我将只发送一个 dll 作为plugin

标签: c# .net dll merge ilmerge


【解决方案1】:

现在我错了!在我的情况下,使用 /union 会导致此错误。

现在我使用以下命令行,一切正常:

mkdir Merged
ilmerge /ndebug /t:exe /copyattrs /closed /out:Merged\MergedProgram.exe /targetplatform:v4,"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1" "ILMergeTest.exe" "CommonLib.dll"
pause

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2014-08-29
    • 2011-10-27
    相关资源
    最近更新 更多