在TFS 2010中获取解决方案文件夹名称

时间:2011-08-01 12:38:41

标签: visual-studio-2010 tfs tfs2010

我很难在TFS放置位置获取解决方案文件夹名称。

我在以下的hirerchy中有一个.NET解决方案文件:

解决方案文件

- >解决方案文件夹A - >项目A

- >解决方案文件夹B - > B&B项目项目C

现在我希望我的放置位置应该像上面的项目层次结构一样进行自定义。

表示:在Drop Location中,它应该是:SolutionName - > SolutionFolderName - > ProjectName - > {build output}

通过在我的构建模板中实现自定义输出目录,即$(TeamBuildOutDir)\ $(SolutionName)\ $(MSBuildProjectName),我得到解决方案名称 - >项目名称 - >建立输出..

但我没有获得解决方案文件夹名称来构建我的输出。任何人都可以建议如何获取这个,以便我可以从我的项目文件中读取。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

您可以在项目中设置与解决方案文件夹名称对应的属性(例如$(SolutionFolder))。然后,您可以将输出目录设置为$(TeamBuildOutDir)\$(SolutionFolder)

答案 1 :(得分:0)

    public static TeamProject[] GetAllProjects(TfsTeamProjectCollection prjCollection)
    {   
        var versionControl = prjCollection.GetService<VersionControlServer>();
        return versionControl.GetAllTeamProjects(true);
    }
    public static ProjectCollection GetAllIterations(TfsTeamProjectCollection prjCollection)
    {
         var wiStore = prjCollection.GetService<WorkItemStore>();
         return wiStore.Projects;
    }

    /// <summary>
    /// function to get all system project name
    /// </summary>
    private void IterateFolder()
    {
        try
        {  var selectedProject = "EMRConversion";

            Project detailsOfTheSelectedProject = null;

            var projCollections = GetAllIterations(prjCollection);

            foreach (Project project in projCollections)
            {
                if (!String.IsNullOrEmpty(selectedProject))
                {
                    if (project.Name.ToString().Contains(selectedProject))
                    {
                        detailsOfTheSelectedProject = project;
                        break;
                    }
                }
            }

            if (detailsOfTheSelectedProject != null)
            {
                cmbSystemName.Items.Clear();

                foreach (Node area in detailsOfTheSelectedProject.AreaRootNodes)
                {
                    if (!(area.HasChildNodes))
                    {
                        cmbSystemName.Items.Add(area.Name);
                    }

                    foreach (Node item in area.ChildNodes)
                    {
                        cmbSystemName.Items.Add(item.Name);
                    }
                }


            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }