因此,我有一个 .NET 应用程序,它会生成一系列文件,将它们输出到本地目录,然后确定是否需要更新现有文件或将新文件添加到 TFS(Team Foundation Server)项目中。
我的本地计算机上有一个工作区,并且有 10 个不同的工作文件夹,它们是我在这台特定计算机上处理过的其他编码项目。当我去检查文件是否已存在于 TFS 项目中并且需要更新或者是否需要作为新文件添加到项目中时,我的问题发生了。
snipet:
static string TFSProject = @"$/SQLScripts/";
static WorkspaceInfo wsInfo;
static VersionControlServer versionControl;
static string argPath = "E:\\SQLScripts\\";
wsInfo = Workstation.Current.GetLocalWorkspaceInfo(argPath);
TeamFoundationServer tfs = new TeamFoundationServer(wsInfo.ServerUri.AbsoluteUri);
versionControl = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
Workspace workspace = versionControl.GetWorkspace(wsInfo);
workspace.GetLocalItemForServerItem(TFSProject);
此时,我检查文件是否存在,然后执行以下两件事之一。如果该文件存在,则我将该文件标记为“编辑”,然后将该文件写入本地目录,否则我将先编写该文件的脚本,然后将该文件添加到工作区。我不在乎物理文件是否与我生成的文件相同,因为我这样做是为了“跟踪更改”的 SAS70 要求
如果存在的话我会:
工作区.PendEdit(文件名,RecursionType.Full);
脚本输出文件(文件名);
或者如果它不存在
脚本输出文件名(文件名);
工作区.PendAdd(文件名,true);
好的,所有这些都是为了解决问题。当我检查项目的挂起更改时,我会得到工作区中本地计算机上所有项目的所有挂起更改。
// Show our pending changes.
PendingChange[] pendingChanges = workspace.GetPendingChanges();
foreach (PendingChange pendingChange in pendingChanges)
{
dosomething...
}
我认为通过将工作区设置为workspace.GetLocalItemForServerItem(TFSProject),它只会为我提供该特定工作文件夹的对象。
是否有任何方法可以强制工作区对象仅处理特定的工作文件夹?
这有什么意义吗?提前致谢...
使用 LINQ 您可以获得特定文件夹的挂起更改
PendingChange[] pendingChanges = workspace
.GetPendingChanges()
.Where(x => x.LocalOrServerFolder.Contains(argPath))
.ToArray();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)