以编程方式在TFS中的两个版本的文件之间获得差异

kam*_*ilk 11 c# tfs tfs-sdk tfs2010

我正在尝试编写一个代码,在给定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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是一旦执行了这段代码,变量diff就是一个空字符串,即使我确定文件已在minRevision和之间被修改过了maxRevision.

如果该文件不存在minRevision或被删除maxRevision,此代码也会抛出异常,但这似乎是一个问题,以后解决,一旦我得到这个东西处理只编辑的文件.

编辑

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

kam*_*ilk 9

解决了.问题是读者.我将最后两行更改为

var diff = Encoding.UTF8.GetString(stream.ToArray());
Run Code Online (Sandbox Code Playgroud)

我终于得到了一些差异.

  • TFS存储文件编码 - 而不是假设UTF8,而是使用它可能是有用的. (4认同)