c# - 以编程方式获取 TFS 中文件的两个版本之间的差异

标签 c# tfs tfs-sdk

我正在尝试编写一个代码,给定一个 TFS 存储库中的项目路径和两个修订版,该代码将计算这两个时刻的内容文件之间的差异。现在代码可能如下所示:

using (var projectCollection = new TfsTeamProjectCollection(new Uri(repositoryUrl)))
{
    projectCollection.EnsureAuthenticated();
    var versionControlServer = (VersionControlServer)projectCollection.GetService(typeof(VersionControlServer));

    string path = "$/MyProject/path/to/file.xml"

    var before = new DiffItemVersionedFile(versionControlServer, path, VersionSpec.ParseSingleSpec(minRevision.ToString(), null));
    var after = new DiffItemVersionedFile(versionControlServer, path, VersionSpec.ParseSingleSpec(maxRevision.ToString(), null));

    using (var stream = new MemoryStream())
    using (var writer = new StreamWriter(stream))
    {
        var options = new DiffOptions();
        options.Flags = DiffOptionFlags.EnablePreambleHandling;
        options.OutputType = DiffOutputType.Unified;
        options.TargetEncoding = Encoding.UTF8;
        options.SourceEncoding = Encoding.UTF8;
        options.StreamWriter = writer;
        Difference.DiffFiles(versionControlServer, before, after, options, path, true);
        writer.Flush();

        var reader = new StreamReader(stream);
        var diff = reader.ReadToEnd();
    }
}

但是一旦执行此代码,变量 diff 就是一个空字符串,即使我确定该文件已在 minRevisionmaxRevision< 之间修改

如果文件在 minRevision 不存在或者在 maxRevision 被删除,这段代码也会抛出异常,但这似乎是一个需要稍后解决的问题,一旦我得到这个东西,它就可以处理只被编辑过的文件。

编辑

检查了临时文件后,我确定文件的两个版本都已正确下载。 diff 的计算或将 diff 写入流或将 diff 复制到字符串时出现问题。

最佳答案

已解决。问题是读者。在我将最后两行更改为

var diff = Encoding.UTF8.GetString(stream.ToArray());

我终于得到了一些差异。

关于c# - 以编程方式获取 TFS 中文件的两个版本之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11263251/

相关文章:

c# - 调用 `Workspace.PendAdd` 未添加项目

c# - 组合框的复合 DisplayMemberPath

c# - 是否使用 TDD 进行构造函数注入(inject)?

tfs - 生成服务器上的Installshield限量版许可

visual-studio-2012 - TFS 2013 Web 访问“部署”选项卡

tfsbuild - TFS 2010 API,确定构建在哪个构建服务器上运行。

c# - 使用 TFS SDK 查询源代码管理权限时的性能问题

c# - Entity Framework 不保存对象

c# - 安装 Web Essentials 和 Web Compiler 后 Razor 编辑器格式不工作

vb.net - Visual Studio Online 无法在构建服务器上的类库中找到类中的函数