ILMerge で動作する基本的な VS 2012 プロジェクトを取得しようとしているので、最終的にはより複雑な例に移行できます (最終的には実際のプロジェクトで使用できるようになります)。
現在、私は作業中のプロジェクト、TestMain
および参照ライブラリを作業中TestDLL
のプロジェクトに持っています。
私の作業ディレクトリ (..\bin\Release) は次のとおりです。
- ILMerge.exe
- TestDLL.dll
- TestDLL.pdb
- TestMain.exe
- TestMain.exe.config
- TestMain.pdb
- TestMain.vshost.exe
- TestMain.vshost.exe.config
- TestMain.vshost.exe.manifest
私の端末出力は次のとおりです。
C:...\bin\Release>ilmerge /target:winexe /out:ContainedProgram.exe "TestMain.exe" "TestDLL.dll"
マージ中に例外が発生しました: ILMerge.Merge: 場所 'C:...\bin\Release\TestMain.exe' からアセンブリを読み込めませんでした。残りの引数をスキップして処理します。ILMerging.ILMerge.Merge()
で ILMerging.ILMerge.Main(String[] args) で
シンプルですね。ここで何が欠けていますか?
更新: .exe を削除し、ライブラリのみで ILMerge を実行すると機能します。.dll を削除して実行可能ファイルのみで実行しても、エラー出力は変わりません。
また、2 つ目の .dll を作成し、ILMerge を使用して 2 つの既存のライブラリを次のように 1 つにマージすることができました。
ilmerge /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:Test.dll "TestDLL2.dll" "TestDLL.dll"
Update 2したがって、次のようにTestRun.exeを作成できました。
ilmerge /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:TestRun.exe "TestMain.exe" "Test.dll"
これにより、2 つの参照ライブラリ .dll が一緒にパッケージ化され、実行可能ファイルと共にパッケージ化されました。そしてそれは働いた!期待通りの結果を得ることができました。
新しい実行可能ファイルをホームフォルダーから移動するまで。
新しい場所に移動するとすぐに、実行すると次のエラーが発生しました。
未処理の例外: System.IO.FileNotFoundException: ファイルまたはアセンブリ 'TestDLL、Version=1.0.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
TestMain.Program.Main (文字列 [] args) で