C#没有宏的概念;但是,您可以在构建脚本(csproj/NANT/etc)中使用其他工具在编译之前对源进行操作。例如,我使用它来将版本号设置为当前的SVN修订版。
便宜的选项是一个预生成事件(你可以通过VS中的项目属性对话框来实现):本质上是一个在构建之前运行的bat文件;然后您可以编写您需要的任何更改。更复杂的选项是构建任务。
例如,实用程序库here包括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' />
现在我组装的版本是正确的,包括获取由OS发送的文件版本。
我做类似的东西来这MSBuild使用Microsoft SDC任务:http://www.codeplex.com/sdctasks – 2009-01-07 09:18:13