C#没有宏的概念;但是,您可以在构建脚本(csproj / NANT / 等)中使用其他工具在源代码编译之前对其进行操作。例如,我使用它来将修订号设置为当前的 SVN 修订。
一个便宜的选项是预构建事件(您可以通过 VS 中的项目属性对话框来执行此操作):本质上是一个在构建之前运行的 bat 文件;然后,您可以编写所需的任何更改。一个更复杂的选项是构建任务。
例如,这里的实用程序库包括一个Time
任务和一个FileUpdate
任务;它应该(理论上)可以将两者链接在一起以模拟您需要的东西。
就个人而言,我会使用[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' />
现在我的程序集版本是正确的,包括操作系统报告的文件版本。