2017-06-29 4 views
0

Suche nach einem Werkzeug zum Zusammenführen von .NET-Assemblys Ich immer am Ende versuchen ILMerge. Aber ich verstehe es nicht. Jetzt habe ich nur ein sehr einfaches Beispiel versucht, das nicht funktioniert..NET Assembly Merge Fehlerbehebung ilmerge

Meine Bibliothek nur diese Schnittstelle enthält:

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

Meine Konsolenanwendung enthält die Klasse:

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 + "]"); 
     } 
    } 
} 

und die Program.cs

using System; 

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

Nachdem die Anwendung funktioniert alles Kompilieren fein.

Jetzt kopiere ich ILMerge.exe in das Ausgabeverzeichnis, wo meine Binärdateien sind und die folgenden Batch erstellen ILMerge auszuführen

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 

Meine Projekte Ziel Framework ist .NET 4.6.1.

Ich bekomme immer folgende Fehler :

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)

Wie behebe ich das? Die Dokumentation von ILMerge hat mir überhaupt nicht geholfen.

Dank

+0

Was ist Ihr Endziel? Dies scheint den Punkt eines Shared-Interface-Plugin-Systems zu besiegen. –

+0

ILMerge ist Open Source bei GitHub. Wenn die Dokumentation nicht ausreicht, überprüfen Sie den Quellcode https://github.com/microsoft/ilmerge –

+0

@Alex K .: Das ultimative Ziel ist es, mehrere DLLs zusammenzuführen. Mit diesem einfachen Testprojekt werde ich verstehen, wo/warum ILMerge immer mit einem Fehler endet. In diesem einfachen Test werde ich die DLL einfach in die ausführbare Datei einbetten. Später in meinem realen Projekt werde ich nur eine DLL als 'plugin' versenden. – WPFGermany

Antwort

0

Jetzt habe ich meine Schuld! Die Verwendung der /union verursacht diesen Fehler in meinem Fall.

Jetzt benutze ich den folgenden Befehl weg und alles funktioniert wie erwartet:

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