65.9K
CodeProject 正在变化。 阅读更多。
Home

Microsoft 生成任务的自动增量

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.08/5 (5投票s)

2007年6月27日

CPOL

2分钟阅读

viewsIcon

38553

downloadIcon

345

在 Microsoft 生成任务中自动增量程序集版本。

引言

本文介绍如何将程序集中构建/修订号作为构建任务自动递增。

背景

我最初是从 Dave Gallant 在本网站上发表的一篇文章中获得了源代码。 他在实施有效的解决方案方面做得非常出色。我最初是从这个博客读到的。 Dave 的原始代码按所述工作,但我想要更多。 具体来说,我曾经使用一个名为UpdateVersion的项目,该项目几年前做过同样的事情,但使用了命令行。 我想将UpdateVersion中包含的选项的功能组合到 MSBuild 任务中。 结果包含在此处。

概述

  1. AutoIncrement在其输入中搜索 .NET AssemblyVersion属性,并使用几种算法之一计算新的版本号。
  2. AutoIncrement使用几种算法之一计算并输出新的版本号。 您可以将其与 Visual Studio .NET 一起使用,以在每次构建时更新您的AssemblyInfo.*文件。
  3. AutoIncrement将仅计算新的修订号,或者可以同时计算新的构建号和新的修订号。
  4. AutoIncrement可以通过递增现有构建号来计算构建号,也可以根据项目开始日期计算构建号。
  5. AutoIncrement可以通过递增现有修订号来计算修订号,也可以根据午夜以来的秒数计算修订号。

Using the Code

  1. AutoIncrementBuildTask.dll安装到 GAC 中。 这样您就不必将其复制到项目文件所在的同一文件夹中。

  2. 在您的项目文件(vbprojcsproj)中,添加此行...

    <UsingTask TaskName="BuildTasks.IncrementBuildNumber" 
      AssemblyName="AutoIncrementBuildTask, Version=1.0.0.0, Culture=neutral,
      PublicKeyToken=c77dd5dca239f8e6" />  

    ...在<Project>标记和第一个<PropertyGroup>标记之间。 例如,您的项目的前三行应如下所示

    <Project DefaultTargets="Build" 
    	xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <UsingTask TaskName="BuildTasks.IncrementBuildNumber" 
      AssemblyName="AutoIncrementBuildTask, Version=1.0.0.0, Culture=neutral,
      PublicKeyToken=c77dd5dca239f8e6" />
        <PropertyGroup>
  3. 现在找到<Target Name="BeforeBuild"></Target>标记,并将此添加到它们之间。

    <IncrementBuildNumber 
      AssemblyFileLocation="$(MSBuildProjectDirectory)\AssemblyInfo.cs"
      BuildOptions="-s 2006-05-31 -b MonthDay -r Fixed"/> 

    重要! - 确保您的程序集文件的路径正确!

    $(MSBuildProjectDirectory)表示您的项目文件所在的文件夹,因此它将相对于该文件夹。 在我的例子中,它位于根文件夹中,由于它是一个 C# 应用程序,因此它是AssemblyInfo.cs文件。

  4. 保存项目并加载它。 主要版本号和次要版本号将保持不变,并且构建版本号和修订版本号将根据上面的选项进行更新。

关注点

我默认修复修订版本 (-r Fixed) 并递增构建版本 (-b Increment)。 在我的项目中,许多程序集相互引用并复制到通用构建文件夹中。
通用构建文件夹与 Visual Studio 配合良好,但您必须像这样将路径添加到注册表

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\LIB_NET1.1]
@="C:\\usr\\Build\\Lib\\NET-1.1" 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727\
					AssemblyFoldersEx\LIB_NET2.0]
@="C:\\usr\\Build\\Lib\\NET-2.0" 

在这里,我的默认构建目录是c:\usr\Build\Lib\Net-2.0或 Net-1.1(取决于情况)。

示例

<IncrementBuildNumber … BuildOptions="-b Increment">
<IncrementBuildNumber … BuildOptions="-b Increment -r Increment">
<IncrementBuildNumber … BuildOptions="-b MonthDay -s 2002-11-23">
<IncrementBuildNumber … BuildOptions="-b MonthDay -s 11/23/2002">
<IncrementBuildNumber … BuildOptions="-p 1.2.3.4">
<IncrementBuildNumber … BuildOptions="-b BuildDay">
<IncrementBuildNumber … BuildOptions="-b Increment -r Fixed">
<IncrementBuildNumber … BuildOptions="-b BuildDay">  

历史

  • 1.0.0.0 初始版本,包括来自UpdateVersionv1.2和 Dave Gallant 原始实现的代码。 向 Dave 和UpdateVersion的作者致敬。
© . All rights reserved.