我所有的.NET程序集都使用1.0。*格式作为它们的版本号。据推测*将被替换为当前的日期和时间,翻译成数字。将它翻译成日期和时间的公式是什么?我可以将.net程序集版本翻译成日期吗?
回答
在实践中,我发现,内部版本号是自2000年1月1修订天数的秒数,因为午夜在当天由2
var result = new DateTime(2000, 1, 1);
result = result.AddDays(buildNumber);
result = result.AddSeconds(revision * 2);
不过分,正如其他人已经指出的那样,文件并不能保证这总是如此。
谢谢!这正是我需要的。 – 2009-11-20 19:26:27
的集版本记录在这里:http://msdn.microsoft.com/en-us/library/51ket42z.aspx
从下面的报价,我会说,你要问是不可能的,您的信息不正确。
集版本号的每个组件 的版本号为 身份的一部分。因此, 与版本号不同的两个程序集 被运行时考虑为 完全不同的程序集。这 版本号是物理表示为四部分组成的字符串 以下格式 :
<major version>.<minor version>.<build> number>.<revision>
然而,在页面的底部我联系,有关于自定义组件属性的信息和链接到设置装配属性。你可能会发现一些有用的东西。 编辑 - 添加
我接过一看,你在你的答案贴到我的评论的链接,我唯一看到的是这样的:
这样做的结果是构建号码 设置为自从 随机指定的开始日期以及 修订基于自午夜以来的 秒数的天数。
基础上,它说“随机指定的开始日期”我会说,你问世界卫生大会可能是可能的,如果你能找出随机指定的开始日期是什么事实,但我怀疑它会值得努力发现。
编码最佳范例
无耻的插头,您会得到更好的服务于使用版本控制和自动化的构建过程,并使用日志从那些确定asembly的生成日期。
版本字符串的格式为:
<major version>.<minor version>.<build number>.<revision>
,如果你设置的版本,你所描述,对1.0.*
:
这样做的结果是内部版本号 设为自 随机,指定开始日期以及 修订基于自午夜以来的 秒数的天数。
这里的关键是“随机”。因此,您可以将修订版翻译为一天中的某个时间,但听起来您无法将其解决为日期。
据MSDN:“默认的内部版本号每日递增,默认版本号是随机的。”
如果您在反射器中查看AssemblyVersionAttribute
的源代码,您会发现它根本没有做任何事情,只是接受字符串。所以魔术就发生在编译器本身上,据我所知,没有任何文件记录。 “每天增加”相当含糊,从哪一点开始?
我不希望能够以任何可靠性使用这些版本。将版本从源代码控制系统或类似的标签中取出,可能会更好。
即使您可以从自动生成的内部版本号中计算日期/时间,我也不会推荐它。内部编号并不是为此目的而设计的。它只是一个你可以依靠不断增加的自动生成的值。消费应用程序不应该采取进一步的逻辑。如果您想要版本号的片段包含日期/时间戳记,那么您应该将该逻辑集成到您的构建过程/脚本中,不过您可能会选择这样做。
你怎么知道我在构建逻辑?也许我只是在看一个DLL,并试图获得最佳猜测,以确定它的构建时间。 – 2009-11-20 19:30:39
你可以同时拥有:例如170504是一个递增的数字,也是YYMMDD的日期。你不会单步增加,但你可能会发现这不是必需的。 – tenpn 2017-04-05 16:20:51
我使用PostBuild脚本在我的组件呼吁的AssemblyInfo.cs
我们使用以下格式版本UpdateVersion |年|月|日| BuildCounter |。
由于更新版本是开源的,您可以修改它以适应。
我已经修改它以使用当前日期和增加每个构建的计数器。
这样,版本号总是变化,我可以从版本号中推导出日期。
的确很方便。
旧的帖子,但希望这将提供另一个(简单)选项更新版本上的版本号。我使用了MSBUILD RegexTransform步骤来修改版本号。以下是我需要实现此功能时经常返回的帖子。
基本上,你MSBUILD凸出文件创建您的AssemblyInfo文件转换。类似:
<ItemGroup>
<RegexTransform Include="$(SolutionRoot)\CommonAssemblyInfo.cs">
<Find>(?<major>\d+)\.(?<minor>\d+)\.\d+\.(?<revision>\d+)</Find>
<ReplaceWith>$(BUILD_NUMBER)</ReplaceWith>
</RegexTransform>
</ItemGroup>
其中BUILD_NUMBER外部提供:
msbuild myBuild.proj /p:Configuration="%config%" /p:build_number="%version%"
在罗斯林和.NET核心,编译源代码现在可用。
文件roslyn/src/Compilers/Core/Portable/VersionHelper.cs
(https://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
- 1. 您可以混合使用.Net的不同版本编译的程序集吗?
- 2. 有人可以帮我翻译这个C程序到MIPS程序集吗?
- 3. 有人可以帮我把这个脚本翻译成cmd吗?
- 4. 将Zend翻译器集成到我的应用程序
- 5. CoffeeScript可以翻译成这段JavaScript吗?
- 6. 我可以使用Google翻译翻译我的网站吗?
- 7. .NET程序集版本
- 8. 我可以混淆编译的.NET可执行文件/程序集吗?
- 9. 将C程序翻译成IA32程序集(非常快)
- 10. 是否可以将Alexa技巧翻译成Android应用程序?
- 11. 我可以将MathJax集成到Python程序中吗?
- 12. .NET 4.0程序集可以用于.Net 3.5应用程序吗?
- 13. 让TeamCity将Subversion版本号集成到程序集版本
- 14. .NET程序集如何将引用“翻译”为文件路径?
- 15. 在较新的.NET版本中运行的旧.NET版本中编译的程序集会改变行为吗?
- 16. 在已编译的.NET程序集中更改程序集版本
- 17. 我可以调试编译的程序集吗?
- 18. 可以像编译.NET程序集一样的jar文件进行版本化吗?
- 19. 如何将日期翻译成星期名称
- 20. 将Java代码翻译成ARM程序集?
- 21. 将可可翻译成可可 -
- 22. 获取.NET程序集的日期
- 23. 我可以将DateTimePicker日期和文本框“时间”插入日期时间吗?
- 24. Android 2.3 SDK可以交叉编译到早期版本吗?
- 25. 我如何指出多个版本的相关程序集可以吗?
- 26. 使用版本化的.Net程序集
- 27. 我们可以将Web邮件与我们的应用程序集成吗?
- 28. 我们可以将IMDB与我们的tvOS应用程序集成吗?
- 29. 我可以将微软镜头集成到我的应用程序中吗?
- 30. 我可以在SDL TRIDION 2011中获得以前版本的发布日期吗?
蜱? '新的日期时间(长蜱)' – 2009-11-19 22:23:48
你能举一个你的意思吗? – CesarGon 2009-11-19 22:24:12
你从哪里知道* gtes与当前日期/时间有关? – David 2009-11-19 22:24:26