C# 向代码中添加编译日期

C# 向代码中添加编译日期,c#,.net,C#,.net,我需要在代码中以某种方式硬编码编译日期 我怎么能做那件事 感谢源代码管理还是持续集成构建服务器?不完全是编译时和代码,但它会获得提交时间和构建编号。您可以在需要这样的元信息的任何地方生成代码 <#@ assembly name="System.Core.dll" #> <#@ template language="C#v3.5" debug="True" hostspecific="True" #> <#@ output extension=".cs" #>

我需要在代码中以某种方式硬编码编译日期

我怎么能做那件事


感谢

源代码管理还是持续集成构建服务器?不完全是编译时和代码,但它会获得提交时间和构建编号。

您可以在需要这样的元信息的任何地方生成代码

<#@ assembly name="System.Core.dll" #>
<#@ template language="C#v3.5" debug="True" hostspecific="True"  #>
<#@ output extension=".cs" #>
using System;

namespace MyNamespace
{
    public class MyClass
    {
        // <#= DateTime.Now.ToString() #>
    }
}

您可能需要在每个版本上运行T4编译器。

该语言中可能没有类似的版本,但您可能会发现以下链接很有帮助。

在我的大多数项目中,我都使用函数“RetrieveLinkerTimestamp”

        public DateTime RetrieveLinkerTimestamp(string filePath)
    {
        const int PeHeaderOffset = 60;
        const int LinkerTimestampOffset = 8;

        byte[] b = new byte[2048];
        Stream s = Stream.Null;
        try
        {
            s = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            s.Read(b, 0, 2048);
        }
        finally
        {
            if ((s != null)) s.Close();
        }

        int i = BitConverter.ToInt32(b, PeHeaderOffset);

        int SecondsSince1970 = BitConverter.ToInt32(b, i + LinkerTimestampOffset);
        DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0);
        dt = dt.AddSeconds(SecondsSince1970);
        dt = dt.AddHours(TimeZone.CurrentTimeZone.GetUtcOffset(dt).Hours);
        return dt;
    }
也许这有帮助

干杯


Christian

你是说从代码中读出我结账的日期吗?听起来有点奇怪。我用System.Reflection.Assembly.GetExecutionGassembly().Location调用了它,它工作得非常好
        public DateTime RetrieveLinkerTimestamp(string filePath)
    {
        const int PeHeaderOffset = 60;
        const int LinkerTimestampOffset = 8;

        byte[] b = new byte[2048];
        Stream s = Stream.Null;
        try
        {
            s = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            s.Read(b, 0, 2048);
        }
        finally
        {
            if ((s != null)) s.Close();
        }

        int i = BitConverter.ToInt32(b, PeHeaderOffset);

        int SecondsSince1970 = BitConverter.ToInt32(b, i + LinkerTimestampOffset);
        DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0);
        dt = dt.AddSeconds(SecondsSince1970);
        dt = dt.AddHours(TimeZone.CurrentTimeZone.GetUtcOffset(dt).Hours);
        return dt;
    }