diff --git a/SabreTools.Helper/Data/Build.cs b/SabreTools.Helper/Data/Build.cs
index 878c022d..3ddf266a 100644
--- a/SabreTools.Helper/Data/Build.cs
+++ b/SabreTools.Helper/Data/Build.cs
@@ -40,7 +40,7 @@ namespace SabreTools.Helper.Data
Console.BackgroundColor = ConsoleColor.Blue;
}
- Console.Title = "SabreTools-" + name + " " + Constants.Version;
+ Console.Title = name + " " + Constants.Version;
// Output the header
Console.WriteLine(border);
diff --git a/SabreTools.Helper/Data/Constants.cs b/SabreTools.Helper/Data/Constants.cs
index 650f3846..50ae9e26 100644
--- a/SabreTools.Helper/Data/Constants.cs
+++ b/SabreTools.Helper/Data/Constants.cs
@@ -1,4 +1,7 @@
using System;
+using System.Reflection;
+
+using SabreTools.Helper.Tools;
namespace SabreTools.Helper.Data
{
@@ -7,7 +10,7 @@ namespace SabreTools.Helper.Data
///
/// The current toolset version to be used by all child applications
///
- public const string Version = "v0.9.3";
+ public static string Version = "v0.9.3-" + Assembly.GetExecutingAssembly().GetLinkerTime().ToString("yyyy-MM-dd HH:mm:ss");
public const int HeaderHeight = 3;
#region 0-byte file constants
diff --git a/SabreTools.Helper/Tools/Style.cs b/SabreTools.Helper/Tools/Style.cs
index 66812eba..be1e4a77 100644
--- a/SabreTools.Helper/Tools/Style.cs
+++ b/SabreTools.Helper/Tools/Style.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
@@ -575,6 +576,32 @@ namespace SabreTools.Helper.Tools
return Encoding.Default;
}
+ ///
+ /// http://stackoverflow.com/questions/1600962/displaying-the-build-date
+ ///
+ public static DateTime GetLinkerTime(this Assembly assembly, TimeZoneInfo target = null)
+ {
+ var filePath = assembly.Location;
+ const int c_PeHeaderOffset = 60;
+ const int c_LinkerTimestampOffset = 8;
+
+ var buffer = new byte[2048];
+
+ using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
+ stream.Read(buffer, 0, 2048);
+
+ var offset = BitConverter.ToInt32(buffer, c_PeHeaderOffset);
+ var secondsSince1970 = BitConverter.ToInt32(buffer, offset + c_LinkerTimestampOffset);
+ var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+
+ var linkTimeUtc = epoch.AddSeconds(secondsSince1970);
+
+ var tz = target ?? TimeZoneInfo.Local;
+ var localTime = TimeZoneInfo.ConvertTimeFromUtc(linkTimeUtc, tz);
+
+ return localTime;
+ }
+
#endregion
}
}