我有一个带有关于框的C#WinForms应用程序。我使用以下方法将版本号放在about框中:
FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location)
.FileVersion
这最终给了我构建可执行文件的Subversion版本号。
我还希望将构建的日期放入“关于”框中。我试过了:
File.GetLastWriteTime(Assembly.GetEntryAssembly().Location)
但是这给了我可执行文件的写入日期,它只对应于应用安装的日期(我们使用的是ClickOnce)而不是已构建。
如何获得构建日期?
答案 0 :(得分:5)
如果您使用自动版本控制,则可以将版本号的最后两位转换为构建日期:MSDN
答案 1 :(得分:2)
我们正在使用这段非常类似的代码:
DateTime buildDate = new FileInfo(Assembly.GetExecutingAssembly().Location).LastWriteTime;
我很确定从ClickOnce安装时它不会改变。如果我错了请纠正我!
答案 2 :(得分:1)
您可以更改程序集版本控制以对日期进行编码,但这可能意味着丢失可能更有用的颠覆修订信息。
这应该有效:将当前日期/时间写入.cs文件作为预构建任务,如下所示:
[assembly: AssemblyCreated(CreatedDate = new DateTime(...))]
您可以使用批处理文件,PowerShell脚本或可执行文件。
在项目中包含该文件(构建操作:编译)并包含自定义属性:
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]
public sealed class AssemblyCreatedAttribute : Attribute
{
public DateTime CreatedDate { get; set; }
}
在应用程序启动时,您可以使用反射从程序集中获取自定义属性,以便在about页面中显示。
答案 3 :(得分:0)
我能用C / C ++做的唯一方法就是实际上有一个后期构建过程来搜索和替换在二进制文件中分配为“静态const”的特殊字符串。
在c#中可能有一种更简单的方法。
答案 4 :(得分:0)
我认为不存在标准的做法,但你可以自己动手。创建一个自定义程序集级属性,给它一个很酷的名字,如'AssemblyDateAttribute'。让它采用一个字符串,你可以解析为可以通过属性访问的构造函数中的DateTime。
作为构建过程的一部分,创建一个仅包含应用于程序集的属性的新文件。 (使其看起来像AssemblyInfo.cs),然后将其包含在您的构建输入中。
然后在您的“约”框中,搜索程序集以查找此属性的实例,并在框中显示日期值。
答案 5 :(得分: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以来的天数
答案 6 :(得分:-1)
Assembly.GetExecutingAssembly().GetName().Version.ToString();
来自我自己的C#code。