доступ и обновление параметров сборки tfs 2010 программно из .net 3.5 - PullRequest
1 голос
/ 29 февраля 2012

Я, вероятно, здесь упускаю что-то простое, потому что это, похоже, не работает так, как я ожидаю.Я не являюсь действующим парнем по дням.

У меня есть плагин tfs 2010, который отслеживает события смены билетов и фильтрует изменения WIT в желаемых билетах.Все это основано на http://geekswithblogs.net/jakob/archive/2010/10/27/devleoping-and-debugging-server-side-event-handlers-in-tfs-2010.aspx

Я вытаскиваю все необходимые переменные в плагине, и мне нужно передать это движку сборки, который фактически будет толкать сборку.Больше всего меня огорчает то, что параметры помещаются в виде строки xaml или «словаря и сериализуют его в строку».Теперь есть библиотека Microsoft.TeamFoundation.Build.Workflow, которая выполняет некоторую обработку этого, но, похоже, для .net 4, а сервер tfs работает в .net 2 и не может связать его.Этот метод обсуждается в широко связанном http://blogs.msdn.com/b/jpricket/archive/2010/03/25/tfs2010-queuing-a-build-from-code-with-custom-process-parameter-values.aspx, но он просто использует метод DeserialzeProcessParameters, к которому у меня нет доступа.

Я просто пытаюсь обновить несколько значений, и я могу сделать этов паре строк PowerShell, поэтому я думал, что смогу решить ее самостоятельно, но у меня возникли проблемы.

Параметры Buildrequest.parameter по умолчанию для запроса на сборку выглядят следующим образом (w / the / r /n преобразуется в новые строки. Его можно проанализировать как innerXml XmlDocument).

Если у меня есть документ xml, как показано ниже, как в c # я могу адресовать и обновлять значения, скажем, RestoreDatabase?

<Dictionary x:TypeArguments="x:String, x:Object" xmlns="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:mtbw="clr-namespace:Microsoft.TeamFoundation.Build.Workflow;assembly=Microsoft.TeamFoundation.Build.Workflow" xmlns:mtbwa="clr-namespace:Microsoft.TeamFoundation.Build.Workflow.Activities;assembly=Microsoft.TeamFoundation.Build.Workflow" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
            <mtbwa:BuildSettings x:Key="BuildSettings" ProjectsToBuild="$/EJTest/TFSServerEventHandler/TFSServerEventHandler.sln">
                            <mtbwa:BuildSettings.PlatformConfigurations>
                                            <mtbwa:PlatformConfigurationList Capacity="0" />
                            </mtbwa:BuildSettings.PlatformConfigurations>
            </mtbwa:BuildSettings>
            <mtbwa:TestSpecList x:Key="TestSpecs" Capacity="0" />
            <mtbwa:CodeAnalysisOption x:Key="RunCodeAnalysis">Never</mtbwa:CodeAnalysisOption>
            <x:Boolean x:Key="AssociateChangesetsAndWorkItems">False</x:Boolean>
            <x:Boolean x:Key="CreateWorkItem">False</x:Boolean>
            <x:Boolean x:Key="DropBuild">False</x:Boolean>
            <x:Boolean x:Key="PerformTestImpactAnalysis">False</x:Boolean>
            <x:Boolean x:Key="CreateLabel">False</x:Boolean>
            <x:Boolean x:Key="DisableTests">True</x:Boolean>
            <mtbw:BuildVerbosity x:Key="Verbosity">Detailed</mtbw:BuildVerbosity>
            <x:String x:Key="BuildNumber">4.4.2.29</x:String>
            <x:String x:Key="BackupDatabase">yes</x:String>
            <x:String x:Key="RestoreDatabase">Yes</x:String>
            <x:String x:Key="OverwriteBackup">Yes</x:String>
            <x:String x:Key="UpgradeSoftware">No</x:String>
            <x:String x:Key="DeploymentTicket">654</x:String>
</Dictionary>

Значения x: string являютсяЯ хочу обновить и изменить.

Для чего это стоит, версия PS

[xml]$a = Get-Content .\test.xml
$b = $a.Dictionary.string | where {$_.key -eq "CustomerData"}
$b."#text" = 'No'

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 05 марта 2012

хорошо, я пробился через это.не уверен, что это самый эффективный способ, но, похоже, он работает:

        XmlDocument xDoc = new XmlDocument();
        xDoc.Load("test.xml");
        XmlNodeList elemList = xDoc.GetElementsByTagName("x:String");

        foreach (XmlNode xNode in elemList)
        {
            switch (xNode.Attributes[0].Value)
            {
                case "BuildNumber":
                    Console.WriteLine(xNode.Attributes[0].Value + " = " + xNode.InnerText);
                    xNode.InnerText = "4.3w2432.2";
                    break;

                case "BackupDatabase":
                    Console.WriteLine(xNode.Attributes[0].Value + " = " + xNode.InnerText);
                    xNode.InnerText = "4.3w2432.2";
                    break;

                case "RestoreDatabase":
                    Console.WriteLine(xNode.Attributes[0].Value + " = " + xNode.InnerText);
                    xNode.InnerText = "4.3w2432.2";
                    break;

                case "OverwriteBackup":
                    Console.WriteLine(xNode.Attributes[0].Value + " = " + xNode.InnerText);
                    xNode.InnerText = "4.3w2432.2";
                    break;

                case "UpgradeSoftware":
                    Console.WriteLine(xNode.Attributes[0].Value + " = " + xNode.InnerText);
                    xNode.InnerText = "4.3w2432.2";
                    break;

                case "DeploymentTicket":
                    Console.WriteLine(xNode.Attributes[0].Value + " = " + xNode.InnerText);
                    xNode.InnerText = "4.3w2432.2";
                    break;


            }
0 голосов
/ 01 марта 2012

Поскольку dll среды сборки - это dll .net 4.0, а ваша текущая dll вам нужно либо использовать адаптер (http://code.msdn.microsoft.com/windowsdesktop/Using-a-NET-4-Based-DLL-bb141db3, таким образом вы можете начать сборку обычно, используя объектную модель), либо запустить сборку, используя tfsbuild. Отлично из кода. Это потому, что ваши значения не сериализованы иначе.

Поскольку вы указали те же функции в PowerShell, я думал, что вы уже в PowerShell. Если это так, вы можете просто запустить командную строку tfsbuild.exe, чтобы запустить сборку. однако это не тот случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...