30

我有一个 asp.net Web 应用程序,它有多个版本部署在其网络内的不同客户服务器上。我们的一种做法是让客户在遇到问题时通过电子邮件发送屏幕截图。

在旧的 asp.net 1.1 时代,我们可以使用反射获取构建 DLL 的详细信息,并在屏幕上一个微妙的位置显示有关构建日期和编号的信息。

在 .NET 2.0 及更高版本中,构建模型发生了变化,这种机制不再有效。我听说过不同的构建系统,但我真的在寻找最简单的方法,在 3.5 框架上,来完成这个功能在框架 1.1 上所做的事情。

  1. 每次执行构建时,更新构建日期/时间,并以某种方式更新构建号
  2. 能够看到构建时间戳和编号,显示在屏幕上
  3. 尽可能简单地实现
4

4 回答 4

40

我选择只使用执行程序集的日期。我发布文件的方式,这很好用。

lblVersion.Text = String.Format("Version: {0}<br>Dated: {1}",
    System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(),
    System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToShortDateString());
于 2009-03-24T13:30:38.047 回答
18

我们正在使用 .Net 2.0 并从程序集中提取版本信息。也许并不理想,但我们使用描述来存储构建日期。

Assembly assembly = Assembly.GetExecutingAssembly();
string version = assembly.GetName().Version.ToString();
string buildDate = ((AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(
    assembly, typeof(AssemblyDescriptionAttribute))).Description;

构建过程使用 asminfo nant 任务来生成包含此信息的 AssemblyInfo.cs 文件。

    <asminfo output="Properties\AssemblyInfo.cs" language="CSharp">
        <imports>
            <import namespace="System" />
            <import namespace="System.Reflection" />
            <import namespace="System.Runtime.CompilerServices" />
            <import namespace="System.Runtime.InteropServices" />
        </imports>
        <attributes>
            <attribute type="AssemblyVersionAttribute" value="${assembly.version}" />
            <attribute type="AssemblyInformationalVersionAttribute" value="${assembly.version}" />
            <attribute type="AssemblyDescriptionAttribute" value="${datetime::now()}" />
            ...
        </attributes>
    </asminfo>
于 2008-11-27T17:16:56.667 回答
18

我正在使用 .NET 2.0 和 3.5,它能够设置构建号和构建日期。虽然帮助面板说如果还让 .NET 设置它,它将使用随机数进行修订,这不是真的,它实际上放置了可以轻松提取的日期/时间信息,这已由在线文档确认:http: //msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx

请参阅此博客: http ://dotnetfreak.co.uk/blog/archive/2004/07/08/determining-the-build-date-of-an-assembly.aspx?CommentPosted=true#commentmessage

我想自己设置构建版本,但仍然想要自动日期/时间戳,所以我对 AssemblyVersion("1.0.*") 使用类似的东西

这是一个提取构建日期/时间的示例函数

private System.DateTime BuildDate()
{

//This ONLY works if the assembly was built using VS.NET and the assembly version attribute is set to something like the below. The asterisk (*) is the important part, as if present, VS.NET generates both the build and revision numbers automatically.
//<Assembly: AssemblyVersion("1.0.*")> 
//Note for app the version is set by opening the 'My Project' file and clicking on the 'assembly information' button. 
//An alternative method is to simply read the last time the file was written, using something similar to:
//Return System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly.Location)

//Build dates start from 01/01/2000

System.DateTime result = DateTime.Parse("1/1/2000");

//Retrieve the version information from the assembly from which this code is being executed

System.Version version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

//Add the number of days (build)

result = result.AddDays(version.Build);

//Add the number of seconds since midnight (revision) multiplied by 2

result = result.AddSeconds(version.Revision * 2);

//If we're currently in daylight saving time add an extra hour

if (TimeZone.IsDaylightSavingTime(System.DateTime.Now, TimeZone.CurrentTimeZone.GetDaylightChanges(System.DateTime.Now.Year)))
{
    result = result.AddHours(1);
}

return result;

}
于 2008-12-19T18:31:34.757 回答
7

您可以通过反射获得装配构建日期,请查看以下示例:

于 2008-11-27T17:15:58.230 回答