2017-06-29 72 views
0

搜索合併.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: 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的文檔根本沒有幫助我。

感謝

+0

什麼是你的最終目標是什麼?這樣做似乎擊敗了共享接口插件系統的一個點 –

+0

ILMerge是GitHub的開源代碼,所以當文檔不夠時,請檢查它的源代碼,https://github.com/microsoft/ilmerge –

+0

@Alex K 。:最終目標是合併多個dll。通過這個簡單的測試項目,我將瞭解ILMerge始終以何種方式出現錯誤。在這個簡單的測試中,我只是將dll嵌入到可執行文件中。後來在我的真實項目中,我將只運送一個dll作爲'plugin'。 – WPFGermany

回答

0

現在,我得到我的錯!在我的情況下使用/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