【问题标题】:Modify Build process parameter by TFS API in C#在 C# 中通过 TFS API 修改构建过程参数
【发布时间】:2015-09-09 04:34:37
【问题描述】:

我尝试通过使用 TFS API 的 C# 程序设置构建过程参数。此 BuildDefinition 是 BuildDeployTest 工作流(稍微修改 LabDefaultTemplate.11.xaml)。我可以通过此代码更改所有实验室流程设置(实验室工作流程参数):

System.Collections.Generic.IDictionary<string, object> myDictionary = Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters);
foreach (var Parameter in myDictionary)
{
    if (Parameter.Key == "LabWorkflowParameters")
    {
        // copy the entry
        Microsoft.TeamFoundation.Lab.Workflow.Activities.LabWorkflowDetails myCopy = Parameter.Value as Microsoft.TeamFoundation.Lab.Workflow.Activities.LabWorkflowDetails;
        foreach(TestAgentListItem testAgent in listOfTestAgents)
        {
            if(testAgent.Checked == true)
            {
                myCopy.EnvironmentDetails.LabEnvironmentName = testAgent.TestAgentName;
                myCopy.EnvironmentDetails.LabEnvironmentUri = new Uri(testAgent.LabEnvironmentUri);
                break;
            }

        }

        myDictionary[Parameter.Key] = myCopy;
    }
    break;
}

request.ProcessParameters = Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers.SerializeProcessParameters(myDictionary);

// trigger a new Build
buildServer.QueueBuild(request);

我有另一个名为“TestDirectory”的构建过程参数,它显示在构建过程参数 -> 3. Misc -> TestDirectory 下。我试图改变这个参数 myDictionary["TestDirectory"] = @"TestDir"; 但它没有改变。 在 PowerShell 中,我只需键入即可更改此参数

[Microsoft.TeamFoundation.Build.Client.IBuildDefinition] $BuildDef = $buildserver.GetBuildDefinition($project,$buildDefinition)
[Microsoft.TeamFoundation.Build.Client.IBuildRequest] $BuildReq = $BuildDef.CreateBuildRequest();
$processParameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($BuildReq.ProcessParameters)
$processParameters.TestDirectory = "TestDir"

但是如何用 C# 做到这一点?

问候

【问题讨论】:

    标签: c# powershell tfs


    【解决方案1】:

    如果你已经指定了值,它不会改变。

    试试下面:

    string argumentName = "TestDirectory";
    var process = Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers.DeserializeProcessParameters(BuildDefinition.ProcessParameters);
    
    if (process.ContainsKey(argumentName))                             
    {
        process.Remove(argumentName);
        process.Add(argumentName, attributeValue);
        BuildDefinition.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(process);
        BuildDefinition.Save();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-09
      • 2014-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-08
      • 2020-02-20
      • 1970-01-01
      相关资源
      最近更新 更多