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复制到字符串时出错.
解决了.问题是读者.我将最后两行更改为
var diff = Encoding.UTF8.GetString(stream.ToArray());
Run Code Online (Sandbox Code Playgroud)
我终于得到了一些差异.