En los archivos make para programas en C, es común ver algo como esto:
echo char * gBuildSig ="%DATE% %TIME%"; > BuildTimestamp.c
Y luego la fuente de C, como consecuencia el archivo se compila en la imagen. Lo anterior funciona en Windows porque las variables% date% y% time% son conocidas en cmd.exe, pero una cosa similar funcionaría en Unix usando cat.
Puede hacer lo mismo con C#. Una vez más, así es como se vería si está usando un archivo MAKE. Necesitas una clase y una propiedad pública estática.
BuildTimestamp.cs:
echo public static class Build { public static string Timestamp = "%DATE% %TIME%";} > BuildTimestamp.cs
Y entonces, por lo que usted está construyendo, una dependencia y una eliminación:
MyApp.exe: BuildTimestamp.cs MyApp.cs
$(_CSC) /target:exe /debug+ /optimize- /r:System.dll /out:MyApp.exe MyApp.cs BuildTimestamp.cs
-del BuildTimestamp.cs
Asegúrese de eliminar el archivo BuildTimestamp.cs tras compilarla; no quieres volver a usarlo Luego, en su aplicación, simplemente haga referencia a Build.Timestamp.
El uso de MSBuild o Visual Studio es más complicado. No pude obtener% date% o% time% para resolver. Esas cosas son pseudo variables de entorno, supongo que es por eso. Así que recurrí a una forma indirecta de obtener una marca de tiempo, usando la tarea Touch con AlwaysCreate = true. Eso crea un archivo vacío. El siguiente paso escribe el código fuente en el mismo archivo, haciendo referencia a la marca de tiempo del archivo. Una vuelta de tuerca: tuve que escapar del punto y coma.
Su paso previo a la compilación debería generar el objetivo "BuildTimestamp". Y asegúrese de incluir ese archivo en la compilación. Y elimínelo después, en el paso posterior a la compilación.
<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>
podría ser que esta cuestión relacionada tiene una solución para usted: http://stackoverflow.com/questions/878037/msbuild- msbuildcommunitytasks-task-time –
puede usar la [indicación de fecha y hora del enlazador] (http://stackoverflow.com/questions/2234969/adding-compilation-date-to-the-code/2235211#2235211) – user423430