C# にはマクロの概念がありません。ただし、ビルド スクリプトで他のツール (csproj / NANT / など) を使用して、コンパイル前にソースを操作できます。たとえば、これを使用して、リビジョン番号を現在の SVN リビジョンに設定します。
安価なオプションは、ビルド前のイベントです (VS のプロジェクト プロパティ ダイアログでこれを行うことができます)。基本的には、ビルド前に実行されるバッチ ファイルです。その後、必要な変更をスクリプト化できます。より高度なオプションは、ビルド タスクです。
たとえば、ここTime
のユーティリティ ライブラリにはタスクとタスクが含まれていFileUpdate
ます。必要なものをエミュレートするために、(理論的には) 2 つを連鎖させることができるはずです。
個人的には[AssemblyVersion]
、時間よりも詳細を使用します。これをソース管理システムにリンクすると、問題のあるバージョンを簡単に見つけることができます。私のSVNバージョンでは、(ビルドプロジェクトで)次を使用します。
<!-- 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' />
これで、OS によって報告されるファイル バージョンを含め、アセンブリ バージョンが正しくなりました。