Ejemplos de biblioteca cliente de C#
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
En los ejemplos siguientes se muestra cómo ampliar e integrar con Azure DevOps mediante las bibliotecas cliente de .NET.
Ejemplos en GitHub
En la página GitHub de ejemplo de .NET, puede encontrar muchos ejemplos con instrucciones sobre cómo ejecutarlos.
Otros ejemplos
Los ejemplos de REST de esta página requieren los siguientes paquetes NuGet:
- Microsoft.TeamFoundationServer.Client
- Microsoft.VisualStudio.Services.Client
- Microsoft.VisualStudio.Services.InteractiveClient
Ejemplo: Uso de un cliente HTTP basado en REST
// https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/
using Microsoft.TeamFoundation.WorkItemTracking.WebApi;
using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models;
// https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/
using Microsoft.VisualStudio.Services.Client;
// https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/
using Microsoft.VisualStudio.Services.Common;
/// <summary>
/// This sample creates a new work item query for New Bugs, stores it under 'MyQueries', runs the query, and then sends the results to the console.
/// </summary>
public static void SampleREST()
{
// Connection object could be created once per application and we use it to get httpclient objects.
// Httpclients have been reused between callers and threads.
// Their lifetime has been managed by connection (we don't have to dispose them).
// This is more robust then newing up httpclient objects directly.
// Be sure to send in the full collection uri, i.e. http://myserver:8080/tfs/defaultcollection
// We are using default VssCredentials which uses NTLM against an Azure DevOps Server. See additional provided
// Create a connection with PAT for authentication
VssConnection connection = new VssConnection(orgUrl, new VssBasicCredential(string.Empty, personalAccessToken));
// Create instance of WorkItemTrackingHttpClient using VssConnection
WorkItemTrackingHttpClient witClient = connection.GetClient<WorkItemTrackingHttpClient>();
// Get 2 levels of query hierarchy items
List<QueryHierarchyItem> queryHierarchyItems = witClient.GetQueriesAsync(teamProjectName, depth: 2).Result;
// Search for 'My Queries' folder
QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries"));
if (myQueriesFolder != null)
{
string queryName = "REST Sample";
// See if our 'REST Sample' query already exists under 'My Queries' folder.
QueryHierarchyItem newBugsQuery = null;
if (myQueriesFolder.Children != null)
{
newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName));
}
if (newBugsQuery == null)
{
// if the 'REST Sample' query does not exist, create it.
newBugsQuery = new QueryHierarchyItem()
{
Name = queryName,
Wiql = "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Bug' AND [System.State] = 'New'",
IsFolder = false
};
newBugsQuery = witClient.CreateQueryAsync(newBugsQuery, teamProjectName, myQueriesFolder.Name).Result;
}
// run the 'REST Sample' query
WorkItemQueryResult result = witClient.QueryByIdAsync(newBugsQuery.Id).Result;
if (result.WorkItems.Any())
{
int skip = 0;
const int batchSize = 100;
IEnumerable<WorkItemReference> workItemRefs;
do
{
workItemRefs = result.WorkItems.Skip(skip).Take(batchSize);
if (workItemRefs.Any())
{
// get details for each work item in the batch
List<WorkItem> workItems = witClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id)).Result;
foreach (WorkItem workItem in workItems)
{
// write work item to console
Console.WriteLine("{0} {1}", workItem.Id, workItem.Fields["System.Title"]);
}
}
skip += batchSize;
}
while (workItemRefs.Count() == batchSize);
}
else
{
Console.WriteLine("No work items were returned from query.");
}
}
}
Autenticación
Para cambiar el método de autenticación de Azure DevOps, cambie el tipo VssCredential pasado a VssConnection al crearlo.
Autenticación de Microsoft Entra para servicios REST
public static void AADRestSample()
{
// Create instance of VssConnection using Azure AD Credentials for Azure AD backed account
VssConnection connection = new VssConnection(new Uri(collectionUri), new VssAadCredential(userName, password));
}
Mensaje de inicio de sesión de Visual Studio (cuenta Microsoft o back-end de Microsoft Entra) para servicios REST (solo .NET Framework)
Dado que la versión de .NET Core no admite diálogos interactivos, este ejemplo solo se aplica a la versión de .NET Framework de los clientes.
public static void MicrosoftAccountRestSample()
{
// Create instance of VssConnection using Visual Studio sign-in prompt
VssConnection connection = new VssConnection(new Uri(collectionUri), new VssClientCredentials());
}
Autenticación de OAuth para servicios REST
Para más información, consulte Ejemplos de autenticación de Azure DevOps y Plataforma de identidad de Microsoft y flujo de código de autorización de OAuth 2.0.
public static void OAuthSample()
{
// Create instance of VssConnection using OAuth Access token
VssConnection connection = new VssConnection(new Uri(collectionUri), new VssOAuthAccessTokenCredential(accessToken));
}
Autenticación de token de acceso personal para servicios REST
public static void PersonalAccessTokenRestSample()
{
// Create instance of VssConnection using Personal Access Token
VssConnection connection = new VssConnection(orgUrl, new VssBasicCredential(string.Empty, personalAccessToken));
}