代码之家  ›  专栏  ›  技术社区  ›  rahularyansharma

相当于C中的_u日期_;、_时间_u宏#

  •  13
  • rahularyansharma  · 技术社区  · 17 年前

    是否有一个相当于 __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 回复  |  直到 17 年前
        1
  •  4
  •   Tim Booker    17 年前

    我建议自定义构建脚本,将日期时间写入文件。这个 MSBuild Community Tasks project有一个时间任务,可以完全用于此任务。

        2
  •  3
  •   A876 ahmar    9 年前

    简短答复: 不 . 没有对等的标准。他们漏掉了。太糟糕了。开你玩笑。

    有一些几乎相当于 变通办法 ,都是基于程序本身的检查。没有一个是理性的、优雅的或坚定的。

    一些解决方案从“AssemblyVersion”中提取编译日期和时间,这是一个由四个UInt16字段(“主版本”、“次版本”、“构建编号”和“修订版”)组成的结构,可以 不保证包含日期和时间 ,更不用说具体的格式了。如果将AssemblyVersion设置为“a.b.*”(并且没有人对其进行更改),则编译器会将其重写为a.b.c.d,其中c==天,d*2==秒,自2000年1月1日00:00(本地时间,但不考虑夏令时)开始,此时它会解析AssemblyInfo.cs。它们被编译到程序中,可以通过System.Reflection.Assembly.GetExecutionGassembly().GetName().Version访问。

    其他解决方案让可执行文件进入文件系统,以获取其“上次修改”的日期和时间 ,通过FAT、CDFS或带有DST或时区更改的FTP传输、完全丢弃元数据的惰性FTP服务器或根据请求更改元数据的文件实用程序,很容易更改或损坏。可怜的。

    火车在哪里 编译器常量 (或常量),可以称为“现在”(或“年”、“月”、“日”等),可以在表达式中使用,也可以指定给常量或只读?Code Deor C、GCC、MS C和MS C++给出标准的预定义宏指令 __DATE__ __TIME__ ,它可以像编译时字符串常量一样使用。这似乎是C#的一个明显的遗漏,让每个人都浪费了数年的时间去询问和建立工作环境。新语言,新代码,可怜的摇摇晃晃的设计。C#没有宏。C#的define仅具有“defined”或“undefined”。那又怎么样?我认为没有理由删除重要的编译时常量。把它放到C#的伪pro处理器里怎么样?

    “简单托管C”/“类似C的面向对象语言”、CIL和CLR已有17年的历史,这就是它吗?有一百万种编写代码的方法没有做到它所说的(线程的实现)?暴露“底层方法”所有缺陷的库?你必须瞄准其中一个(或两个) 两个独立的虚拟机 :32位虚拟机用于32位硬件(或模拟器)和64位虚拟机用于64位硬件(仅限)-这有什么虚拟性?Java只编译一次 一 虚拟机,当然每个平台都有单独的实现(32或64)。

        3
  •  2
  •   jrista    17 年前

    如果您试图自动生成版本号和修订号,我将研究CodePlex上的以下项目:

    http://autobuildversion.codeplex.com/

        4
  •  1
  •   Chris Chilvers    17 年前

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

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

        5
  •  0
  •   Charlie Skilbeck    16 年前

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

                // 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;
    
        6
  •  0
  •   OneGuyInDc    14 年前

    日期