获取 TFS 构建详细信息时出现空引用异常
Null reference exception while getting TFS build details
我正在尝试从我的 TFS 服务器获取最新的构建详细信息,但以下行引发空引用异常。
ITestManagementTeamProject project = tms.GetTeamProject(proj.Name);
"An unhandled exception of type 'System.NullReferenceException' occurred in Microsoft.TeamFoundation.TestManagement.Client.dll
Additional information: Object reference not set to an instance of an object."
这是周边代码
using Microsoft.TeamFoundation.Server;
using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.TestManagement.Client;
class Program
{
static void Main(string[] args)
{
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(TfsTeamProjectCollection.GetFullyQualifiedUriForName("http://tfs2013-99-228:8080/tfs/si nhss"));
tfs.EnsureAuthenticated();
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
ITestManagementService tms = tfs.GetService<ITestManagementService>();
TeamProject[] teamProjects = vcs.GetAllTeamProjects(true);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
foreach (TeamProject proj in teamProjects)
{
IBuildDefinition[] defs = buildServer.QueryBuildDefinitions(proj.Name);
System.Console.WriteLine(string.Format("Team Project: {0}", proj.Name));
foreach (IBuildDefinition def in defs)
{
IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(proj.Name, def.Name);
spec.MaxBuildsPerDefinition = 10;
spec.QueryOrder = Microsoft.TeamFoundation.Build.Client.BuildQueryOrder.FinishTimeDescending;
spec.DefinitionSpec.Name = def.Name;
spec.Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.All;
IBuildQueryResult builds = buildServer.QueryBuilds(spec);
if (builds.Builds.Length > 0)
{
var buildDetail = builds.Builds[0];
ITestManagementTeamProject project = tms.GetTeamProject(proj.Name);
System.Console.WriteLine(string.Format(" {0} - {1} - {2}", def.Name, buildDetail.Status.ToString(), buildDetail.FinishTime));
}
}
System.Console.WriteLine();
}
}
}
您的参考资料可能有问题。我测试了您的脚本,它适用于安装的 Microsoft Team Foundation Server Extended Client 程序包。
- 删除当前引用
- 只需尝试安装 NuGet 包 Microsoft Team Foundation
Server Extended Client 通过 运行 下面的命令
包管理器控制台:
PM> Install-Package Microsoft.TeamFoundationServer.ExtendedClient
-Version 15.112.1
- 根据您的脚本添加以下参考:
using Microsoft.TeamFoundation.Client;
然后再试一次。
见下图,可以正确获取项目名称。
我正在尝试从我的 TFS 服务器获取最新的构建详细信息,但以下行引发空引用异常。
ITestManagementTeamProject project = tms.GetTeamProject(proj.Name);
"An unhandled exception of type 'System.NullReferenceException' occurred in Microsoft.TeamFoundation.TestManagement.Client.dll
Additional information: Object reference not set to an instance of an object."
这是周边代码
using Microsoft.TeamFoundation.Server;
using Microsoft.TeamFoundation.Build.WebApi;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.TestManagement.Client;
class Program
{
static void Main(string[] args)
{
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(TfsTeamProjectCollection.GetFullyQualifiedUriForName("http://tfs2013-99-228:8080/tfs/si nhss"));
tfs.EnsureAuthenticated();
VersionControlServer vcs = tfs.GetService<VersionControlServer>();
ITestManagementService tms = tfs.GetService<ITestManagementService>();
TeamProject[] teamProjects = vcs.GetAllTeamProjects(true);
IBuildServer buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));
foreach (TeamProject proj in teamProjects)
{
IBuildDefinition[] defs = buildServer.QueryBuildDefinitions(proj.Name);
System.Console.WriteLine(string.Format("Team Project: {0}", proj.Name));
foreach (IBuildDefinition def in defs)
{
IBuildDetailSpec spec = buildServer.CreateBuildDetailSpec(proj.Name, def.Name);
spec.MaxBuildsPerDefinition = 10;
spec.QueryOrder = Microsoft.TeamFoundation.Build.Client.BuildQueryOrder.FinishTimeDescending;
spec.DefinitionSpec.Name = def.Name;
spec.Status = Microsoft.TeamFoundation.Build.Client.BuildStatus.All;
IBuildQueryResult builds = buildServer.QueryBuilds(spec);
if (builds.Builds.Length > 0)
{
var buildDetail = builds.Builds[0];
ITestManagementTeamProject project = tms.GetTeamProject(proj.Name);
System.Console.WriteLine(string.Format(" {0} - {1} - {2}", def.Name, buildDetail.Status.ToString(), buildDetail.FinishTime));
}
}
System.Console.WriteLine();
}
}
}
您的参考资料可能有问题。我测试了您的脚本,它适用于安装的 Microsoft Team Foundation Server Extended Client 程序包。
- 删除当前引用
- 只需尝试安装 NuGet 包 Microsoft Team Foundation Server Extended Client 通过 运行 下面的命令 包管理器控制台:
PM> Install-Package Microsoft.TeamFoundationServer.ExtendedClient -Version 15.112.1
- 根据您的脚本添加以下参考:
using Microsoft.TeamFoundation.Client;
然后再试一次。
见下图,可以正确获取项目名称。