Dans makefile pour les programmes C, il est fréquent de voir quelque chose comme ceci:
echo char * gBuildSig ="%DATE% %TIME%"; > BuildTimestamp.c
Et puis la résultante source C le fichier est compilé dans l'image. Ce qui précède fonctionne sur Windows car les variables% date% et% time% sont connues dans cmd.exe, mais une chose similaire fonctionnerait sous Unix en utilisant cat.
Vous pouvez faire la même chose en utilisant C#. Encore une fois, voici ce que cela donnerait si vous utilisiez un fichier makefile. Vous avez besoin d'une classe et d'une propriété statique publique.
BuildTimestamp.cs:
echo public static class Build { public static string Timestamp = "%DATE% %TIME%";} > BuildTimestamp.cs
Et puis pour la chose que vous construisez, une dépendance et une suppression:
MyApp.exe: BuildTimestamp.cs MyApp.cs
$(_CSC) /target:exe /debug+ /optimize- /r:System.dll /out:MyApp.exe MyApp.cs BuildTimestamp.cs
-del BuildTimestamp.cs
Assurez-vous de supprimer le fichier BuildTimestamp.cs après avoir compilez; vous ne voulez pas le réutiliser. Ensuite, dans votre application, référencez simplement Build.Timestamp. En utilisant MSBuild ou Visual Studio, c'est plus compliqué. Je n'ai pas pu obtenir% date% ou% time% pour résoudre. Ces choses sont des variables de pseudo-environnement, je suppose que c'est pourquoi. J'ai donc eu recours à une méthode indirecte pour obtenir un horodatage, en utilisant la tâche Touch avec AlwaysCreate = true. Cela crée un fichier vide. L'étape suivante écrit le code source dans le même fichier, référençant l'horodatage du fichier. Une torsion - j'ai dû échapper au point-virgule.
Votre étape de préconfiguration doit générer la cible "BuildTimestamp". Et assurez-vous d'inclure ce fichier dans la compilation. Et supprimez-le ensuite, dans l'étape de post-construction.
<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>
est peut-être que cette question connexe a une solution pour vous: http://stackoverflow.com/questions/878037/msbuild- msbuildcommunitytasks-task-time –
vous pouvez utiliser le [timestamp lien] (http://stackoverflow.com/questions/2234969/adding-compilation-date-to-the-code/2235211#2235211) – user423430