C# no tiene el concepto de macros; sin embargo, puede usar otras herramientas en su secuencia de comandos de construcción (csproj/NANT/etc) para manipular la fuente antes de compilarla. Lo uso, por ejemplo, para establecer el número de revisión en la revisión SVN actual.
Una opción económica es un evento previo a la construcción (puede hacerlo a través del cuadro de diálogo de propiedades del proyecto en VS): esencialmente un archivo bat que se ejecuta antes de compilar; a continuación, puede programar cualquier cambio que necesite. Una opción más sofisticada es construir tareas.
Por ejemplo, la biblioteca de utilidades here incluye una tarea Time
y una tarea FileUpdate
; debería (en teoría) ser posible encadenar los dos juntos para emular lo que necesita.
Personalmente, usaría los detalles de [AssemblyVersion]
en lugar de la hora; si vincula esto al sistema de control de fuente, esto hace que sea muy fácil encontrar la versión ofensiva; por lo que para mi versión SVN, yo utilizo a continuación (en mi construcción proy):
<!-- See http://msbuildtasks.tigris.org -->
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
...
<SvnInfo LocalPath=".">
<Output TaskParameter="Revision" PropertyName="BuildRev" />
</SvnInfo>
...
<FileUpdate Files="Path\To\My\AssemblyInfo.cs"
Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
ReplacementText='$1.$2.$(BuildRev)$5' />
<FileUpdate Files="Path\To\My\AssemblyInfo.cs"
Regex='(\[\s*assembly:\s*AssemblyFileVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
ReplacementText='$1.$2.$(BuildRev)$5' />
Y ahora mi versión de montaje es correcta, incluido el archivo de la versión eso se difundió por el sistema operativo.
hago algo similar a esto en MSBuild utilizando las tareas de Microsoft SDC en: http://www.codeplex.com/sdctasks –