Получение TFS для внесения изменений в версию сборки
У меня есть Team Foundation Server Build работает чисто. Он создает несколько сборок, и я хотел бы, чтобы версии сборок имели последнее число, которое является номером смены. То есть, если я совершаю команду changeet11667, например, номер версии сборки должен быть "x.y.z.11667". Я проверил доступные макросы, но ни один из них не является номером набора изменений.
Я все равно хотел бы создать файл решения на моей машине dev как обычно, просто используя проверенный номер версии.
Как я могу это сделать?
Ответы
Ответ 1
В конце концов мой коллега написал следующую задачу MSBuild, которая решила проблему.
public class GetNextBuildNumber : Task
{
[Required]
public string TfsCommand { get; set; }
[Required]
public string TfsArgument { get; set; }
[Output]
public int BuildNumber { get; set; }
public override bool Execute()
{
BuildNumber = GetLatestVersionNumber();
return true;
}
private int GetLatestVersionNumber()
{
var process = new RunProcess();
var result = process.ExecuteCommand(TfsCommand, TfsArgument);
return ParseResult(result);
}
private int ParseResult(string result)
{
const string changeset = "Changeset:";
const string user = "User:";
if (string.IsNullOrEmpty(result) || !result.Contains(changeset))
{
// Invalid result
Log.LogWarning("Could not get latest build number. Reason: " + result);
return 0;
}
var indexOfChangeset = result.IndexOf(changeset, StringComparison.InvariantCulture) + changeset.Length;
var indexOfUser = result.IndexOf(user, StringComparison.InvariantCulture);
var revision = result.Substring(indexOfChangeset, indexOfUser - indexOfChangeset).Trim();
return Convert.ToInt32(revision);
}
}
Ответ 2
Поймите, что это перестанет работать, если вы превысите 65535 наборов изменений. Возможно, вы хотите обновить другое поле. Кстати, да, строительная техника - это техника. Указывать на решение и сообщать ему о строительстве - это только начало путешествия.
Ответ 3
Посмотрите Проект расширения сообщества TFS Build на CodePlex. Он содержит активность AssemblyInfo и активность TfsVersion, которые способны изменения информации о сборке во время процесса сборки с использованием пользовательского формата.
Чтобы он работал на вашем компьютере-разработчике, вы должны сами реализовать эти расширения для сборки, используя командные файлы и утилиты командной строки TFS.
Ответ 4
Я работаю над инструментом для автоматизации процесса сборки, который все еще находится в разработке, и это open source - ссылка (я планирую выпуск примерно через неделю):
https://github.com/jupaol/NCastor
Теперь я бы порекомендовал вам проверить семантическое управление версиями:
http://semver.org/
Чтобы получить последний набор изменений от TFS, у вас есть несколько вариантов:
Я создал пользовательскую подпрограмму, чтобы сделать это
https://github.com/jupaol/NCastor/blob/develop/Solutions/NCastor.AutoBuilder/NCastor.AutoBuilder.Runner/Targets/Build/Versioning/VersionControlServers/TFS/GetTFSRevisionVersion.target
Мне пришлось создать эту процедуру, потому что задачи сообщества и задачи MSBuild Extenssions не работали на 64-битной машине, если вы используете 32-битную машину для сборки, вы можете использовать следующие задачи:
Использование http://msbuildextensionpack.codeplex.com/
<UsingTask AssemblyFile="$(ExtensionTasksPath)MSBuild.ExtensionPack.dll" TaskName="MSBuild.ExtensionPack.VisualStudio.TfsVersion"/>
Использование http://msbuildtasks.tigris.org/
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Tfs.TfsVersion" />
Пример для установки разных версий:
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.AssemblyInfo" />
<MSBuild.Community.tasks.AssemblyInfo OutputFile="$(AssemblyVersionFilePath)"
CodeLanguage="C#"
AssemblyFileVersion="$(FileVersion)"
AssemblyInformationalVersion="$(InformationalVersion)"
AssemblyVersion="$(SemanticVersion)" />
Как только вы создали файл, просто добавьте этот файл в качестве ссылки на каждый проект и вуаля! все ваши проекты разделяют общую сборку.
Ответ 5
С какой целью вы хотели это сделать?
Если вы хотите иметь отношение между DLL и исходным кодом, чтобы извлечь из TFS, лучший способ - индексировать символы, используя TFS Source Control в генерации PDB.
Таким образом, при отладке любой версии вашего программного обеспечения Visual Studio получит нужную версию источника из TFS, если это необходимо.