C # не имеет понятия макросов; однако вы можете использовать другие инструменты в вашем скрипте сборки (csproj / NANT / etc) для манипулирования исходным кодом перед его компиляцией Я использую это, например, чтобы установить номер версии для текущей версии SVN.
Дешевой опцией является событие перед сборкой (вы можете сделать это через диалог свойств проекта в VS): по сути, это bat-файл, который запускается перед сборкой; Затем вы можете написать любые изменения, которые вам нужны. Более сложный вариант - задачи сборки.
Например, служебная библиотека здесь включает в себя задачу Time
и задачу FileUpdate
; должно быть (теоретически) возможно связать их вместе, чтобы подражать тому, что вам нужно.
Лично я бы использовал [AssemblyVersion]
подробности, а не время - если вы свяжете это с вашей системой контроля версий, это позволит очень легко найти нарушающую версию; поэтому для моей версии SVN я затем использую (в моей сборке proj):
<!-- 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' />
И теперь моя сборочная версия верна, включая версию файла, о которой сообщает ОС.