8

概要

ILMergeの呼び出しが呼び出され、ビルドが単一のアセンブリになるように、2アセンブリソリューションのビルドプロセスを変更したいと思います。さらに、結果のアセンブリにデバッグできるようにしたいと思います。

準備-簡単な例

  1. 新しいソリューション-ClassLibrary1
  2. 文字列「Helloworld」を返す静的関数「GetMessage」をClass1に作成します
  3. ClassLibraryを参照する新しいコンソールアプリを作成します。
  4. コンソールを介してmain()からGetMessageを出力します。

これで、「HelloWorld」をコンソールに出力する2つのアセンブリアプリができました。

では、次に何を..?

コンソールアプリのビルドプロセスを変更して、ILMergeを使用するビルド後の手順を含め、ClassLibraryアセンブリをコンソールアセンブリにマージしたいと思います。

このステップの後、私は次のことができるようになるはずです。

  • ClassLibrary1.dllが存在しない状態で、コンソールアプリを直接実行します
  • VSでF5(またはF11)を介してコンソールアプリを実行し、2つのプロジェクトのそれぞれにデバッグできるようにします。

限られた成功

私はこのブログ投稿を読み、ビルド後のコマンドで後のマージを達成することができました...

"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)

...そして以下を読み取るILMerge.batファイル...

CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll 
Del temp.exe
Del ClassLibrary1.*

これはかなりうまく機能し、実際には、必要に応じてVS環境の外部で実行されるexeを生成します。ただし、VSがコードにデバッグするために使用できるシンボル(.pdbファイル)を生成するようには見えません。

これがパズルの最後のピースだと思います。

誰かが私がこれを機能させる方法を知っていますか?

FWIW x64Win7x64マシンでVS2010を実行しています。

更新:なぜこれをしたいのですか?

「デバッグシナリオ中に本当にILMergeを実行する必要がありますか?」

私のソリューションのアセンブリは、他のソリューションのアセンブリと同じフォルダーに共存する必要があります(そのうちのいくつかは開発する可能性があります)

これらのソリューションの一部は、一部のアセンブリの異なるバージョンへの依存関係を共有します。

したがって、Solution1はConsole1とClassLibrary1.dll(v1)で構成され、Solution2はConsole2とClasslibrary1.dll(v2)で構成されている可能性があります。

すべてをGACに登録するのではなく、衝突を回避するために、正しいバージョンの依存関係をソリューションのプライマリアセンブリにILMergeできると思いました。

ただし、これにより、現在、ソリューションをデバッグできなくなります。これは、存在する他のソリューションと組み合わせて実行する必要があります。

これは複雑に聞こえますか?それはそうだからです..:D

4

4 に答える 4

5

問題が発生して申し訳ありません。正確な手順には従いませんでしたが、DLL 内のメソッド B.dll を呼び出すコンソール アプリケーション A.exe を作成しました。両方のアセンブリをデバッグ モードでビルドしました (PDB ファイルが含まれるように)。次に、次のようにマージしました。

ilmerge /out:foo.exe A.exe B.dll

(実際には、A と B は別のディレクトリにあったため、コマンド ラインはもう少し複雑でしたが、違いはありません。) ILMerge が完了すると、現在のディレクトリに foo.exe と foo.pdb の 2 つのファイルがありました。次に、次のように入力しました。

devenv foo.exe

これにより Visual Studio が開き、「F10」を押してデバッガーを起動しました。実行可能ファイルの Main メソッドにステップ インすることができ、「F11」を使用して、元々 B.dll にあったメソッドにステップ インできました。デバッグ エクスペリエンスは、2 つのアセンブリを使用した元の Visual Studio ソリューションとまったく同じでした。

それでも問題が解決しない場合は、解決策全体を zip ファイルに入れて私 ( microsoft dot com のmbarnett )送ってください。試すことができます。

于 2010-06-28T04:39:50.627 に答える
1

アセンブリの ILMerge リリース ビルドのみをお勧めします。デバッグ アセンブリをマージすることで得られるメリットは想像できません。

于 2010-06-17T19:08:11.493 に答える
-1

ILMerge ではできないと思います。red-gate(無料ではない)のOTOH smartassemblyはそれを行うことができます。少なくとも機能で述べています

はい、リリース バージョンにのみ ILMerge を使用するという Mike の意見に同意します。

于 2010-06-17T19:11:25.893 に答える