获取.NET程序集的date

我怎样才能从当前的.NET程序集检索创builddate?

我想添加一些真正简单的function,我的应用程序在主程序集的生成date后一周停止工作。 我已经写了在给定date后杀死我的应用程序的代码。 我只需要以编程方式从程序集中检索创builddate。

我不认为程序集本身包含它的创builddate。 我怀疑你能得到的最接近的是程序集文件本身的创builddate:

File.GetCreationTime(Assembly.GetExecutingAssembly().Location) 

应该做的伎俩。

编辑:

我认为杰夫·阿特伍德(Jeff Atwood)的解决scheme,在这个主题中用“手榴弹”写成,现在可能是更好的select。

以下是基于: https : //blog.codinghorror.com/determining-build-date-the-hard-way/

 public static class ApplicationInformation { /// <summary> /// Gets the executing assembly. /// </summary> /// <value>The executing assembly.</value> public static System.Reflection.Assembly ExecutingAssembly { get { return executingAssembly ?? (executingAssembly = System.Reflection.Assembly.GetExecutingAssembly()); } } private static System.Reflection.Assembly executingAssembly; /// <summary> /// Gets the executing assembly version. /// </summary> /// <value>The executing assembly version.</value> public static System.Version ExecutingAssemblyVersion { get { return executingAssemblyVersion ?? (executingAssemblyVersion = ExecutingAssembly.GetName().Version); } } private static System.Version executingAssemblyVersion; /// <summary> /// Gets the compile date of the currently executing assembly. /// </summary> /// <value>The compile date.</value> public static System.DateTime CompileDate { get { if (!compileDate.HasValue) compileDate = RetrieveLinkerTimestamp(ExecutingAssembly.Location); return compileDate ?? new System.DateTime(); } } private static System.DateTime? compileDate; /// <summary> /// Retrieves the linker timestamp. /// </summary> /// <param name="filePath">The file path.</param> /// <returns></returns> /// <remarks>http://www.codinghorror.com/blog/2005/04/determining-build-date-the-hard-way.html</remarks> private static System.DateTime RetrieveLinkerTimestamp(string filePath) { const int peHeaderOffset = 60; const int linkerTimestampOffset = 8; var b = new byte[2048]; System.IO.FileStream s = null; try { s = new System.IO.FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); s.Read(b, 0, 2048); } finally { if(s != null) s.Close(); } var dt = new System.DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(System.BitConverter.ToInt32(b, System.BitConverter.ToInt32(b, peHeaderOffset) + linkerTimestampOffset)); return dt.AddHours(System.TimeZone.CurrentTimeZone.GetUtcOffset(dt).Hours); } } 

有什么问题:

 System.IO.File.GetLastWriteTime(Assembly.GetExecutingAssembly().Location); 

也许这个编码恐怖的post可能会有所帮助

这应该工作:

 var entryAssembly = Assembly.GetEntryAssembly(); var fileInfo = new FileInfo(entryAssembly.Location); var buildDate = fileInfo.LastWriteTime; 

做到这一点的最好方法是使用在程序集的PreBuild上设置的自定义属性。

然后使用标准reflection来获取您创build的属性。

但出于好奇,为什么在构builddate之后杀死应用程序呢?

如果使用紧凑框架为移动设备编写应用程序,Assembly.Location不可用。

在这里 ,我find了一个select:

  System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)