我正在尝试让一个基本的 VS 2012 项目与 ILMerge 一起使用,因此我最终可以升级到更复杂的示例(并最终能够在我的真实项目中使用它)。
目前我在工作项目中有一个工作项目,TestMain
和一个参考库TestDLL
。
我的工作目录(..\bin\Release)如下:
- ILMerge.exe
- 测试DLL.dll
- 测试DLL.pdb
- 测试主程序
- TestMain.exe.config
- 测试主程序.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 并仅使用可执行文件运行它不会更改错误输出。
我还制作了第二个 .dll 并能够使用 ILMerge 将两个现有库合并为一个,其中包含以下内容:
合并 /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:Test.dll "TestDLL2.dll" "TestDLL.dll"
更新 2所以我能够使用以下内容创建一个 TestRun.exe:
合并 /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:TestRun.exe "TestMain.exe" "Test.dll"
这将两个参考库 .dll 打包在一起,并将它们与我的可执行文件一起打包。它奏效了!我能够得到预期的结果。
直到我将新的可执行文件移出其主文件夹。
一旦我将它移动到一个新位置,执行就会产生这个错误:
未处理的异常:System.IO.FileNotFoundException:无法加载文件或程序集“TestDLL,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。该系统找不到指定的文件。
在 TestMain.Program.Main(String[] args)