2009-07-09 41 views
4

我有一个关于框的C#WinForms应用程序。我正在使用的版本号大约在框中:把生成日期放在框中

FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location) 
    .FileVersion 

这最终会给我Subversion版本号,从中可执行文件构建。

我还想将日期的构建放入About框。我想:

File.GetLastWriteTime(Assembly.GetEntryAssembly().Location) 

但是,这给我的可执行文件,仅对应于当应用程序被安装日期(我们使用ClickOnce)不的写入日期。如何获取生成日期

回答

5

如果使用自动版本,您可以将版本号的最后两位转换成构建日期:MSDN

+0

使您的版本号成为基于日期的系统,通过持续集成设置,并在日期解析回来。 – DevelopingChris 2009-07-09 15:00:53

+0

msbuild/visual studio会为你做这件事,阅读链接文章的第一位。 – 2009-07-09 15:06:18

0

我能做到这一点在C/C++的唯一途径是实际上有一个职位-build进程在二进制文件中执行搜索并替换分配为“静态常量”的特殊字符串。

虽然在c#中可能有一个更简单的方法。

1

你可以改变你的程序集版本来编码日期,但这可能意味着失去你可以证明更有用的subversion版本信息。

这应该工作:写当前的日期/时间为cs文件作为预生成的任务,像这样:

[assembly: AssemblyCreated(CreatedDate = new DateTime(...))] 

你可以使用一个批处理文件,PowerShell脚本或可执行为。

包括文件在您的项目(建设行动:编译),包括自定义属性:

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)] 
public sealed class AssemblyCreatedAttribute : Attribute 
{ 
    public DateTime CreatedDate { get; set; } 
} 

在应用程序启动,你可以使用反射来获得从组件用于显示自定义属性在关于页面。

+0

伟大而明确的例子,在它之后,唯一缺少的部分是如何使用反射来提取自定义属性! :) – 2013-01-24 12:59:14

0

我不认为有这样做的标准方式,但你可以自己卷起一些东西。创建一个自定义的程序集级属性,给它一个很酷的名字,如'AssemblyDateAttribute'。让它接受一个字符串,您可以在可通过属性访问的构造函数中解析DateTime。

作为构建过程的一部分,创建一个只有属性应用于程序集的新文件。 (使其看起来像AssemblyInfo.cs),然后将其包含在您的构建输入中。

然后在您的关于框中,搜索您的程序集以获取此属性的实例,并在框中显示日期值。

2

我们使用这个非常相似的代码:

DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime; 

,我敢肯定,从ClickOnce的安装时,它不会改变。如果我错了,请大家指正!

+0

ClickOnce中是否有一个设置来确保它不会更新每次安装的文件日期? – JoelFan 2009-07-09 15:36:42

-1
Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

来自我自己的C#code

0

在Visual Studio项目中有一个文件AssemblyInfo.cs,但您可以使用任何其他.cs文件。再看属性的AssemblyVersion:

// Version information for an assembly consists of the following four values: 
// 
//  Major Version 
//  Minor Version 
//  Build Number 
//  Revision 
// 
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below: 
// [assembly: AssemblyVersion("1.0.*")] 
[assembly: AssemblyVersion("2.0.*")] 

现在,您可以通过使用Version.Build属性计算构建日期。 Version.Build返回的值是以来的天数:2000/1/1