Estoy tratando de encontrar una manera de agregar una rama como enlace en Azure DevOps a través de una aplicación que estoy construyendo (Básicamente solo esto, pero dentro de una aplicación de consola C #).

Me estoy familiarizando con los servicios de VisualStudio y las bibliotecas de TeamFoundation .NET y he intentado, como ejemplo, tomar un elemento de trabajo con uno de estos enlaces ya creados a través de la interfaz de usuario de DevOps y transferirlo a otro elemento de trabajo de la siguiente manera:

var workItemWithBranchLink = await _WorkItemTrackingHttpClient.GetWorkItemAsync(3985, expand: WorkItemExpand.Relations);
var workItemWithoutBranchLink = await _WorkItemTrackingHttpClient.GetWorkItemAsync(3988, expand: WorkItemExpand.Relations);
var document = new JsonPatchDocument();
document.Add(new JsonPatchOperation()
{
    Operation = Operation.Add,
    Path = "/relations",
    Value = workItemWithBranchLink.Relations 
});
await _WorkItemTrackingHttpClient.UpdateWorkItemAsync(document, (int)workItemWithoutBranchLink.Id);

Sin embargo, esto arroja una excepción

Microsoft.VisualStudio.Services.WebApi.Patch.PatchOperationFailedException: 'El parche de elemento de trabajo no admite parchear la propiedad de nivel superior en la ruta / relaciones.

Como workItemWithoutBranchLink.Relations es nulo, no estoy seguro de qué otra forma podría parchearlo.

¿Alguna idea?

4
Nathan 6 feb. 2020 a las 03:42

2 respuestas

La mejor respuesta

Para los enlaces git, la sintaxis es un poco diferente, aquí hay un ejemplo de trabajo (para vincular la rama master):

VssConnection testConnection = new VssConnection(new Uri("azure-devops-uri"), new Microsoft.VisualStudio.Services.Common.VssCredentials());
var workItemClient = testConnection.GetClient<WorkItemTrackingHttpClient>();
var gitClient = testConnection.GetClient<GitHttpClient>();
string projectId = "cf456145-abgd-ffs23-be61-0fca39681234";
string repositoryId = "d6856145-abgd-42a3-be61-0fca3968c555";
var branchUri = string.Format
(
    "vstfs:///Git/Ref/{0}%2f{1}%2f{2}",
    projectId,
    repositoryId,
    "GBmaster"
);

var json = new JsonPatchDocument();
json.Add(
new JsonPatchOperation()
{
     Operation = Operation.Add,
     Path = "/relations/-",
     Value = new
     {
            rel = "ArtifactLink",
            url = branchUri,
            attributes = new
            {
                name = "Branch",
                comment = "Comment"
            }
     }
});

try
{
     int workItemToUpdate = 142144;
     var update = workItemClient.UpdateWorkItemAsync(json, workItemToUpdate).Result;
}
catch (Exception e)
{
     var error = e.Message;
}
1
Shayki Abramczyk 6 feb. 2020 a las 13:56

Intenta actualizar tu ruta a "/relations/-". No estoy seguro de si el formato del parche en la biblioteca .net sigue el Rest API pero parece probable debido al mensaje de error de propiedad de nivel superior. es decir, si agrega un /- ya no está en el nivel superior.

También parece ser el formato utilizado en este biblioteca de muestras.

1
Eric Smith 6 feb. 2020 a las 06:57