.NET中"*"(通配符)版本号的公式是什么?

Jon*_*len 14 .net versioning assemblyversionattribute

假设我的版本号为1.5.*,编译为1.5.4735.28467.

获得4735和28467的公式是什么?

小智 21

请注意:其他工具/规则/方案/宏/加载项/等以不同的方式控制版本控制; 如果使用它们显然会消除以下情况.

但是,这是在一个vanilla Visual Studio/.NET构建过程中"*"计算版本的方式:.build.revision

指定版本时,您必须至少指定major.如果指定major和minor,则可以为构建指定星号(*).这将导致构建等于自2000年1月1日当地时间以来的天数,并且修订将等于自当地时间午夜以来的秒数除以2.

请参阅编码恐怖:艰难地确定构建日期MSDN:AssemblyVersionAttribute.AssemblyVersionAttribute类(BCL!)中记录了此默认扩展行为而不是特殊的VS编译器行为 (参见Daniel的评论),而不仅仅是编译器行为.


这是公式的一个实现(从Daniel的评论中提取):

int Build = DateTime.Today.Subtract(new DateTime(2000, 1, 1)).Days;
int Revision = (int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds / 2; 
Run Code Online (Sandbox Code Playgroud)

  • 这绝对是编译器行为.编译器不会实例化任何属性; 它只是对元数据中的参数值进行编码.但是这个数字在编译时被替换了; 它必须是编译器中的特例.没有办法编写自定义属性来执行类似的操作. (3认同)
  • 您还可以在Roslyn中看到实现:http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/VersionHelper.cs,95 (3认同)