Этот вопрос очень похож на этот пост: Обновление сопоставлений источника , но я пытаюсь использовать BuildHttpClient вместо прямого вызова RestAPI.
Конечная цель - создатьскопируйте определение сборки / выпуска и используйте его для другого приложения.
Объект dr, который я передаю, представляет собой datarow, который содержит данные, которые я хотел бы использовать для обновления определения сборки.Вот код ClientConnection:
VssConnection connection = new VssConnection(serverUrl, new VssCredentials());
BuildHttpClient bdClient = connection.GetClient<BuildHttpClient>();
// using Wait on the task
Task<BuildDefinition> templateTask = bdClient.GetDefinitionAsync(teamProjectName, IDtoClone);
templateTask.Wait();
BuildDefinition updatedDefinition = ReplaceBuildParameters(templateTask.Result, dr);
Task<BuildDefinition> updatedTask = bdClient.CreateDefinitionAsync(updatedDefinition, teamProjectName);
updatedTask.Wait();
return updatedTask.Result;
Обновление
На основе приведенных ниже отзывов Энди я обновил код.Вместо того, чтобы пытаться обновить объект свойства, я заменяю его.Я думаю, у меня это работает, у меня осталось несколько тестов для проверки.Я пытаюсь использовать JObject, чтобы получить значение и обновить его после модификации.
private static BuildDefinition ReplaceBuildParameters(BuildDefinition resultDef, DataRow dr)
{
resultDef.Name = "myCreateBuildAttempt";
resultDef.Path = "\\Templates\\POCSandbox";
foreach (DataColumn column in dr.Table.Columns)
{
switch (column.ColumnName)
{
case "ServerPath":
JObject tfvcObj = new JObject();
foreach (KeyValuePair<string, string> prop in resultDef.Repository.Properties)
{
if (prop.Key == "tfvcMapping")
{
KeyValuePair<string, string> myPath = new KeyValuePair<string, string>("serverPath", "$/MASTER/PRES");
tfvcObj = JObject.Parse(prop.Value);
var mappings = tfvcObj["mappings"];
JToken myToken = JToken.Parse(mappings[0].ToString());
myToken["serverPath"] = "$/MASTER/PRES";
mappings[0] = myToken;
tfvcObj["mappings"] = mappings;
}
}
resultDef.Repository.Properties["tfvcMapping"] = tfvcObj.ToString(Newtonsoft.Json.Formatting.None);
break;
default:
break;
}
}
return resultDef;
}