在已编译的.NET程序集中更改程序集版本

Mik*_*ike 51 .net

简单的问题......有没有办法改变已编译的.NET程序集的汇编版本?

我实际上可以改变程序集文件版本.

Mar*_*kGr 41

您可以使用ILMerge:

ILMerge.exe Foo.dll /ver:1.2.3.4 /out:Foo2.dll

执行此操作的正当理由是在构建中增加程序集版本,以查找重大更改(例如,使用NDepend).这样,如果没有重大更改,程序集版本保持不变,您可以轻松修补已发布的版本.

我们总是递增文件版本,这反映了内部版本号.


小智 12

老话题,但这里是我的5角钱......

  1. 拆卸

    ildasm my.exe /output:my.il/ metadata

  2. 编辑my.il以更改版本信息.有几个地方需要研究:

    • major:minor:revision:build - 通常是一次出现
    • major.minor.revision.build - 几次出现.该字符串位于实际行之后的注释部分中.版本是字节数组中的十六进制值.例:

.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 35 2E 31 2E 33 2E 30 00 00 ) // ...5.1.3.0..

  1. 编辑my.res以更改版本信息.双击并使用visual studio进行编辑.非常直接的程序.

  2. 集合

    ilasm my.il /res:my.res

  • 虽然目前最受好评的答案中提到的 ILMerge 对我不起作用,但确实如此!谢谢!:-) (2认同)
  • 我只需要在第4步添加一个/ dll开关.ilasm my.il /res:my.res/dll (2认同)
  • 与 ILMerge 不同,此解决方案也适用于 .Net Core 程序集。谢谢! (2认同)

Jon*_*eet 8

你为什么要这样做?如果它是另一个应用程序可以使用它,您可能希望查看程序集绑定重定向.

  • 对于部署,我们更新AssemblyInfo文件并执行完全重建,但这太重了,所以我们要转向增量构建.问题是确定要更新哪个AssemblyInfo,所以我们现在不更新增量版本的版本. (4认同)
  • 如果仅用于内部目的,您可以只包含 version.txt 文件吗?技术含量低但简单:) (2认同)

小智 5

听起来您的过程很繁琐,因为您必须更新多个AssemblyInfo文件。您是否考虑过在项目之间共享相同的AssemblyInfo文件? Derik Whittaker给出了一个很好的例子。

拥有单个文件后,您可以通过构建过程使用MSBuildNAnt更新单个AssemblyInfo版本,从而加倍努力。