2015-06-23 2 views
1

Я попытался установить параметр процесса сборки программой C#, которая использует TFS API. Этот BuildDefinition - это рабочий процесс BuildDeployTest (слегка модифицированный LabDefaultTemplate.11.xaml). Я могу изменить все параметры Lab Process (Lab Workflow параметров) с помощью этого кода:Изменить параметр процесса сборки с помощью TFS API в C#

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#?

С уважением

ответ

4

Если вы присвоили значение уже не изменится.

Попробуйте ниже:

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

Спасибо, что сделал трюк! :-) – MisterGray