如果代码有变化,如何自动增加程序集的版本?

Ign*_*cia 4 .net versioning assemblies visual-studio

如果在构建解决方案后组件发生了变化,有一种方法可以自动增加组件的版本号吗?

我已尝试使用后期构建事件,但随后在每次构建时增加版本,不仅是因为构建过程由于更改而编译了任何内容.

提前致谢.

编辑:我想要做的是每次我执行"构建解决方案"时自动增加我更改代码的程序集的版本号,以避免手动更改它.这样我可以确定具有相同版本的2个程序集总是具有相同的代码.

Han*_*ant 7

是的,您可以在[AssemblyVersion]属性中使用*来获得自动版本递增.不幸的是,这很少是正确的.微软应该做的是为[AssemblyFileVersion]提供这种能力.他们没有.

[AssemblyVersion]是一个非常重要的属性,CLR用它来验证加载的程序集是否与编译代码时使用的程序集兼容."兼容"意味着:程序集将与客户端代码一起干净地工作,如果客户端未重新编译,则不会对程序集源代码进行任何更改,从而导致无法正常工作.使用该定义,错误修复更新非常兼容.重新组织程序集中类的内部实现的更新也可以非常兼容.对公开可见的类或成员的更改可能不兼容.虽然JIT编译器非常擅长检测何时更改非常不兼容(例如删除以前的公共成员).

在属性中使用*实质上意味着:它始终不兼容.即使您根本没有更改任何代码,组件在再次构建后也将不兼容.在大多数情况下,这都是无用的,除非您始终使用其客户端代码构建程序集.并将它们重新组合在一起.这是有效的,但随后版本号的概念变得毫无用处.

长话短说:IMO你应该自己管理装配版本.在程序集的公共接口中进行重大更改时更改它.这当然是微软采取的方法..NET 2.0程序集仍然在.NET 3.5 SP1框架中标记为2.0.0.0版.即使它们实际上不再兼容,WaitHandle.WaitOne(int)也会在稍后添加.在过去的5年里,他们确实保持了兼容性,这绝非易事.

请注意,这些都不适用于[AssemblyFileVersion],为每个构建自动递增它是非常合适的.