In makefiles per i programmi C, è comune vedere qualcosa di simile:
echo char * gBuildSig ="%DATE% %TIME%"; > BuildTimestamp.c
E poi la fonte C risultante il file è compilato nell'immagine. Quanto sopra funziona su Windows perché le variabili% date% e% time% sono conosciute in cmd.exe, ma una cosa simile funzionerebbe su Unix usando cat.
Si può fare la stessa cosa usando C#. Ancora una volta, questo è come sarebbe se si utilizza un makefile. Hai bisogno di una classe e di una proprietà statica pubblica.
BuildTimestamp.cs:
echo public static class Build { public static string Timestamp = "%DATE% %TIME%";} > BuildTimestamp.cs
E poi per la cosa si sta costruendo, una dipendenza e di eliminazione:
MyApp.exe: BuildTimestamp.cs MyApp.cs
$(_CSC) /target:exe /debug+ /optimize- /r:System.dll /out:MyApp.exe MyApp.cs BuildTimestamp.cs
-del BuildTimestamp.cs
Assicurarsi di eliminare il file BuildTimestamp.cs dopo si compila; non vuoi riutilizzarlo Quindi, nella tua app, fai riferimento a Build.Timestamp.
Utilizzando MSBuild o Visual Studio, è più complicato. Non è stato possibile ottenere% date% o% time% da risolvere. Quelle cose sono pseudo variabili d'ambiente, immagino sia per questo. Così ho fatto ricorso a un modo indiretto per ottenere un timestamp, utilizzando l'attività Touch con AlwaysCreate = true. Questo crea un file vuoto. Il passo successivo scrive il codice sorgente nello stesso file, facendo riferimento al timestamp del file. Una svolta: ho dovuto sfuggire al punto e virgola.
Il passo di pre-costruzione dovrebbe creare l'obiettivo "BuildTimestamp". E assicurati di includere quel file nella compilazione. E cancellalo in seguito, nel passaggio post-build.
<ItemGroup>
<StampFile Include="BuildTimestamp.cs"/>
</ItemGroup>
<Target Name="BuildTimestamp"
Outputs="@(StampFile)">
<Message Text="Building timestamp..." />
<Touch
AlwaysCreate="true"
Files="@(StampFile)" />
<WriteLinesToFile
File="@(StampFile)"
Lines='public static class Build { public static string Timestamp = "%(StampFile.CreatedTime)" %3B }'
Overwrite="true" />
</Target>
potrebbe essere che la questione relativa ha una soluzione per voi: http://stackoverflow.com/questions/878037/msbuild- msbuildcommunitytasks-task-time –
è possibile utilizzare [timestamp del linker] (http://stackoverflow.com/questions/2234969/adding-compilation-date-to-code-/2235211#2235211) – user423430