2008-11-27 8 views
23

Tengo una aplicación web asp.net que tiene varias versiones implementadas en diferentes servidores de clientes dentro de sus redes. Una práctica que tenemos es hacer que los clientes envíen capturas de pantalla por correo electrónico cuando tienen problemas.ASP.NET - mostrar la fecha/información de compilación de la aplicación en la parte inferior de la pantalla

En el antiguo asp.net 1.1 días, podíamos obtener detalles de la DLL de compilación, usando la reflexión, y mostrar información sobre la fecha de compilación y la numeración en una ubicación sutil.

Con .NET 2.0 y superior, el modelo de construcción ha cambiado, y este mecanismo ya no funciona. He oído hablar de diferentes sistemas de compilación, pero realmente estoy buscando la forma más simple, en el marco 3.5, de hacer lo que esta funcionalidad hizo en el marco 1.1.

  1. Cada vez que se realiza una construcción, actualizar la fecha de creación/hora, y de alguna manera actualizar el número de compilación
  2. ser capaz de ver la marca de tiempo de compilación y número, para mostrar en la pantalla
  3. ser tan simple para poner en práctica como sea posible
+0

http://stackoverflow.com/questions/1168279/asp-net-version-build-number/1168329#1168329 – Saber

Respuesta

17

Estamos utilizando .Net 2.0 y tire de la información de la versión de la asamblea. Quizás no sea ideal, pero usamos la descripción para almacenar la fecha de compilación.

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

El proceso de generación utiliza asminfo tarea nante para generar el archivo AssemblyInfo.cs que contiene esta información.

<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> 
+0

Ese es exactamente el tipo de solución que estaba buscando. Buena forma. – pearcewg

+1

Tenía un código muy similar a esto, terminé arrojándolo a un control personalizado, así que puedes arrastrarlo y soltarlo :) –

7

Usted puede obtener la fecha de la Asamblea Construir través de la reflexión, comprobar estos ejemplos:

+1

"Determinación Fecha de compilación de la manera difícil" funciona para mí. – zsong

+0

Buen hallazgo con la solución Coding Horror: definitivamente no me gusta la solución predeterminada que se basa en la versión de ensamblaje que sigue a major.minor. *.0 patrón, como siempre configuro la versión de ensamblaje en major.minor.0.0 y la versión del archivo de ensamblaje en major.minor.build.revision, para que pueda reparar fácilmente los ensamblajes. Leer la marca de tiempo del enlazador es muy astuto. + 1s todo el año! –

16

Estoy usando .NET 2.0 y 3.5 y es capaz de establecer tanto el número de compilación como la fecha de compilación. Mientras que el panel de ayuda dice que si aún lo dejé .NET, usará un número aleatorio para la revisión, eso no es cierto, en realidad pone información de fecha/hora que se puede extraer fácilmente, lo cual es confirmado por los documentos en línea. : http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx

Ver este blog: http://dotnetfreak.co.uk/blog/archive/2004/07/08/determining-the-build-date-of-an-assembly.aspx?CommentPosted=true#commentmessage

Quiero configurar la versión de compilación mí mismo, pero todavía quiero el sello automático de fecha/hora, así que usar algo como esto para el AssemblyVersion ("1.0 *.")

Aquí hay una función de muestra para extraer la fecha/hora de compilación

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; 

} 
+0

Esto es muy útil y no requiere nada más que un cambio rápido en el AssemblyInfo .cs! :-) – Filip

33

Elegí simplemente usar la fecha del ensamblaje de ejecución. La forma en que publico los archivos, esto funciona bien.

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()); 
+0

Utilizo un número de compilación en aumento, por lo que no puedo usar ninguno de esos "segundos" de magia púrpura que algunas publicaciones usan con los números de versión. –

Cuestiones relacionadas