我对 C# 相当陌生,没有使用它进行 API 调用的经验。我也是 Azure Devops 的完全初学者,最近才开始通过工作与其进行交互。
我用 C# 开发了一个控制台应用程序,它对 CSV 文件进行一些 ETL 工作。目前,我必须使用查询结果上的“导出到 CSV”选项,从各种 Azure Devops 项目手动下载这些 CSV(参见屏幕截图)
有没有办法可以通过 C# 连接到此查询的结果,而不必在运行应用程序之前手动下载它们?
我一开始以为可以通过 Visual Studio 连接到 Azure DevOps 项目来访问结果,但是当我连接到该项目时,我不再打开我的应用程序解决方案。
我做了一些谷歌搜索,发现以下 Nuget 包可能会有所帮助:
Microsoft.TeamFoundationServer.Client
Microsoft.VisualStudio.Services.Client
但是我找不到任何有用的文档告诉我如何使用它们。我知道有一个我可以使用的 Azure Devops REST API,但我不知道如何将它与 C# 一起使用,也找不到任何有用的文章。
我已在 Azure Devops 上创建了个人访问令牌,但不知道如何在 Visual Studio 中使用它。
也许我缺乏经验和知识意味着我没有在谷歌中使用正确的搜索文本,但我完全被难住了。
我发现的唯一文章是带有具体示例的 Microsoft Learn 文章,但我从未发现这些文章有帮助,因为它们已经假设了高水平的知识,而我没有。
我不是在寻找现成的书面解决方案,而是在一些指导和/或一些解释如何实现我的目标的链接之后。也许我可以遵循一些教程,因为我想学习如何自己执行此操作,而不是简单地插入我无法自行排除故障的工作解决方案。
如果我的问题不清楚并需要任何帮助,请提前道歉。
干杯
史蒂夫
好的,所以我找到了一些代码,我对其进行了稍微修改以按照我需要的方式工作。
这是我用来使用个人访问令牌建立连接的代码,我正在从嵌入式资源文件中读取该连接。
static void ConnectWithPAT(string ServiceURL, string PAT)
{
VssConnection connection = new VssConnection(new Uri(ServiceURL), new VssBasicCredential(string.Empty, PAT));
InitClients(connection);
}
InitClients方法如下(这一点我没碰过):
static void InitClients(VssConnection Connection)
{
WitClient = Connection.GetClient<WorkItemTrackingHttpClient>();
BuildClient = Connection.GetClient<BuildHttpClient>();
ProjectClient = Connection.GetClient<ProjectHttpClient>();
GitClient = Connection.GetClient<GitHttpClient>();
TfvsClient = Connection.GetClient<TfvcHttpClient>();
TestManagementClient = Connection.GetClient<TestManagementHttpClient>();
}
然后有一个执行WIQL代码的方法:
static void RunStoredQuery(string project, string queryPath)
{
QueryHierarchyItem query = WitClient.GetQueryAsync(project, queryPath, QueryExpand.Wiql).Result;
string wiqlStr = query.Wiql;
GetQueryResult(wiqlStr, project);
}
GetQueryResult 方法调用另一个名为 RunQueryByWiql 的方法 -
WorkItemQueryResult result = RunQueryByWiql(wiqlStr, teamProject);
static WorkItemQueryResult RunQueryByWiql(string wiqlStr, string teamProject)
{
Wiql wiql = new Wiql();
wiql.Query = wiqlStr;
if (teamProject == "") return WitClient.QueryByWiqlAsync(wiql).Result;
else return WitClient.QueryByWiqlAsync(wiql, teamProject).Result;
}
然后我只需使用 StreamWriter 将结果写入 CSV 文件。
非常感谢@gunr2171 的指导。我终于到了那里。
干杯
史蒂夫