2009-07-09 4 views
4

Ich habe eine C# WinForms App mit einem About-Feld. Ich stelle die Versionsnummer in der Info-Box mit:Put-Build-Datum in etwa Box

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

Dies endet mit mir die Subversion-Revisionsnummer zu geben, aus dem die ausführbaren Datei erstellt wurde.

Ich möchte auch das Datum des Build in die About-Box bekommen. Ich habe versucht:

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

Aber das gibt mir das Schreibdatum der ausführbaren Datei, die das Datum entspricht nur dann, wenn die App war installiert (wir verwenden Clickonce) nicht gebaut. Wie kann ich das Erstellungsdatum bekommen?

Antwort

5

Wenn Sie die automatische Versionierung verwenden, können Sie die letzten beiden Bits der Versionsnummer in ein Build-Datum konvertieren: MSDN

+0

Geben Sie Ihrer Versionsnummer ein datumsbasiertes System, das durch Ihre fortlaufende Integration festgelegt wurde, und analysieren Sie es für das Datum. – DevelopingChris

+0

Msbuild/Visual Studio wird dies für Sie tun, lesen Sie das erste Bit des verknüpften Artikels. –

0

Der einzige Weg, ich in der Lage war es in C/C++ zu tun war, um tatsächlich einen Beitrag -build-Prozess sucht und ersetzt eine spezielle Zeichenfolge, die in der Binärdatei als "statisches const" zugewiesen ist.

Es könnte einen leichteren Weg in C# obwohl.

1

Sie könnten Ihre Assemblyversion ändern, um das Datum zu codieren, aber das würde wahrscheinlich bedeuten, dass Sie Ihre Subversionsrevisionsinformation verlieren, die wohl nützlicher ist.

Dies sollte funktionieren: Schreiben Sie das aktuelle Datum/Zeit in eine CS-Datei als Pre-Build-Task wie folgt:

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

Sie eine Batch-Datei verwenden können, Powershell-Skript oder eine ausführbare dafür.

Fügen Sie die Datei in Ihrem Projekt (Aktion bauen: kompilieren) und schließen Sie das benutzerdefinierte Attribut:

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

Auf Antrag starten Sie Reflexion erhalten das benutzerdefinierte Attribut aus der Baugruppe für die Anzeige in der About-Seite verwenden können .

+0

Großartiges und klares Beispiel, es folgt jetzt, der einzige fehlende Teil ist, wie Reflektion verwendet wird, um ein benutzerdefiniertes Attribut zu extrahieren! :) –

0

Ich glaube nicht, dass eine Standardmethode existiert, aber Sie können selbst etwas aufrollen. Erstellen Sie ein benutzerdefiniertes Attribut auf Baugruppenebene, geben Sie ihm einen coolen Namen wie 'AssemblyDateAttribute'. Lassen Sie es eine Zeichenfolge nehmen, die Sie in einem DateTime im Konstruktor analysieren können, auf den über eine Eigenschaft zugegriffen werden kann.

Erstellen Sie als Teil eines Erstellungsprozesses eine neue Datei, bei der nur das Attribut auf die Assembly angewendet wird. (Lassen Sie es wie AssemblyInfo.cs aussehen), und fügen Sie das dann in Ihre Build-Eingabe ein.

Suchen Sie in Ihrer About-Box Ihre Assembly nach Instanzen dieses Attributs und zeigen Sie den Datumswert in Ihrer Box an.

2

Wir verwenden diese sehr ähnlich Stück Code:

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

und ich bin mir ziemlich sicher, dass es ändert sich nicht, wenn sie von Clickonce-Installation .. Wenn ich falsch bitte korrigieren Sie mich!

+0

Gibt es in ClickOnce eine Einstellung, um sicherzustellen, dass die Dateidaten bei jeder Installation nicht aktualisiert werden? – JoelFan

+0

In meinem Fall aktualisiert ClickOnce nur die Dateidaten für die .exe- und .dll-Dateien meines Projekts. Die 3rd-Party-DLLs haben ältere Daten. – JoelFan

+0

Ich habe mich gerade daran erinnert, dass ich hier den Code http: // stackoverflow habe .com/questions/613700/how-to-put-the-build-Datum der Anwendung-irgendwo-in-der-Anwendung – Oskar

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

Von meiner eigenen C# code.

+0

wo ist das Datum? – JoelFan

0

In Visual Studio-Projekten gibt es eine Datei AssemblyInfo.cs, aber Sie können jede andere .cs-Datei verwenden. Schauen Sie sich das Attribut Assembly:

// 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.*")] 

Jetzt können Sie das Erstellungsdatum berechnen, indem Sie mit der Version.Build Eigenschaft. Der Wert, den Version.Build zurückgibt, ist die Anzahl der Tage seit: 2000/1/1