加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何从C#中的预编译器获取当前的DateTime?

发布时间:2020-12-15 18:04:27 所属栏目:百科 来源:网络整理
导读:在C#3.0中,我有一个属性,假设包含该类的版本.版本号只是编译的日期和时间.现在,我有以下代码: public DateTime Version{ get { return DateTime.UtcNow; }} 显然,这是错误的,因为此属性返回当前日期和时间.那么,预编译器是否可以在编译时打印DateTime?在这
在C#3.0中,我有一个属性,假设包含该类的版本.版本号只是编译的日期和时间.现在,我有以下代码:
public DateTime Version
{
    get { return DateTime.UtcNow; }
}

显然,这是错误的,因为此属性返回当前日期和时间.那么,预编译器是否可以在编译时打印DateTime?在这种情况下,我可以做类似于下面的事情.

public DateTime Version
{
    get { return new DateTime("PRECOMPILER DATE"); }
}

解决方法

C#没有宏的概念;但是,您可以在构建脚本(csproj / NANT / etc)中使用其他工具在编译之前操作源代码.例如,我使用它将修订号设置为当前的SVN修订版.

一个廉价的选项是预构建事件(你可以通过VS中的项目属性对话框来实现):本质上是一个在构建之前运行的bat文件;然后,您可以编写所需的任何更改.更复杂的选项是构建任务.

例如,实用程序库here包括Time任务和FileUpdate任务;它(理论上)应该可以将两者联系起来以模仿你需要的东西.

就个人而言,我会使用[AssemblyVersion]的详细信息而不是时间 – 如果将其链接到源控制系统,这样就很容易找到有问题的版本;所以对于我的SVN版本,我然后使用(在我的构建项目中):

<!-- See http://msbuildtasks.tigris.org -->
<Import Project="$(MSBuildExtensionsPath)MSBuildCommunityTasksMSBuild.Community.Tasks.Targets"/>
...
<SvnInfo LocalPath=".">
  <Output TaskParameter="Revision" PropertyName="BuildRev" />
</SvnInfo>
...
<FileUpdate Files="PathToMyAssemblyInfo.cs"
    Regex='([s*assembly:s*AssemblyVersion(s*"[^.]+.[^.]+).([^.]+)(.)([^.]+)(")s*])'
    ReplacementText='$1.$2.$(BuildRev)$5' />
<FileUpdate Files="PathToMyAssemblyInfo.cs"
    Regex='([s*assembly:s*AssemblyFileVersion(s*"[^.]+.[^.]+).([^.]+)(.)([^.]+)(")s*])'
    ReplacementText='$1.$2.$(BuildRev)$5' />

现在我的汇编版本是正确的,包括操作系统报告的文件版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读