【问题标题】:What is the formula in .NET for "*" (wildcard) version numbers?.NET 中“*”(通配符)版本号的公式是什么?
【发布时间】:2012-12-06 06:40:33
【问题描述】:

假设我有一个版本号 1.5.*,编译为 1.5.4735.28467。

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

【问题讨论】:

  • 主要、次要、构建、修订。构建和修订取决于您....
  • blogs.msdn.com/b/jensenh/archive/2005/11/11/491779.aspx。但这是针对 Microsoft Office 的。我不知道它是否适用于 .NET Framework。
  • 构建 = DateTime.Today.Subtract(new DateTime(2000, 1, 1)).Days;修订 = (int)DateTime.Now.Subtract(DateTime.Today).TotalSeconds / 2;太糟糕了,这被关闭了;所谓的重复是一个不同的问题......
  • @Daniel:这是针对 .NET Framework 的吗?你有参考吗?
  • 这是 C# 编译器在使用 [AssemblyVersion("1.5.*")] 时使用的内容。我不确定其他 .NET 语言是否也这样做。我找不到任何文档;我刚刚编译了一些东西并检查了数字是否匹配。我不知道我是从哪里记住公式的。

标签: .net versioning assemblyversionattribute


【解决方案1】:

请注意:替代工具/规则/方案/宏/插件/等以不同的方式控制版本控制;如果使用它们显然会消除以下内容。

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

指定版本时,您至少必须指定主要版本。如果您指定主要和次要,您可以为构建指定一个星号 (*)。这将导致 build 等于自当地时间 2000 年 1 月 1 日起的天数,并且 revision 等于自当地时间午夜以来的秒数除以 2。

Coding Horror: Determining Build Date the hard wayMSDN: 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; 

【讨论】:

  • 这绝对是编译器的行为。编译器不实例化任何属性;它只是对元数据中的参数值进行编码。但是该数字在编译时被替换;它必须是编译器中的特例。没有办法编写自定义属性来做类似的事情。
  • @Daniel 这是一个很好的论点。我希望我能找到关于版本号如何工作的 VS(不是 .NET)参考。
  • 您还可以在 Roslyn 中看到实现:source.roslyn.codeplex.com/#Microsoft.CodeAnalysis/…
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 1970-01-01
  • 2015-06-07
相关资源
最近更新 更多