我想在我的代码中定义一个常量,用于保存构建可执行文件的日期。我很自然地想让这个过程自动化。
我知道我可以编写一个预编译脚本,例如使用Perl来写出一个包含日期的.inc
文件。我更喜欢使用环境变量或构建变量的更轻量级的解决方案。msbuild是否提供了任何有用的变量?有没有人知道解决这个问题的更好的办法?
发布于 2011-12-09 05:30:52
如果你使用/拥有JCL,那么jclPEImage.PeReadLinkerTimeStamp()
会做你想要的事情。旧版本的Delphi没有设置链接器时间戳,但新版本可以(即它似乎可以在D2010上工作)。
发布于 2017-05-03 15:29:38
这段代码在较新的Delphi版本中工作,结合了获取时间并将其转换为本地时间。
function GetExeBuildTime: TDateTime;
var
LI: TLoadedImage;
{$IF CompilerVersion >= 26.0}
m: TMarshaller;
{$IFEND}
timeStamp: Cardinal;
utcTime: TDateTime;
begin
{$IF CompilerVersion >= 26.0} //XE7 requires TMarshaller to convert to PAnsiChar
Win32Check(MapAndLoad(PAnsiChar(m.AsAnsi(ParamStr(0)).ToPointer), nil, @LI, False, True));
{$ELSE}
Win32Check(MapAndLoad(PAnsiChar(AnsiString(ParamStr(0))), nil, @LI, False, True));
{$IFEND}
timeStamp := LI.FileHeader.FileHeader.TimeDateStamp;
UnMapAndLoad(@LI);
utcTime := UnixToDateTime(timeStamp);
Result := TTimeZone.Local.ToLocalTime(utcTime);
end;
发布于 2011-12-09 19:22:06
我使用FinalBuilder完成所有的构建,因此很容易添加一个实用程序,该实用程序将在编译之前更新任何源文件,以搜索和修改变量或常量的定义。我用这种方式构建版本号,日期,任何有意义的东西。
https://stackoverflow.com/questions/8437300
复制相似问题