1

我需要从现有的 TFS 2012 安装中收集信息,并且管理员在团队项目描述中放入了一些有用的数据。

我认为检索它很容易,但我看不到 Microsoft.TeamFoundation.WorkItemTracking.Client.Project 或 Microsoft.TeamFoundation.Server.ProjectInfo 的任何属性公开的这些数据。我想查询 Collection 数据库,但表 tbl_projects 和 tbl_project_properties 没有描述数据。

4

2 回答 2

2

我相信 Microsoft.TeamFoundation.Framework.Client.CatalogResource 类具有您正在寻找的 Description 属性。下面的代码连接到 TFS 配置服务器,然后写出项目集合和团队项目名称和描述。

    private static void WriteOutTeamProjects()
    {
        // Connect to Team Foundation Server
        //     Server is the name of the server that is running the application tier for Team Foundation.
        //     Port is the port that Team Foundation uses. The default port is 8080.
        //     VDir is the virtual path to the Team Foundation application. The default path is tfs.
        Uri tfsUri = new Uri("http://vsalm:8080/tfs/");

        TfsConfigurationServer configurationServer = TfsConfigurationServerFactory.GetConfigurationServer(tfsUri);

        // Get the catalog of team project collections
        ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren(new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None);

        // List the team project collections
        foreach (CatalogNode collectionNode in collectionNodes)
        {
            // Use the InstanceId property to get the team project collection
            Guid collectionId = new Guid(collectionNode.Resource.Properties["InstanceId"]);
            TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection(collectionId);

            // Print the name of the team project collection
            Console.WriteLine("Collection: " + teamProjectCollection.Name);

            // Get a catalog of team projects for the collection
            ReadOnlyCollection<CatalogNode> projectNodes = collectionNode.QueryChildren(new[] { CatalogResourceTypes.TeamProject }, false, CatalogQueryOptions.None);

            // List the team projects in the collection
            foreach (CatalogNode projectNode in projectNodes)
            {                    
                Console.WriteLine(" Team Project: " + projectNode.Resource.DisplayName);
                Console.WriteLine("  Description: " + projectNode.Resource.Description);
            }
        }

        Console.WriteLine("Press any key to finish...");
        Console.ReadKey();
    }
于 2014-02-24T16:18:10.490 回答
0

配置数据库上的这个查询给出了相同的数据。

SELECT [DisplayName] AS ProjectName, [Description] AS ProjectDescription
FROM [Tfs_Configuration].[dbo].[tbl_CatalogResource]
WHERE ResourceType = (
    SELECT [Identifier]
    FROM [Tfs_Configuration].[dbo].[tbl_CatalogResourceType] WHERE [DisplayName] = 'Team Project')
ORDER BY 1
于 2014-02-24T16:36:22.887 回答