我正在使用Visual Studio 2013.
我有3个C#类库项目,A,B&下进行。
参考文献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
知道如何实现这一目标? 我不会在A中合并B和C而不会丢失A的内容。
感谢。
答案 0 :(得分:1)
通过运行三个命令考虑使用如下的多步骤过程:
1。从3个输入程序集创建临时程序集。
2. 删除原始libraryA.dll程序集。
3. 将临时程序集重命名为libraryA.dll。
示例:
使用"&" 分隔符在一行执行3个命令。
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中查看):
重要提示:您应该考虑仅使用版本构建来执行此过程。 如果针对使用.pdb文件的调试版本完成,则在示例的第3步中执行的重命名将使调试程序集的能力无效。 SO: here
上的相关信息注意:如果您打算在此过程中维护原始libraryA.dll程序集的程序集版本,则需要获得更多 creative,即获取程序集版本,然后将版本传递给ILMerge.exe的 / ver:version 参数。 如果考虑将ILMerge作为postbuild事件运行,则以下与获取版本相关的链接均适用。
SO: getting version in postbuild event
讨论了将ILMerge作为postbuild进行调用
另请注意:在没有基于示例的答案的情况下,here讨论了与您类似的问题。