简单的问题......有没有办法改变已编译的.NET程序集的汇编版本?
我实际上可以改变程序集文件版本.
您可以使用ILMerge:
ILMerge.exe Foo.dll /ver:1.2.3.4 /out:Foo2.dll
执行此操作的正当理由是在构建中增加程序集版本,以查找重大更改(例如,使用NDepend).这样,如果没有重大更改,程序集版本保持不变,您可以轻松修补已发布的版本.
我们总是递增文件版本,这反映了内部版本号.
老话题,但这里是我的5角钱......
拆卸
ildasm my.exe /output:my.il/ metadata
编辑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..
编辑my.res以更改版本信息.双击并使用visual studio进行编辑.非常直接的程序.
集合
ilasm my.il /res:my.res
你为什么要这样做?如果它是另一个应用程序可以使用它,您可能希望查看程序集绑定重定向.
听起来您的过程很繁琐,因为您必须更新多个AssemblyInfo文件。您是否考虑过在项目之间共享相同的AssemblyInfo文件? Derik Whittaker给出了一个很好的例子。
拥有单个文件后,您可以通过构建过程使用MSBuild或NAnt更新单个AssemblyInfo版本,从而加倍努力。