相当于C#中的__DATE __,__ TIMME__宏

时间:2009-08-20 22:24:28

标签: c# datetime

C#中是否有__DATE____TIME__

基本上我要做的是在C#应用程序中放置一些构建时间戳。

One possibility我在微软的网站上看到要做的事情如下:

Assembly assem = Assembly.GetExecutingAssembly();
Version vers = assem.GetName().Version;
DateTime buildDate = new DateTime(2000, 1, 1).AddDays(vers.Build).AddSeconds(vers.Revision * 2);
Console.WriteLine(vers.ToString());
Console.WriteLine(buildDate.ToString());

但是,这仅适用于AssemblyInfo.cs中的版本为“1.0。”,而我们的版本不是。

6 个答案:

答案 0 :(得分:4)

我建议您自定义构建脚本以将日期时间写入文件。 MSBuild Community Tasks项目有一个Time任务,可以用于此目的。

答案 1 :(得分:2)

如果您尝试自动生成构建版本和修订版本号,我会在CodePlex上查看以下项目:

http://autobuildversion.codeplex.com/

答案 2 :(得分:2)

简短回答: 。没有等价物。他们把它留了出来。太糟糕了。对你说笑话。

有一些接近等效的解决方法,所有这些都基于程序检查本身。没有一个是理性的,优雅的或坚固的。

有些解决方案从" AssemblyVersion"中获取编译日期+时间,这是四个UInt16字段的结构("主要版本","次要版本",& #34;内部版本编号"和"修订版")不保证包含日期和时间,更不用说特定格式了。如果将AssemblyVersion设置为" a.b。*" (并且没有人改变它),然后编译器将其覆盖为abcd,其中c == days和d * 2 ==秒自2000年1月1日00:00(当地时间,但忽略夏令时),at它解析AssemblyInfo.cs的那一刻。这些可以编译到程序中,可以通过System.Reflection.Assembly.GetExecutingAssembly()。GetName()。Version。

进行访问。

其他解决方案将可执行文件放到文件系统中以获取其最后修改的"日期+时间来自其自己的元数据,通过DST或时区更改通过FAT,CDFS或FTP传输,直接丢弃元数据的懒惰FTP服务器或文件实用程序很容易更改或损坏根据请求更改元数据。可怜。

编译时常量(或常量),可能称为#NOW(或#YEAR,#MONTH,#DAY等),可用于表达式或分配给const还是只读? CodeWarrior C,GCC,MS C和MS C ++提供标准的预定义宏__DATE____TIME__,它们可以像编译时字符串常量一样使用。这似乎是C#的一个明显遗漏,驱使每个人浪费人们多年来询问和设置解决方案。新语言,新代码,可怜摇摇晃晃的设计。 C#没有宏。 C#的#define只有"定义了"或"未定义"。所以呢?我认为没有理由删除重要的编译时常量。如何将它放入C#的虚假专业处理器?

17年进入"简单管理C" /"类似C语言的面向对象语言",CIL和CLR,这是什么?一百万种编写代码的方法并没有做到它所说的(线程的实现)?揭露"基础方法的每个缺陷的图书馆"?您必须定位一个(或两个)两个单独的虚拟机:一个32位VM用于32位硬件(或仿真器),一个64位VM用于64位硬件(仅限) - 那是什么虚拟的? Java只编译一次一个虚拟机,当然每个平台(32或64)都有单独的实现。

答案 3 :(得分:1)

您可以查看自定义项目.csproj文件。这只是一个普通的msbuild文件,您可以挂钩到BeforeBuild目标来生成或更新文件,也许可以将此值存储在自定义程序集级别属性中。

我认为msbuild社区任务在这里很有用,因为它们有一些有用的任务,比如文件中的令牌替换。

答案 4 :(得分:0)

丑陋,并且需要某些权限,但如果这是供内部使用的话:

            // assume the relevant using statements above...
            FileVersionInfo vi = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
            FileInfo fileInfo = new System.IO.FileInfo(vi.FileName);
            DateTime createTime = fileInfo.CreationTime;

答案 5 :(得分:0)

DateTime DATE = File.GetLastWriteTime(Application.ExecutablePath);