Я использовал JetBrains dotPeek , чтобы узнать, как Microsoft сериализует и десериализует Dictionary<string, object>
для TFS 2010 Workflow.
Для десериализации используются: Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers.DeserializeProcessParameters(string parameterValues)
Для сериализации используются: WorkflowHelpers.SerializeProcessParameters(IDictionary<string, object> parameterValues)
Сборка: Microsoft.TeamFoundation.Build.Workflow.dll
Моя первоначальная проблема заключалась в том, что я пытался добавить IBuildRequest.ProcessParameters
значений перед установкой в очередь.
private static void SetProcessParametersForSubBuild(IBuildRequest buildRequest, Dictionary<string, object> processParametersForSubBuild, IBuildDefinition buildDefinition)
{
var subBuildProcessParameters = WorkflowHelpers.DeserializeProcessParameters(buildDefinition.ProcessParameters);
if (processParametersForSubBuild.Any())
{
foreach (var processParameter in processParametersForSubBuild)
{
if (subBuildProcessParameters.ContainsKey(processParameter.Key))
{
subBuildProcessParameters[processParameter.Key] = processParameter.Value;
}
else
{
subBuildProcessParameters.Add(processParameter.Key, processParameter.Value);
}
}
buildRequest.ProcessParameters = WorkflowHelpers.SerializeProcessParameters(subBuildProcessParameters);
}
}
ОчередьСборка:
var queuedBuild = buildServer.QueueBuild (buildRequest);