Устранение неполадок при слиянии сборок .NET ilmerge

в поисках инструмента для слияния сборок .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 [] args)

Как я могу это исправить? Документация ILMerge мне совершенно не помогла.

Спасибо


person WPFGermany    schedule 29.06.2017    source источник
comment
Какова ваша конечная цель? Похоже, что это лишает смысла систему плагинов с общим интерфейсом.   -  person Alex K.    schedule 29.06.2017
comment
ILMerge имеет открытый исходный код на GitHub, поэтому, когда документации недостаточно, проверьте его исходный код, github.com/microsoft/ilmerge   -  person Lex Li    schedule 29.06.2017
comment
@Alex K .: конечная цель - объединить несколько dll. С помощью этого простого тестового проекта я пойму, где и почему ILMerge всегда заканчивается ошибкой. В этом простом тесте я просто добавлю dll к исполняемому файлу. Позже в моем реальном проекте я отправлю только одну dll как plugin.   -  person WPFGermany    schedule 29.06.2017


Ответы (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
person WPFGermany    schedule 30.06.2017