2017-06-29 2 views
0

la recherche d'un outil pour fusionner les assemblages .NET Je finis toujours en essayant ILMerge. Mais je ne le fais pas fonctionner. Maintenant, j'ai essayé un exemple très simple qui ne fonctionne pas..NET assemblage fusionner dépannage ilmerge

Ma bibliothèque ne contenant que cette interface:

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

Mon application console contient la classe:

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

et les Program.cs

using System; 

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

Après avoir compilé les tout fonctionne d'application bien.

Maintenant, je copie ILMerge.exe dans le répertoire de sortie, où mes binaires sont et créer le lot suivant pour effectuer 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 

Mes projets Framework cible est .NET 4.6.1.

Je reçois toujours l'erreur suivante :

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)

Comment résoudre ce problème? La documentation d'ILMerge ne m'a pas du tout aidé.

Merci

+0

Quel est votre objectif ultime? Faire cela semble aller à l'encontre du but d'un système de plugin à interface partagée –

+0

ILMerge est open source sur GitHub, donc quand la documentation ne suffit pas, vérifiez son code source, https://github.com/microsoft/ilmerge –

+0

@Alex K .: le but ultime est de fusionner plusieurs dll. Avec ce simple testproject je comprendrai où/pourquoi ILMerge se termine toujours par une erreur. Dans ce test simple, je vais simplement «incorporer» la DLL à l'exécutable. Plus tard dans mon projet réel, je vais expédier un seul DLL comme «plugin». – WPFGermany

Répondre

0

Maintenant, j'ai ma faute! L'utilisation du /union provoque cette erreur dans mon cas.

Maintenant, j'utiliser la ligne de commande suivante et tout fonctionne comme prévu:

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