9

2 つの異なるプロジェクトにフィードする基本プロジェクトがあります。コンパイル時に、プライマリ プロジェクトですべての参照を 1 つの dll にコンパイルできるようにしたいと考えています。

これは、Jr 開発者が心配する必要がないように、プロジェクト ビルドに組み込まれている必要があります。


解決策: 最終的に、プロジェクトのビルド後のアクションに行を追加して、適切なビルドが次のようになるようにしました。

$(ProjectDir)ilmerge.exe /out: /ver: <.dll> <.dll>

ilmerge.exeプロジェクトに移動され、上記の行は指定された dll を取得して作成します。

4

3 に答える 3

11

(この回答は、新しいダウンロード場所へのリンクを更新し、新しい洞察を反映するために編集されました)

あなたの最善の策は、Micorosoft の ILMergeを使用することです。以前は、Microsoft Research から個別にダウンロードできました ( VS または .NET SDK の一部ではありません)。

元のバージョンは 2012 年まで維持されていました。現在はNuGet パッケージになっています。これは、現時点で取得し、プロジェクトとビルド サーバーに追加するための最良の方法です。

別の方法として、ILMergeへの GUI インターフェイスを提供する CodePlex のILMerge GUIを試すこともできます。その開発は中断されましたが、現在は活動を再開しています。

ILMergeに関するCodeproject の記事では、ILMergeの使用方法と使用例について詳しく説明しています。コマンドの例は次のとおりです。

ilmerge /target:winexe /out:AllInOne.exe NormalProgram.exe Lib1.dll Lib2.dll

別の方法として、このSO レスポンスで説明されているように、FodyをCostura.Fodyと共に使用できます。


注 (1): サイド バイ サイド アセンブリをマージする必要がある場合 (つまり、ネイティブの 64 ビット アセンブリと 32 ビット アセンブリを混在させる) は、サイド バイ サイド アセンブリの動的なロードに関する SO 記事を参照してください。

注 (2): これをビルド プロセスに不可欠なステップとして追加するには、[プロジェクト プロパティ] > [ビルド イベント] に移動し、[ビルド後の編集] をクリックして、上記のコマンドを入力します。「マクロ」をクリックして、現在のファイルまたはアセンブリを参照する方法を確認します。

于 2011-08-04T13:07:15.960 に答える
2

Microsoft の外部ツール ILMerge を探してください: http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx 複数のアセンブリを 1 つにマージできます。

于 2011-08-04T13:07:09.860 に答える
1

ILMergeを使用して、複数のアセンブリをマージできます。

ILMerge は、複数の .NET アセンブリを単一の .NET アセンブリにマージするためのユーティリティです。実行可能ファイルと DLL で同様に機能し、出力の処理と形式を制御するためのいくつかのオプションが付属しています。詳細については、付属のドキュメントを参照してください。

基本アセンブリを一緒にマージし、結果のアセンブリを他のプロジェクトへの参照として使用できます。

または、2 つのプロジェクトではなく、共有コードを 1 つのプロジェクトに配置して、参照するアセンブリを 1 つ取得します。

于 2011-08-04T13:07:40.623 に答える