使用ILMerge或其他东西将装配与visual studio相结合

时间:2016-03-31 10:53:26

标签: .net visual-studio dll msbuild ilmerge

我正在使用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的内容。

感谢。

1 个答案:

答案 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中查看):

ILSpy showing code from multiple sources merged into single assembly

  

重要提示:您应该考虑仅使用版本构建来执行此过程。   如果针对使用.pdb文件的调试版本完成,则在示例的第3步中执行的重命名将使调试程序集的能力无效。 SO: here

上的相关信息      

注意:如果您打算在此过程中维护原始libraryA.dll程序集的程序集版本,则需要获得更多   creative,即获取程序集版本,然后将版本传递给ILMerge.exe的 / ver:version 参数。   如果考虑将ILMerge作为postbuild事件运行,则以下与获取版本相关的链接均适用。

     

SO: getting version in postbuild event

     

SO: getting version in commandline

     

SO: here

讨论了将ILMerge作为postbuild进行调用

另请注意:在没有基于示例的答案的情况下,here讨论了与您类似的问题。