Wie finde ich die aktuelle Uhrzeit und das Datum zur Kompilierzeit in .net / C # -Anwendung?

8

Ich möchte die aktuelle Uhrzeit und das Datum in eine .net-Anwendung aufnehmen, damit ich sie in das Startprotokoll aufnehmen kann, um dem Benutzer anzuzeigen, welche Version er hat. Ist es möglich, die aktuelle Zeit während der Kompilierung abzurufen, oder müsste ich die Erstellungs- / Änderungszeit der ausführbaren Datei abrufen?

z.

  

Willkommen bei ApplicationX. Dies wurde Tag-Monat-Jahr zu Zeit erstellt.

    
Nick 09.06.2009, 17:38
quelle

7 Antworten

8

Wenn Sie Reflection für Ihre Build-Nummer verwenden, können Sie damit herausfinden, wann ein Build kompiliert wurde.

Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:

  1. Hauptversion
  2. Nebenversion
  3. Build-Nummer
  4. Überarbeitung

Sie können alle Werte angeben, oder Sie können die Standard-Build-Nummer, die Revisionsnummer oder beides unter Verwendung eines Sternchens (*) akzeptieren. Die Build-Nummer und die Version basieren standardmäßig auf dem 1. Januar 2000.

Das folgende Attribut wird Major und Minor setzen, aber Build-Nummer und Revision erhöhen.

%Vor%

Dann können Sie etwas wie folgt verwenden:

%Vor%     
Sam Trost 09.06.2009, 17:59
quelle
3

Der einzige Weg, wie ich das weiß, ist etwas verworren -

Sie können ein Pre-Build-Ereignis haben, das eine kleine Anwendung ausführt, die den Quellcode im Handumdrehen generiert. Eine einfache Möglichkeit besteht darin, eine sehr kleine Datei zu überschreiben, die eine Klasse (oder Teilklasse) enthält, wobei Tag / Monat / Jahr als String-Konstante fest codiert ist.

Wenn Sie festlegen, dass dieses Ereignis als Pre-Build-Ereignis ausgeführt werden soll, wird diese Datei vor jedem Build neu geschrieben.

    
Reed Copsey 09.06.2009 17:42
quelle
2

Sie können PostSharp verwenden, um das Datum unmittelbar nach dem Build einzuflechten. PostSharp wird mit einer leichten, aspektorientierten Programmierbibliothek geliefert, kann aber erweitert werden, um alles, was Sie brauchen, auf vielfältige Weise zu verknüpfen. Es funktioniert auf der IL-Ebene, aber die API abstrahiert Sie ein wenig davon.

Ссылка

    
jrista 09.06.2009 17:46
quelle
2

Dafür ist nichts in die Sprache eingebaut.

Sie könnten einen Pre-Build-Schritt schreiben, um das aktuelle Datum und die aktuelle Uhrzeit in eine Quelldatei zu schreiben (zB in einem String-Literal oder als Quellcode, um DateTime zu generieren) und kompilieren Sie dann as Teil deines Builds.

Ich würde vorschlagen, dass Sie diese Quelldatei so einfach wie möglich machen und nur diese Informationen enthalten. Alternativ könnte eine vorhandene Datei bearbeiten

Ein Beispiel hierfür finden Sie in der Build-Datei für MiscUtil , die die aktuelle SVN-Revision in% co_de einbettet % Attribut Einige verschiedene Teile der Build-Datei:

%Vor%     
Jon Skeet 09.06.2009 17:42
quelle
2

In Makefiles für C-Programme ist es üblich, so etwas zu sehen:

%Vor%

Und dann wird die resultierende C-Quelldatei in das Bild kompiliert. Das obige funktioniert unter Windows, weil die Variablen% date% und% time% in cmd.exe bekannt sind, aber eine ähnliche Sache würde unter Unix mit cat funktionieren.

Sie können dasselbe mit C # tun. Noch einmal, so würde es aussehen, wenn Sie ein Makefile verwenden. Sie benötigen eine Klasse und eine öffentliche statische Eigenschaft.

%Vor%

Und dann für die Sache, die Sie bauen, eine Abhängigkeit und ein Löschen:

%Vor%

Achten Sie darauf, die BuildTimestamp.cs-Datei nach dem Kompilieren zu löschen. du willst es nicht wiederverwenden. Dann verweisen Sie in Ihrer App einfach auf Build.Timestamp.

Mit MSBuild oder Visual Studio ist es komplizierter. Ich konnte% date% oder% time% nicht auflösen. Diese Dinge sind Pseudo-Umgebungsvariablen, ich denke, das ist der Grund. Also habe ich einen indirekten Weg gefunden, um einen Zeitstempel zu erhalten, indem ich die Touch-Aufgabe mit AlwaysCreate = true benutze. Das erstellt eine leere Datei. Der nächste Schritt schreibt Quellcode in die gleiche Datei und verweist dabei auf den Zeitstempel der Datei. Eine Wendung - ich musste dem Semikolon entkommen.

Ihr Pre-Build-Schritt sollte das Ziel "BuildTimestamp" erstellen. Und achten Sie darauf, diese Datei in die Kompilierung einzubeziehen. Und löschen Sie es anschließend im Post-Build-Schritt.

%Vor%     
Cheeso 09.06.2009 18:14
quelle
0

Sie könnten die Assembly-Version in AssemblyInfo.cs als Teil Ihres Builds aktualisieren. Dann könntest du so etwas machen

%Vor%

FileVersionInfo enthält die gesuchten Informationen (Build / Version usw.). Sehen Sie, ob das für Sie funktioniert.

    
Vasu Balakrishnan 09.06.2009 17:51
quelle
0

Hi, ich habe folgende Methode für das selbe verwendet ...

%Vor%     
user259847 27.01.2010 07:04
quelle

Tags und Links