我的所有.NET程序集都使用1.0.*格式作为其版本号.据说*被当前的日期和时间取代,翻译成一个数字.将其转换回日期和时间的公式是什么?
Phi*_*oss 19
在实践中,我发现内部版本号是自2000年1月1日以来的天数.修订版是从当天午夜开始的秒数除以2.
var result = new DateTime(2000, 1, 1);
result = result.AddDays(buildNumber);
result = result.AddSeconds(revision * 2);
Run Code Online (Sandbox Code Playgroud)
但是,正如其他人已经指出的那样,文档并不能保证始终如此.
在 Roslyn 和 .NET Core 中,编译器源代码现已可用。
该文件roslyn/src/Compilers/Core/Portable/VersionHelper.cs(https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/Portable/VersionHelper.cs - 来自2016-04-19 的提交 4f44984)确实具有与原始文件相同的日期逻辑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);
Run Code Online (Sandbox Code Playgroud)
然而,文档注释只是说“基于时间的值”,而没有具体说明它是如何生成的。
但事实上,到目前为止,这Build仍然是自 2000 年 1 月 1 日以来的天数,并且Revision是自午夜以来秒数的一半。
有趣的是,这种行为是在测试用例中定义和验证的VersionHelperTests.cs:https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs
| 归档时间: |
|
| 查看次数: |
2419 次 |
| 最近记录: |