如何在VS 2012上自动增加项目版本号

时间:2013-11-25 11:35:39

标签: c#-4.0 visual-studio-2012

我搜索了自动递增版本号并找到了一些解决方案,但我想知道哪一个是最有效和最新的方式?我不知道Visual Studio 2012上是否有新功能或工具。

第一:    更改AssemblyInfo.cs文件

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

第二:     codeplex(我不知道它是否与VS2012兼容)

第三:    发布

下的项目属性

Here

第四:   Using T4 templates to manage assembly version information

请建议任何其他解决方案或分享您关于版本控制的经验?

1 个答案:

答案 0 :(得分:0)

  1. 下载并安装AssemblyInfoTask 您需要获得此自定义构建任务。 Chris引用gotdotnet.com上的原始资源,该资源不再存在。使用谷歌搜索文本AssemblyInfoTaskvers或尝试此链接 http://code.msdn.microsoft.com/AssemblyInfoTaskvers/Release/ProjectReleases.aspx?ReleaseId=232

    它应该将您重定向到MSDN上的下载区域,您可以在其中获得lates安装版本。

  2. 将任务导入您的构建项目 在Visual Studio中打开源代码管理,并确保在工作区中拥有构建项目的本地副本。然后查看TFSBuild.proj文件(未更改,保留任何现有锁)并将其打开。导入Microsoft.TeamFoundation.Build.targets后立即添加以下行:

    <Import Project="$(MSBuildExtensionsPath)¥Microsoft¥AssemblyInfoTask¥Microsoft.VersionNumber.Targets"/> 
    
  3. 使用自定义任务检索修订号 每个buildnumber都包含一个修订版:FooBar_20090128.3我们要做的是使用此修订版号作为我们的Assembly版本中的修订版。因此,我们需要实现一个自定义构建任务,该任务能够从构建编号中提取修订号,以便我们可以将其分配给Assembly的修订号。在本文结尾处,我将发布您需要的资源。 在上面的import语句之后,通过添加以下行来注册此自定义构建任务:

     <UsingTask TaskName="ExtractRevision.ExtractRevisionTask" AssemblyFile="ExtractRevision.dll"/> 
    
  4. 要分别配置所有程序集属性并格式化数字格式,请将以下行添加到项目文件中:

    <PropertyGroup>
    <!– Assembly version properties. Add others here –>
    <AssemblyMajorVersion>4</AssemblyMajorVersion>
    <AssemblyMinorVersion>0</AssemblyMinorVersion>
    <AssemblyBuildNumber>0</AssemblyBuildNumber>
    <AssemblyRevision>0</AssemblyRevision>
    
    <AssemblyFileMajorVersion>4</AssemblyFileMajorVersion>
    <AssemblyFileMinorVersion>0</AssemblyFileMinorVersion>
    <AssemblyFileBuildNumber>0</AssemblyFileBuildNumber>
    <AssemblyFileRevision>0</AssemblyFileRevision>
    
    
    <AssemblyBuildNumberType>DateString</AssemblyBuildNumberType>
    <AssemblyBuildNumberFormat>MMdd</AssemblyBuildNumberFormat>
    <AssemblyRevisionType>NoIncrement</AssemblyRevisionType>
    <AssemblyRevisionFormat>0</AssemblyRevisionFormat>
    
    <AssemblyFileBuildNumberType>DateString</AssemblyFileBuildNumberType>
    <AssemblyFileBuildNumberFormat>MMdd</AssemblyFileBuildNumberFormat>
    <AssemblyFileRevisionType>NoIncrement</AssemblyFileRevisionType>
    <AssemblyFileRevisionFormat>0</AssemblyFileRevisionFormat>
    
    <!– Dump the TFS BuildNumber to the Assembly Comment Prop –>
    <AssemblyDescription>$(BuildNumber)</AssemblyDescription>
    
    <!– TF.exe –>
    <TF>&quot;$(TeamBuildRefPath)¥..¥tf.exe&quot;</TF>
    <!– AssemblyInfo file –>
    <AssemblyInfoSpec>AssemblyInfo.*</AssemblyInfoSpec>
    </PropertyGroup> 
    
  5. 设置修订号 通过更改目标CheckSettingsForEndToEndIteration,您可以使用尚未实现的自定义生成任务从buildbumber中提取修订版号并将其添加到程序集版本:      

    <!–for 2008 use the GetBuildProperties Task to get the BuildNumber –>
    <GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
      <Output TaskParameter="BuildNumber" PropertyName="BuildNumber"></Output>
    </GetBuildProperties>
    
    <!–  extract the BuildRevision –>
    <ExtractRevisionTask BuildNumber="$(BuildNumber)">
      <Output TaskParameter="BuildRevision" PropertyName="BuildRevision" />
    </ExtractRevisionTask>
    
    <!–  update the AssemblyInfo Props –>
    <CreateProperty Value="$(BuildRevision)">
      <Output TaskParameter="Value" PropertyName="AssemblyRevision"/>
    </CreateProperty>
    <CreateProperty Value="$(BuildRevision)">
      <Output TaskParameter="Value" PropertyName="AssemblyFileRevision"/>
    </CreateProperty>
    
    <!–  just needed if you populate the AssemblyDescription  too like in the sample  –>
    <CreateProperty Value="$(BuildNumber)">
      <Output TaskParameter="Value" PropertyName="AssemblyDescription"/>
    </CreateProperty>
    

  6. 检出并返回工作区中的所有AssemblyInfo。[cs | vb]文件 在您更改AssemblyInfo文件之前,您需要让Team Build检查它们:      

    <!– Set the AssemblyInfoFiles items dynamically –>
    <CreateItem Include="$(SolutionRoot)¥**¥$(AssemblyInfoSpec)">
      <Output ItemName="AssemblyInfoFiles" TaskParameter="Include" />
    </CreateItem>
    
    <Message Text="These AssemblyInfo.* files were found:"/>
    <Message Text ="@(AssemblyInfoFiles)"/>
    
    <Exec WorkingDirectory="$(SolutionRoot)"
    Command="$(TF) checkout &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
    

     在编译更改的文件之后,您可以重新检入它们:        

    Command="$(TF) checkin /comment:&quot;Auto-Build: Version Update&quot; /noprompt /override:&quot;Auto-Build: Version Update&quot; &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
    

    万一发生任何不良事件,有一种方法可以撤消更改:

    <!– In case of Build failure, the AfterCompile target is not executed. Undo the changes –>
      <Target Name="BeforeOnBuildBreak" Condition="'$(IsDesktopBuild)'!='true'">
        <Exec WorkingDirectory="$(SolutionRoot)"
        Command="$(TF) undo /noprompt &quot;@(AssemblyInfoFiles, '&quot; &quot;')&quot;"/>
      </Target>
    
  7. 实施ExtractRevision自定义构建任务 只需使用以下类创建一个新的C#库项目(并通过在项目属性中对其添加一个强名称):     名称空间ExtractRevision     {         使用Microsoft.Build.Framework;         使用Microsoft.Build.Utilities;

        public class ExtractRevisionTask : Task
        {
        public override bool Execute()
        {
            int indexOfDot = buildNumber.LastIndexOf(".");
            if (indexOfDot != -1 & indexOfDot != buildNumber.Length – 1)
            {
            buildRevision = buildNumber.Substring(indexOfDot + 1, buildNumber.Length – (indexOfDot + 1));
            }
            else
            {
            //there is no char following the dot or we can't find a dot
            buildRevision = "0″;
            }
            return true;
        }
    
        private string buildRevision;
        private string buildNumber;
    
        public string BuildNumber
        {
            set { buildNumber = value; }
        }
    
        [Output]
        public string BuildRevision
        {
            get { return buildRevision; }
        }
        }
    }
    
  8. 您需要将.dll文件直接签入TFS上的TeamBuildTypes文件夹。

    外部链接:http://devsid.blogspot.in/2010/06/automatically-increment-assemblys.html