【发布时间】: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 在哪里/为什么总是以错误结束。在这个简单的测试中,我将
embeddll 放到可执行文件中。稍后在我的实际项目中,我将只发送一个 dll 作为plugin。