2017-06-29 20 views
0

.NETアセンブリをマージするツールの検索常に試行錯誤して、ILMergeを試してみます。しかし、私はそれを働かせることはありません。今私は非常に単純な例を試してみましたがうまくいきませんでした。.NETアセンブリのマージトラブルシューティングilmerge

のみ、このインタフェースを含むマイライブラリ:アプリケーションのすべての作品をコンパイルした後

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(); 
     } 
    } 
} 

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

マイコンソールアプリケーションは、クラスが含まれています良い。

今私は、出力ディレクトリにILMerge.exeをコピーし、私のバイナリがどこにあると私のプロジェクトのターゲットフレームワークは、私はいつも次のエラーを取得する.NET 4.6.1.

ある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 

を実行するために次のバッチを作成します:

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を '埋め込むだけです。私の実際のプロジェクトの後半で、私は 'プラグイン'として1つのdllだけを出荷します。 – 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 
関連する問題