使用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)\(&quot;([0-9]+\.[0-9]+\.[0-9]+)(\.[0-9]+)?&quot;\)"
        ReplacementText="$1(&quot;$2.$(Revision)&quot;)" />
    <FileUpdate Files="@(AssemblyFiles)"
        Multiline="true"
        Singleline="false"
        Regex="AssemblyCompany\(&quot;.*&quot;\)"
        ReplacementText="AssemblyCompany(&quot;My Company&quot;)" />
    <FileUpdate Files="@(AssemblyFiles)"
        Multiline="true"
        Singleline="false"
        Regex="AssemblyCopyright\(&quot;.*&quot;\)"
        ReplacementText="AssemblyCopyright(&quot;Copyright &#169; 2009-$(Year) My Company&quot;)" />
</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”。