C# 从TFS获取当前迭代路径
我正在尝试获取团队TFS项目的当前迭代路径。我尝试这样做的方式是使用来自的博客。我首先从以下代码获取团队配置:C# 从TFS获取当前迭代路径,c#,.net,tfs,tfs-sdk,C#,.net,Tfs,Tfs Sdk,我正在尝试获取团队TFS项目的当前迭代路径。我尝试这样做的方式是使用来自的博客。我首先从以下代码获取团队配置: TfsTeamProjectCollection tpc = TFSConncetion(@"http://tfs/url"); var configSvc = tpc.GetService<TeamSettingsConfigurationService>(); var configs = configSvc.GetTeam
TfsTeamProjectCollection tpc = TFSConncetion(@"http://tfs/url");
var configSvc = tpc.GetService<TeamSettingsConfigurationService>();
var configs = configSvc.GetTeamConfigurationsForUser(projectUri);
即使这不起作用,我仍然可以从团队设置中查询迭代日期,以获得一个迭代,该迭代的开始日期在今天之前,完成日期在今天之后。主要问题是,当我尝试使用我的项目URI获取团队配置时,我无法让我的TeamSettingsConfigurationService返回null以外的任何内容 您的服务器连接或传递的项目uri一定有问题,因为其他代码看起来没有问题 也许可以试试这样:
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri("http://server:8080/tfs/collection"),
new System.Net.NetworkCredential(tfsUserName, tfsPassword));
tpc.EnsureAuthenticated();
这里有一个很好的示例,您可以下载(WPF客户端),它允许您选择服务器连接、团队项目和团队:
您可以单步执行它并检查传递到代码中的值
TeamSettingsConfigurationService teamConfig = tfs.GetService<TeamSettingsConfigurationService>();
var configs = teamConfig.GetTeamConfigurationsForUser(new[] { projectInfo.Uri });
该示例获取团队配置信息的方式与代码中的方式相同
TeamSettingsConfigurationService teamConfig = tfs.GetService<TeamSettingsConfigurationService>();
var configs = teamConfig.GetTeamConfigurationsForUser(new[] { projectInfo.Uri });
teamSettingsConfiguration服务teamConfig=tfs.GetService();
var configs=teamConfig.getteamconfigurationsfourser(新[]{projectInfo.Uri});
一旦你收集了
TeamConfiguration
项,你就需要TeamSettings.CurrentIterationPath
我实际上自己没有使用TeamSettings配置服务就得到了答案。我是这样做的:
private static XmlNode currentIterationNode;
TfsTeamProjectCollection tpc = TFSConncetion(@"http://tfs/url");
ICommonStructureService4 css = tpc.GetService<ICommonStructureService4>();;
WorkItemStore workItemStore = new WorkItemStore(tpc);
foreach (Project teamProject in workItemStore.Projects)
{
if (teamProject.Name.Equals("TeamProjectNameGoesHere"))
{
NodeInfo[] structures = css.ListStructures(teamProject.Uri.ToString());
NodeInfo iterations = structures.FirstOrDefault(n => n.StructureType.Equals("ProjectLifecycle"));
if (iterations != null)
{
XmlElement iterationsTree = css.GetNodesXml(new[] { iterations.Uri }, true);
XmlNodeList nodeList = iterationsTree.ChildNodes;
currentIterationNode = FindCurrentIteration(nodeList);
String currentIterationPath = currentIterationNode.Attributes["Path"].Value;
}
}
}
之后,我创建了一个xml,其中包含团队项目中每个迭代的节点。这些节点还具有每个迭代的开始日期和结束日期。所以我检查了每个节点的开始日期是否早于DateTime。现在和结束日期是否晚于DateTime。现在,这就是FindCurrentIteration(nodeList)所做的。
这将为您提供当前迭代节点 我发现最简单的方法是使用
ICommonStructureService4
和TeamSettingsConfigurationService
方法:
static TfsTeamProjectCollection _tfs = TfsTeamProjectCollectionFactory
.GetTeamProjectCollection("<tfsUri>")
(...)
static string GetCurrentIterationPath()
{
var css = _tfs.GetService<ICommonStructureService4>();
var teamProjectName = "<teamProjectName>";
var project = css.GetProjectFromName(teamProjectName);
var teamName = "<teamName>";
var teamSettingsStore = _tfs.GetService<TeamSettingsConfigurationService>();
var settings = teamSettingsStore
.GetTeamConfigurationsForUser(new[] { project.Uri })
.Where(c => c.TeamName == teamName)
.FirstOrDefault();
if (settings == null)
{
var currentUser = System.Threading.Thread.CurrentPrincipal.Identity.Name;
throw new InvalidOperationException(
$"User '{currentUser}' doesn't have access to '{teamName}' team project.");
}
return settings.TeamSettings.CurrentIterationPath;
}
static tfstreamprojectcollection\u tfs=tfstreamprojectcollectionfactory
.GetTeamProjectCollection(“”)
(...)
静态字符串GetCurrentIterationPath()
{
var css=_tfs.GetService();
var teamProjectName=“”;
var project=css.GetProjectFromName(teamProjectName);
var teamName=“”;
var teamsetingsstore=_tfs.GetService();
var设置=团队设置存储
.getteamconfigurationsfourser(新[]{project.Uri})
.其中(c=>c.TeamName==TeamName)
.FirstOrDefault();
如果(设置==null)
{
var currentUser=System.Threading.Thread.CurrentPrincipal.Identity.Name;
抛出新的InvalidOperationException(
$“用户“{currentUser}”无权访问“{teamName}”团队项目。”);
}
返回settings.TeamSettings.CurrentIterationPath;
}
我同意@rerwinRR的说法,我的项目uri可能有问题,但我实际上是在使用Shai Raiten的博客来交叉检查uri的值。我肯定我的服务器连接正常。我确实找到了一种不使用TeamSettingsConfiguration服务的方法,并发布了解决方案。我不知道您在哪里使用了WebClient
。该WebClient后来在代码中用于使用当前迭代路径从TFS下载图像。在这个问题上,我现在明白这是没有必要的
static TfsTeamProjectCollection _tfs = TfsTeamProjectCollectionFactory
.GetTeamProjectCollection("<tfsUri>")
(...)
static string GetCurrentIterationPath()
{
var css = _tfs.GetService<ICommonStructureService4>();
var teamProjectName = "<teamProjectName>";
var project = css.GetProjectFromName(teamProjectName);
var teamName = "<teamName>";
var teamSettingsStore = _tfs.GetService<TeamSettingsConfigurationService>();
var settings = teamSettingsStore
.GetTeamConfigurationsForUser(new[] { project.Uri })
.Where(c => c.TeamName == teamName)
.FirstOrDefault();
if (settings == null)
{
var currentUser = System.Threading.Thread.CurrentPrincipal.Identity.Name;
throw new InvalidOperationException(
$"User '{currentUser}' doesn't have access to '{teamName}' team project.");
}
return settings.TeamSettings.CurrentIterationPath;
}