Подтвердить что ты не робот

Получение TFS для внесения изменений в версию сборки

У меня есть Team Foundation Server Build работает чисто. Он создает несколько сборок, и я хотел бы, чтобы версии сборок имели последнее число, которое является номером смены. То есть, если я совершаю команду changeet11667, например, номер версии сборки должен быть "x.y.z.11667". Я проверил доступные макросы, но ни один из них не является номером набора изменений.

Я все равно хотел бы создать файл решения на моей машине dev как обычно, просто используя проверенный номер версии.

Как я могу это сделать?

4b9b3361

Ответ 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, если это необходимо.