使用MSBuild文件更新任务仅更改AssemblyInfo.cs中的修订号
我只需要更改使用MSBuild文件更新任务仅更改AssemblyInfo.cs中的修订号,msbuild,msbuild-task,Msbuild,Msbuild Task,我只需要更改AssemblyInfo.cs文件的修订号。版本号的格式为Major.Minor.Build.Revision,例如1.4.6.0 目前,我使用FileUpdate任务(来自)和以下正则表达式更改版本: <FileUpdate Files="@(AssemblyResult)" Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
AssemblyInfo.cs
文件的修订号。版本号的格式为Major.Minor.Build.Revision,例如1.4.6.0
目前,我使用FileUpdate
任务(来自)和以下正则表达式更改版本:
<FileUpdate Files="@(AssemblyResult)"
Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
ReplacementText='[assembly: AssemblyVersion("$(AssemblyMajorNumber).$(AssemblyMinorNumber).$(AssemblyBuildNumber).$(Revision)")]' />
现在,我只需要更新版本号,并保留主要,次要和建设不变。
那么,有什么任务要做吗?或者可以用正则表达式完成吗?那么正则表达式是什么呢?这个怎么样:
<FileUpdate Files="Properties/AssemblyInfo.cs"
Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="$1.$2.$3.$(Revision)" />
我使用以下目标来执行此操作:
<Target Name="UpdateAssemblyInfoVersion" DependsOnTargets="GetRevision">
<CreateItem Include="**\AssemblyInfo.vb">
<Output TaskParameter="Include" ItemName="AssemblyFiles"/>
</CreateItem>
<Time>
<Output TaskParameter="Year" PropertyName="Year" />
</Time>
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="(AssemblyVersion|AssemblyFileVersionAttribute|AssemblyFileVersion)\("([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?"\)"
ReplacementText="$1("$2.$(Revision)")" />
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="AssemblyCompany\(".*"\)"
ReplacementText="AssemblyCompany("My Company")" />
<FileUpdate Files="@(AssemblyFiles)"
Multiline="true"
Singleline="false"
Regex="AssemblyCopyright\(".*"\)"
ReplacementText="AssemblyCopyright("Copyright © 2009-$(Year) My Company")" />
</Target>
这将替换任何AssemblyInfo文件(在多个项目中)中的版本(第四个编号)。它查看AssemblyVersion AssemblyFileVersionAttribute和AssemblyFileVersionAttribute标记,并使用$(修订版)MSBuild属性作为编号(我有另一个名为GetRevision的目标,它从SVN获取该属性并设置该属性,因此此目标依赖于该目标)。正则表达式的替换处理的版本号有3或4位(我有一堆只有3位,不管出于什么原因)
它还设置/覆盖公司和版权信息,并将其设置为“我的公司”。对于版权,我很懒惰,所以它总是使用当前年份,所以我不必记得每年更新它(所以它说,例如“版权(c)2009-2010我的公司”)
此目标需要扩展
根据策略,签入SVN的所有内容的最后一个数字都是.0,只有CI服务器在执行生成时才更改此值。这让我们能够快速区分开发人员创建的版本(不允许访问客户)和CI服务器创建的“官方”版本之间的区别。这个问题与wix或windows installer根本不相关,因此我进行了相应的编辑。还有一件事..我可以使用这些属性$1,$2和$3进一步..我想给你所拥有的其他财产赋值。??事实上,我需要提取主调。副调,构建编号,并且必须在其他地方使用它们。因此,我需要它们。那么,你能帮我最后一个忙吗?嗨,我们能读回这些编号(regex或$1。$2。$3。$4)吗。??。。我需要阅读前三个ie$1.$2.$3,并将其值赋给MSBUILD中的属性..您能在这方面帮助我吗?否。您不能使用
FileUpdate
设置MSBUILD属性。如我所示,您可以在替换文本中使用捕获的组的值,但不能使用这些值来设置msbuild属性。当在csproj文件中作为自定义任务添加时,此操作有效。如果命令行生成通过“/p:Revision=88”,则前三个四分之一保持不变,但修订号在“AssemblyInfo.cs”中更新。我唯一的建议是相对于csproj文件的位置使用“Properties/AssemblyInfo.cs”。