首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Microsoft.TeamFoundation.VersionControl.Client从VersionSpec下载特定文件

使用Microsoft.TeamFoundation.VersionControl.Client从VersionSpec下载特定文件
EN

Stack Overflow用户
提问于 2017-07-08 10:36:24
回答 1查看 563关注 0票数 0

我正在尝试做的是找到在特定时间范围内推送到我的Test TFS Team Project中的所有.sql脚本,然后获得一个链接来查看文件或将该副本下载到我的工作区之外。所以我不一定要获取最新版本。这将使应用程序检查在特定时间范围内执行的所有特定.sql更改,然后我将把这些文件与分支环境进行比较,以确定哪个.sql被复制并针对数据库运行。

我被困在查看文件或下载文件的链接上。我预见到的下载文件的问题是,我将下载数百个文件,而我最终要做的是查看每个文件,以确定是否可以在测试之外的不同环境中重新运行.sql脚本。

代码语言:javascript
运行
复制
 public void GetChangesets(DataTable files,
                           bool excludeManualDatabaseFiles,
                           bool containsExcludedDerictoriesAndFiles)
    {
        // this gets collection-lvl services, in contrast to TfsConfigurationServer (server-lvl)
        Uri serverUri = new Uri("<insert serverUri>");
        var tpc = new TfsTeamProjectCollection(serverUri);
        var vcs = tpc.GetService<VersionControlServer>();

        DateTime testDate;
        DateTime.TryParse("2017-07-01", out testDate);

        VersionSpec fromDateVersion = new DateVersionSpec(testDate);
        VersionSpec toDateVersion = new DateVersionSpec(DateTime.Now);

        vcs.QueryRootBranchObjects(RecursionType.Full);

        string teamProjectName = "<insert team project name>";
        TeamProject[] tps = new TeamProject[]
        {
            vcs.GetTeamProject(teamProjectName)
        };

        DataTable returnedChangesetDetail = new DataTable();
        // Step 1: THIS WORKS
        returnedChangesetDetail.Columns.Add("FileName");
        // Step 2: THIS DOES NOT WORK, this is currently empty !!!!!!
        returnedChangesetDetail.Columns.Add("Uri");


        foreach(TeamProject tp in tps)
        {
            IEnumerable changesets = vcs.QueryHistory(string.Concat("$/", tp.Name, "/Test/SQL"), 
                VersionSpec.Latest,
                deletionId: 0,
                recursion: RecursionType.Full,
                user: null,
                versionFrom: fromDateVersion,
                versionTo: toDateVersion,
                maxCount: int.MaxValue,
                includeChanges: true,
                slotMode: true);



            foreach(Changeset changeset in changesets)
            {

                foreach(Change change in changeset.Changes)
                {
                    string fileName = change.Item.ServerItem;
                    // I think this would be it but its not an accessible link, do I add/remove
                    // something to make this a Uri?
                    //var artifactUrui = change.Item.ArtifactUri; 

                    // Step 1: WORKING
                    lstbxFileNames.Items.Add(fileName);

                 }
            }

        }

    }

我希望这些评论能解释我正在寻找的东西。这将是一个非开发,但技术用户能够审查他们的环境所需的变化的应用程序。他们将需要检查大约100个文件,我认为Uri对他们来说是一种简单的方式来查看更改,然后选择他们需要的文件,同时忽略在步骤1中发现的更改,但确定不需要。

EN

回答 1

Stack Overflow用户

发布于 2017-07-11 10:39:18

没有该文件的下载URL。

或者,您可以提供一个带有路径和版本(日期)参数的button/hyperlink,然后使用DownloadFile方法下载文件(临时文件),并将内容流(按流读取内容)发送到客户端,让用户在按钮/超链接单击event中保存到本地。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44981976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档