C# hat nicht das Konzept von Makros; Sie können jedoch andere Tools in Ihrem Buildskript (csproj/NANT/etc) verwenden, um die Quelle vor dem Kompilieren zu bearbeiten. Ich verwende dies zum Beispiel, um die Revisionsnummer auf die aktuelle SVN-Revision zu setzen.
Eine billige Option ist ein Pre-Build-Event (Sie können dies über den Projekteigenschaften-Dialog in VS tun): im Wesentlichen eine Bat-Datei, die vor dem Build läuft; Sie können dann die gewünschten Änderungen durchführen. Eine anspruchsvollere Option sind Build-Aufgaben.
Zum Beispiel enthält die Dienstprogrammbibliothek here eine Time
Aufgabe und eine FileUpdate
Aufgabe; Es sollte (theoretisch) möglich sein, die beiden zusammen zu ketten, um zu emulieren, was Sie brauchen.
Persönlich würde ich die [AssemblyVersion]
Details lieber als die Zeit verwenden - wenn Sie dies mit Ihrer Source-Control-System verknüpfen, macht es sehr einfach, die problematische Version zu finden; so für meine SVN-Version benutze ich dann (in meinem Build 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' />
Und jetzt meine Montag-Version korrekt ist, einschließlich der Datei-Version, die von den OS gemeldet wird.
ich etwas tun ähnlich dazu in MSBuild mit den Microsoft SDC-Aufgaben unter: http://www.codeplex.com/sdctasks –