使用TFS API进行差异化

时间:2012-02-27 23:54:24

标签: visual-studio-2010 c#-4.0 tfs diff

有没有人知道是否可以对不受源代码管理的文件使用TFS Difference.DiffFiles()方法?我知道当我在源代码控制UI中时,我可以选择让我移动到工作区之外的本地路径。我已经做了一些努力使这个工作,但我不知道如何阅读DiffSegment结果。

    options.Flags = DiffOptionFlags.None;
    options.OutputType = DiffOutputType.Unified;
    options.TargetEncoding = Console.OutputEncoding;
    options.SourceEncoding = Console.OutputEncoding;
    options.StreamWriter = new StreamWriter(memStream);
    options.StreamWriter.AutoFlush = true;

    DiffSegment seg = Difference.DiffFiles(pathA, Encoding.UTF8.WindowsCodePage, pathB, Encoding.UTF8.WindowsCodePage, options);

在一些精简测试中,我似乎可以看到添加的段但是OriginalStart似乎与ModifiedStart匹配,所以我可能不想这样做。如果有人对一个体面的Diff API提出建议,我就会打开。

2 个答案:

答案 0 :(得分:9)

tfs api绝对允许您比较两个本地文件。我认为您不需要大多数DiffOptionFlags,您可以执行以下操作:

DiffSegment segment = Difference.DiffFiles(
    file1, 
    FileType.Detect(file1, null), 
    file2, 
    FileType.Detect(file2, null), 
    new DiffOptions());

正如穆罕默德简要介绍here

Russell详细介绍了如何处理DiffSegment here

例如,我做了以下

do
{
    Console.WriteLine(segment.Type + " " + segment.OriginalStart + " " + Segment.OriginalLength);
} while ((segment = segment.Next) != null);

希望这有帮助!

答案 1 :(得分:1)

我认为使用TFS API的答案可能是正确的,但我想我还提到,如果你不想使用Visual Studio启动编码,你可以使用Visual Studio启动的工具API。

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\diffmerge.exe

在VS2012和VS2013中:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsDiffMerge.exe

以下是用法:

Compare two files:
  diffmerge.exe Original Modified [OriginalLabel] [ModifiedLabel]
                [/ignoreeol] [/ignorespace] [/ignorecase] [/noprompt]
Merge three files into fourth file:
  diffmerge.exe /merge ServerInputFile LocalInputFile BaseInputFile ResultOutputFile
                [ServerInputFileLabel] [LocalInputFileLabel] [BaseInputFileLabel] [/noprompt]

Options:
  /merge - merge the files; without /merge, the files will be compared
  /ignoreeol - ignore end of line character differences
  /ignorespace - ignore differences consisting only of whitespace
  /ignorecase - ignore differences in casing
  /help - show this help message
  /noprompt - use Notepad for showing the diff or merge contents

因此,如果在没有/ merge标志的情况下调用diffmerge.exe,GUI将打开。我不确定这是否是你想要的行为,但我只是想提到它。