【问题标题】:Combining assemblies with visual studio using ILMerge or something else使用 ILMerge 或其他工具将程序集与 Visual Studio 相结合
【发布时间】:2016-03-31 10:53:26
【问题描述】:

我正在使用 Visual Studio 2013。

我有 3 个 C# 类库项目,A、B 和 C。

A 引用 B

B 引用 C

当我在 Visual Studio 中编译和构建项目“A”时,我在项目“A”的 bin 文件夹中看到 A.dll、B.dll 和 C.dll。

现在我打算将 B.dll 和 C.dll 合并到 A.dll 中。

我尝试使用下面的 ILMerge 命令,但 A.dll 的内容丢失了。

ilmerge /out:A.dll A.dll B.dll C.dll  /targetplatform:v4

知道如何实现吗? 我不希望 B 和 C 在 A 中合并而不丢失 A 的内容。

谢谢。

【问题讨论】:

  • 尝试将参数更改为 D.dll。
  • @Lexi:是的,我知道,但我不想要一个新的程序集。
  • 那么可能先将A重命名为D,然后将B、C、D合并为A。

标签: .net visual-studio dll msbuild ilmerge


【解决方案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 程序集的程序集版本,则您需要获取更多 创意,即获取程序集版本,然后将版本传递给 ILMerge.exe 的 /ver:version 参数。 如果考虑将 ILMerge 作为构建后事件运行,则以下与获取版本相关的链接适用。

SO: getting version in postbuild event

SO: getting version in commandline

讨论了在构建后调用 ILMerge SO: here

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

【讨论】:

    猜你喜欢
    • 2015-07-27
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多