.NET 程序集合并疑难解答 ilmerge

.NET assembly merge troubleshooting ilmerge

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

我的库只包含这个接口:

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

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

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: The assembly 'CommonLib' was not merged in correctly. It is still listed as an external reference in the target assembly.
bei ILMerging.ILMerge.Merge() bei ILMerging.ILMerge.Main(String[] args)

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

谢谢

现在我明白我的错了!在我的案例中,使用 /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