.net 解决方案获取与 TFS 中的变更集关联的文件

标签 .net tfs solution changeset

我有一个 .net 解决方案,可将一组变更集获取到配置文件 [values.xml] 中指定的 TFS 本地工作区中。将与变更集关联的文件下载到与工作区关联的本地工作文件夹后,我有一个单独的打包脚本,可以从这些文件中创建一个 msi。 .net 解决方案工作正常,但通常情况下。该问题在以下情况下出现:

假设我有一个变更集:C717171,它与我在 web.config 文件上所做的更改相关联。 配置文件 [values.xml] 在其中列出了此变更集,这意味着 .net 解决方案必须将此特定变更集放入 TFS 本地工作区,之后单独的打包脚本将接管。

实际发生的情况是,.net 解决方案将存储库中的所有 web.config 文件与所需的文件一起放置。

        var changesets = vcs.QueryHistory(repository, VersionSpec.Latest, 0, RecursionType.Full, null, versionFrom, versionTo, Int32.MaxValue, true, false).Cast<Changeset>();
            Workspace myworkspace = vcs.CreateWorkspace(workspaceName, tfsUser);
            var workingFolder = new WorkingFolder(repository, workspacePath);
            // create WorkingFolder and mapping
            myworkspace.CreateMapping(workingFolder);

            foreach (Changeset changeset in changesets.OrderBy(c => c.ChangesetId))
            {
                var version = new ChangesetVersionSpec(changeset.ChangesetId);

                foreach (Change change in changeset.Changes)
                {
                    myworkspace.Get(new[] { change.Item.ServerItem }, version, RecursionType.Full, GetOptions.Overwrite);
                }
            }

如果需要,我可以提供更多详细信息。

最佳答案

如果你想获取单个文件,则需要使用RecursionType.None,而不是RecursionType.Full

当您在文件路径上使用 RecursionType.Full 时,您指定您希望指定文件夹中具有该名称的文件以及任何文件子文件夹中具有相同的名称。

因此,如果您指定 $/Project/file.txt,它将下载 $/Project/file.txt 以及 $/Project/subdir1/file.txt$/Project/subdir2/file.txt

指定RecursionType.None完全匹配给定路径。

关于.net 解决方案获取与 TFS 中的变更集关联的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27824244/

相关文章:

.net - SSL 失败 - 将 HttpWebRequest 与客户端证书一起使用时收到 SSL/TLS 异常

c# - .NET 7 - 在我的 TaskScheduler 或 SynchronizationContext 中运行计时器回调

asp.net - ASP.NET 解决方案的典型结构?

visual-studio-2010 - VS 2010 : Where are solution settings stored?

C# string.Replace 用于删除 �?

git - 将 TFS 存储库迁移到 git

c# - 使用 C# 和 Rest API 将 TFS 版本部署到特定环境

visual-studio-2012 - 了解我正在哪个分支和哪个工作区工作的最佳方法是什么

两个图的Matlab解决方案

.net - 为什么将PSObject添加到Powershell中的ArrayList需要这么长时间?有更好的方法吗?