Я попытался установить параметр процесса сборки программой 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#?
С уважением
Спасибо, что сделал трюк! :-) – MisterGray