Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 29 additions & 8 deletions Source/Activities/Framework/AssemblyInfo/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ namespace TfsBuildExtensions.Activities.Framework
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.TeamFoundation.Build.Client;

Expand Down Expand Up @@ -70,7 +71,7 @@ public sealed class AssemblyInfo : BaseCodeActivity

// version parser.
private static readonly Regex VersionParser = new Regex(
@"\d+\.\d+\.\d+\.\d+",
@"\d+\.\d+(\.\d+(\.\d+)?)?",
RegexOptions.Compiled);

// AssemblyInfo file access helper.
Expand Down Expand Up @@ -605,18 +606,38 @@ private string UpdateVersion(string attributeName, string format, OutArgument<Ve

// update version
var tokens = format.Split('.');
if (tokens.Length != 4)
if (tokens.Length < 2 || tokens.Length > 4)
{
throw new FormatException("Specified value for attribute '" + attributeName + "' is not a correct version format.");
}

version = new Version(
Convert.ToInt32(this.ReplaceTokens(tokens[0], version.Major)),
Convert.ToInt32(this.ReplaceTokens(tokens[1], version.Minor)),
Convert.ToInt32(this.ReplaceTokens(tokens[2], version.Build)),
Convert.ToInt32(this.ReplaceTokens(tokens[3], version.Revision)));
var versionBuilder = new StringBuilder(this.ReplaceTokens(tokens[0], version.Major));
versionBuilder.Append(".");
versionBuilder.Append(this.ReplaceTokens(tokens[1], version.Minor));

this.file[attributeName] = string.Format(versionPattern, version.Major, version.Minor, version.Build, version.Revision);
if (tokens.Length > 2)
{
versionBuilder.Append(".");
versionBuilder.Append(this.ReplaceTokens(tokens[2], version.Build != -1 ? version.Build : 0));

if (tokens.Length > 3)
{
versionBuilder.Append(".");
versionBuilder.Append(this.ReplaceTokens(tokens[3], version.Revision != -1 ? version.Revision : 0));
}
}

var versionString = versionBuilder.ToString();
version = new Version(versionString);

if (containsWildcard)
{
this.file[attributeName] = string.Format(versionPattern, version.Major, version.Minor, version.Build, version.Revision);
}
else
{
this.file[attributeName] = versionString;
}

if (version > maxVersion.Get(this.ActivityContext))
{
Expand Down