在C#TFS API修改构建过程参数(Modify Build process parameter

2019-10-23 11:34发布

我试图通过使用TFS API C#程序设置一个Build工艺参数。 这BuildDefinition是BuildDeployTest工作流程(略modifie 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.杂项 - > 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#?

问候

Answer 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();
}


文章来源: Modify Build process parameter by TFS API in C#