2016-03-31 7 views
0

私は、Visual Studioを使用しています2013年組み合わせるアセンブリは

I 3 C#クラスライブラリプロジェクト、A、B & C.

参照のB

Bを持っています参照先C

Visual Studioでプロジェクト "A"をコンパイルしてビルドすると、プロジェクト "A"のbinフォルダにA.dll、B.dll、およびC.dllが表示されます。

今、A..dllの中にB.dllとC.dllをマージする予定です。

以下のILMergeコマンドを使用しようとしましたが、A.dllの内容が失われました。

ilmerge /out:A.dll A.dll B.dll C.dll /targetplatform:v4 

これはどのように考えられますか? 私はBとCがAのコンテンツを失うことなくAに合併することはありませんでした。

ありがとうございました。 3つのコマンドを実行して、次のように

+0

引数をD.dllに変更してください。 –

+0

@ Lexi:ええ、私はそれを知っていますが、私は新しいアセンブリを望んでいません。 – thinkmmk

+0

おそらく最初に名前をAからDに変更し、次にB、C、DをAにマージします。 –

答えて

1

は、多段階プロセスの使用を検討:

は、3つの入力アセンブリから一時アセンブリを作成します。

2.オリジナルライブラリA.dllアセンブリを削除します。

library_name.dllの名前を変更します。

例:"&"セパレータを使用して単一の行に実行

3コマンド。 (便宜上ILSpyで見て)

C:\<somepath>\Debug>"C:\<somepath>"\ILMerge.exe /out:temp.dll libraryA.dll libraryB.dll libraryC.dll /targetplatform:v4 & del /F /Q libraryA.dll & ren temp.dll libraryA.dll 

出力:

ILSpy showing code from multiple sources merged into single assembly

重要:あなたはリリースビルドでのみ、このプロセスを以下の点を考慮すべきです。 .pdbファイルを使用してデバッグビルドを行う場合、この例の3番目のステップで実行した名前の変更は、アセンブリのデバッグ機能を無効にします。 SO: here

NOTEの関連情報:あなたの意図は、あなたがより 創造すなわちソースにアセンブリのバージョンを取得する必要がありますプロセスでは、元libraryA.dllアセンブリのアセンブリバージョンを維持することで、その後のバージョンを渡した場合ILMerge.exeの引数の/ver:にあります。 ILMergeをポストビルド・イベントとして実行することを検討する場合、バージョンの取得に関連する次のリンクが適用されます。

SO: getting version in postbuild event

SO: getting version in commandline

呼び出しILMergeポストビルドが議論されているようSO: here

も注意してください。あなたに似た質問が、例えば基づいて回答なしhereを議論しました。