2009-11-19 98 views
6

我所有的.NET程序集都使用1.0。*格式作为它们的版本号。据推测*将被替换为当前的日期和时间,翻译成数字。将它翻译成日期和时间的公式是什么?我可以将.net程序集版本翻译成日期吗?

+0

蜱? '新的日期时间(长蜱)' – 2009-11-19 22:23:48

+0

你能举一个你的意思吗? – CesarGon 2009-11-19 22:24:12

+0

你从哪里知道* gtes与当前日期/时间有关? – David 2009-11-19 22:24:26

回答

14

在实践中,我发现,内部版本号是自2000年1月1修订天数的秒数,因为午夜在当天由2

var result = new DateTime(2000, 1, 1); 
result = result.AddDays(buildNumber); 
result = result.AddSeconds(revision * 2); 

不过分,正如其他人已经指出的那样,文件并不能保证这总是如此。

+0

谢谢!这正是我需要的。 – 2009-11-20 19:26:27

0

的集版本记录在这里:http://msdn.microsoft.com/en-us/library/51ket42z.aspx

从下面的报价,我会说,你要问是不可能的,您的信息不正确。

集版本号的每个组件 的版本号为 身份的一部分。因此, 与版本号不同的两个程序集 被运行时考虑为 完全不同的程序集。这 版本号是物理表示为四部分组成的字符串 以下格式 :

<major version>.<minor version>.<build> number>.<revision> 

然而,在页面的底部我联系,有关于自定义组件属性的信息和链接到设置装配属性。你可能会发现一些有用的东西。 编辑 - 添加

我接过一看,你在你的答案贴到我的评论的链接,我唯一看到的是这样的:

这样做的结果是构建号码 设置为自从 随机指定的开始日期以及 修订基于自午夜以来的 秒数的天数。

基础上,它说“随机指定的开始日期”我会说,你问世界卫生大会可能是可能的,如果你能找出随机指定的开始日期是什么事实,但我怀疑它会值得努力发现。

编码最佳范例

无耻的插头,您会得到更好的服务于使用版本控制和自动化的构建过程,并使用日志从那些确定asembly的生成日期。

2

版本字符串的格式为:

<major version>.<minor version>.<build number>.<revision> 

,如果你设置的版本,你所描述,对1.0.*

这样做的结果是内部版本号 设为自 随机,指定开始日期以及 修订基于自午夜以来的 秒数的天数。

这里的关键是“随机”。因此,您可以将修订版翻译为一天中的某个时间,但听起来您无法将其解决为日期。

http://msdn.microsoft.com/en-us/library/ms998223.aspx

+0

有趣的是,你的MSDN链接和我的链接相互冲突了一下。 – 2009-11-19 22:33:30

+0

对不起,@Michael - 我不小心编辑了你的文章,然后意识到我的错误,并从你的文章中删除了我的编辑并将它们放入我自己的文章中。这是一场意外。 *对不起* – David 2009-11-19 22:37:31

+0

但给你+1,因为它看起来像你的结论是我如何阅读它。 – David 2009-11-19 22:38:02

2

MSDN:“默认的内部版本号每日递增,默认版本号是随机的。”

如果您在反射器中查看AssemblyVersionAttribute的源代码,您会发现它根本没有做任何事情,只是接受字符串。所以魔术就发生在编译器本身上,据我所知,没有任何文件记录。 “每天增加”相当含糊,从哪一点开始?

我不希望能够以任何可靠性使用这些版本。将版本从源代码控制系统或类似的标签中取出,可能会更好。

+0

并给你+1。 – David 2009-11-19 22:38:35

+0

+1用于源代码管理系统中的标签。 – Russell 2009-11-19 22:45:00

+0

可靠性并不重要,我只是需要一些东西。 – 2009-11-20 19:27:41

0

即使您可以从自动生成的内部版本号中计算日期/时间,我也不会推荐它。内部编号并不是为此目的而设计的。它只是一个你可以依靠不断增加的自动生成的值。消费应用程序不应该采取进一步的逻辑。如果您想要版本号的片段包含日期/时间戳记,那么您应该将该逻辑集成到您的构建过程/脚本中,不过您可能会选择这样做。

+0

你怎么知道我在构建逻辑?也许我只是在看一个DLL,并试图获得最佳猜测,以确定它的构建时间。 – 2009-11-20 19:30:39

+0

你可以同时拥有:例如170504是一个递增的数字,也是YYMMDD的日期。你不会单步增加,但你可能会发现这不是必需的。 – tenpn 2017-04-05 16:20:51

0

我使用PostBuild脚本在我的组件呼吁的AssemblyInfo.cs

我们使用以下格式版本UpdateVersion |年|月|日| BuildCounter |。

由于更新版本是开源的,您可以修改它以适应。

我已经修改它以使用当前日期和增加每个构建的计数器。

这样,版本号总是变化,我可以从版本号中推导出日期。

的确很方便。

0

旧的帖子,但希望这将提供另一个(简单)选项更新版本上的版本号。我使用了MSBUILD RegexTransform步骤来修改版本号。以下是我需要实现此功能时经常返回的帖子。

http://weblogs.asp.net/srkirkland/archive/2010/12/07/simple-msbuild-configuration-updating-assemblies-with-a-version-number.aspx

基本上,你MSBUILD凸出文件创建您的AssemblyInfo文件转换。类似:

<ItemGroup> 
    <RegexTransform Include="$(SolutionRoot)\CommonAssemblyInfo.cs"> 
     <Find>(?&lt;major&gt;\d+)\.(?&lt;minor&gt;\d+)\.\d+\.(?&lt;revision&gt;\d+)</Find> 
     <ReplaceWith>$(BUILD_NUMBER)</ReplaceWith> 
    </RegexTransform> 
</ItemGroup> 

其中BUILD_NUMBER外部提供:

msbuild myBuild.proj /p:Configuration="%config%" /p:build_number="%version%" 
0

在罗斯林和.NET核心,编译源代码现在可用。

文件roslyn/src/Compilers/Core/Portable/VersionHelper.cshttps://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/Portable/VersionHelper.cs - 从提交4f44984 on 2016-04-19)确实有从原来的csc同一日期逻辑的方法GenerateVersionFromPatternAndCurrentTime

int revision = (int)time.TimeOfDay.TotalSeconds/2; 

// 24 * 60 * 60/2 = 43200 < 65535 
Debug.Assert(revision < ushort.MaxValue); 

// ... 

TimeSpan days = time.Date - new DateTime(2000, 1, 1); 
int build = Math.Min(ushort.MaxValue, (int)days.TotalDays); 

return new Version(pattern.Major, pattern.Minor, (ushort)build, (ushort)revision); 

然而文档的意见简单地说“基于时间的价值”,而不具体关于它是如何产生的。

不过说实在的,至今Build仍然是日以来2000-01-01和Revision一半自午夜起的秒数。

有趣的是,这种行为定义和验证VersionHelperTests.cs在测试用例https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs

相关问题