2008-11-27 19 views
23

Ho un'applicazione web asp.net che ha un numero di versioni distribuite su diversi server clienti all'interno delle loro reti. Una pratica che abbiamo è di avere schermate email dei clienti quando hanno problemi.ASP.NET - mostra la data di creazione dell'applicazione/informazioni nella parte inferiore dello schermo

Nei vecchi asp.net 1,1 giorni, è possibile ottenere i dettagli della DLL di compilazione, utilizzando la riflessione e visualizzare informazioni sulla data di creazione e sulla numerazione sullo schermo in una posizione sottile.

Con .NET 2.0 e versioni successive, il modello di build è stato modificato e questo meccanismo non funziona più. Ho sentito parlare di diversi sistemi di compilazione, ma sono davvero alla ricerca del modo più semplice, nel framework 3.5, per fare ciò che questa funzionalità ha fatto sul framework 1.1.

  1. Ogni volta che viene eseguita una generazione, aggiornare la data di compilazione/ora, e in qualche modo aggiornare il numero di build
  2. Essere in grado di vedere il timestamp di build e il numero, per visualizzare sullo schermo
  3. essere semplice per implementare il più possibile
+0

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

risposta

17

Stiamo utilizzando .Net 2.0 e tirare le informazioni sulla versione fuori dal gruppo. Forse non è l'ideale, ma usiamo la descrizione per memorizzare la data di costruzione.

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

Il processo di generazione utilizza un'attività asimmetrica per generare il file AssemblyInfo.cs che contiene queste informazioni.

<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

Questo è esattamente il tipo di soluzione che stavo cercando. Buona forma – pearcewg

+1

Avevo un codice molto simile a questo, ho finito per buttarlo in un controllo personalizzato in modo da poterlo trascinare e rilasciare :) –

7

È possibile ottenere la data dell'Assemblea Costruire attraverso la riflessione, controllare questi esempi:

+1

"Determinazione Data Costruire nel modo più duro" funziona per me. – zsong

+0

Bella scoperta con la soluzione Coding Horror - Non mi piace assolutamente la soluzione predefinita che si basa sulla versione dell'assembly successiva a major.minor. *.0, in quanto ho sempre impostato la versione di assembly su major.minor.0.0 e la versione del file di assemblaggio su major.minor.build.revision, in modo da poter facilmente aggiornare gli assembly. La lettura del timestamp del linker è molto astuta. + 1s a tutto tondo! –

16

Utilizzo .NET 2.0 e 3.5 ed è in grado di impostare sia il numero di build che la data di compilazione. Mentre il pannello della guida dice che se ancora lo lascia impostato, userà un numero casuale per la revisione, che non è vero, in realtà mette informazioni sulla data/ora che possono essere facilmente estratte, il che è confermato dai documenti online : http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.assemblyversionattribute.aspx

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

voglio impostare la versione build me, ma voglio ancora il timbro automatico di data/ora per cui uso qualcosa di simile per il AssemblyVersion ("1.0 *.")

Ecco una funzione di esempio per estrarre la data/ora di creazione

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

Questo è molto utile e non richiede altro che una rapida modifica nell'AssemblyInfo cs! :-) – Filip

33

Ho scelto di utilizzare solo la data dell'assembly in esecuzione. Il modo in cui pubblico i file, funziona perfettamente.

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

Io uso un numero di build incrementale, quindi non posso usare nessuno di quei "numeri di secondi"-purple-magic che alcuni post usano con i numeri di versione. –

Problemi correlati