using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Build.Utilities;
using Microsoft.Build.Framework;
using System.IO;
namespace DotNetOpenAuth.BuildTasks {
public class GetBuildVersion : Task {
///
/// Gets the version string to use in the compiled assemblies.
///
[Output]
public string Version { get; private set; }
///
/// The file that contains the version base (Major.Minor.Build) to use.
///
[Required]
public string VersionFile { get; set; }
public override bool Execute() {
try {
Version typedVersion = ReadVersionFromFile();
typedVersion = new Version(typedVersion.Major, typedVersion.Minor, typedVersion.Build, CalculateJDate(DateTime.Now));
Version = typedVersion.ToString();
} catch (ArgumentOutOfRangeException ex) {
Log.LogErrorFromException(ex);
return false;
}
return true;
}
private Version ReadVersionFromFile() {
string[] lines = File.ReadAllLines(VersionFile);
string versionLine = lines[0];
return new Version(versionLine);
}
private int CalculateJDate(DateTime date) {
int yearLastDigit = date.Year % 10;
DateTime firstOfYear = new DateTime(date.Year, 1, 1);
int dayOfYear = (date - firstOfYear).Days + 1;
int jdate = yearLastDigit * 1000 + dayOfYear;
return jdate;
}
}
}