【问题标题】:Change only Revision number in AssemblyInfo.cs with MSBuild FileUpdate task使用 MSBuild FileUpdate 任务仅更改 AssemblyInfo.cs 中的修订号
【发布时间】:2011-01-02 20:13:51
【问题描述】:

我只需要更改AssemblyInfo.cs 文件的修订号。版本号采用 Major.Minor.Build.Revision 格式,例如1.4.6.0.

目前我使用FileUpdate 任务(来自MSBuild Community Tasks Project)和以下正则表达式更改版本:

<FileUpdate Files="@(AssemblyResult)"
    Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
    ReplacementText='[assembly: AssemblyVersion("$(AssemblyMajorNumber).$(AssemblyMinorNumber).$(AssemblyBuildNumber).$(Revision)")]' />

现在我只需要更新修订号并保持主要、次要和构建不变。 那么,有什么任务可以做到这一点吗?或者可以用正则表达式完成吗?那么正则表达式会是什么?

【问题讨论】:

  • 这个问题与wix或windows安装程序完全无关,所以我做了相应的编辑。
  • 还有一件事..我可以进一步使用这些属性 $1、$2 和 $3..比如给其他已经占用的属性分配价值.??实际上我需要提取major.minor,内部版本号并且必须在其他地方使用它们..所以,我需要它们..so,你能帮我最后一个忙吗..

标签: msbuild msbuild-task


【解决方案1】:

这个怎么样:

<FileUpdate Files="Properties/AssemblyInfo.cs"
   Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
   ReplacementText="$1.$2.$3.$(Revision)" />

【讨论】:

  • hii wcoenen,我们可以读回这些数字(正则表达式或 $1.$2.$3.$4)吗??...我需要阅读前三个,即 $1.$2.$3 并为其赋值到MSBUILD中的属性..你能帮我吗??
  • 没有。您不能使用 FileUpdate 设置 msbuild 属性。您可以在替换文本中使用捕获组的值,如我所示,但不能使用这些值来设置 msbuild 属性。
  • 这在添加为 csproj 文件中的自定义任务时有效。如果您的命令行构建通过“/p:Revision=88”,那么前 3 个象限保持不变,但修订号在“AssemblyInfo.cs”中更新。我唯一的建议是使用相对于 csproj 文件位置的“Properties/AssemblyInfo.cs”。
【解决方案2】:

我使用以下目标来执行此操作:

<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 文件(在多个项目中)中的修订版(第 4 个数字)。它查看 AssemblyVersion AssemblyFileVersionAttribute 和 AssemblyFileVersion 标签,并使用 $(Revision) MSBuild 属性作为数字(我有另一个名为 GetRevision 的目标,它从 SVN 获取它并设置属性,所以这个取决于该目标)。正则表达式替换处理具有 3 位或 4 位数字的版本号(我有一堆只有 3 位,无论出于何种原因)。

它还设置/覆盖公司和版权信息,并将其设置为“我的公司”。对于版权,我很懒,所以它总是使用当前年份,所以我不必记得每年都更新它(所以它说例如“Copyright (c) 2009-2010 My Company”)。

此目标需要MSBuild Community tasks 扩展。


作为一项政策,所有签入 SVN 的内容都以 .0 作为最后一个数字,并且只有 CI 服务器在构建时更改此值。这让我们可以快速区分开发人员创建的构建(绝不允许提供给客户)和 CI 服务器创建的“官方”构建。

【讨论】:

    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多