TFS 挂起编辑结果为TF14098:访问被拒绝
本文关键字:访问 拒绝 TF14098 挂起 编辑 结果 TFS | 更新日期: 2023-09-27 17:55:15
我喜欢通过 C# 代码签出文件,但我总是收到TF14098拒绝异常。TFS 管理员保证,我有签出/编辑权限,在 VisualStudio 和 tf 中.exe我签出文件没有任何问题。
这是我当前的 C# 代码:
const string tfsServer = @"http://MyServer:8080/tfs";
const string fileName = @"$/MyFile.xaml";
const string workspaceName = "MyWorkspace";
using (TfsTeamProjectCollection tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer)))
{
if (tfs != null)
{
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fileName);
if (null != workspaceInfo)
{
var vcs = tfs.GetService<VersionControlServer>();
Workspace workspace = workspaceInfo.GetWorkspace(tfs);
if(workspace == null){
workspace = vcs.GetWorkspace(workspaceName, vcs.AuthorizedUser);
}
vcs.NonFatalError += VersionControlOnNonFatalError;
vcs.Getting += OnGetting;
vcs.BeforeCheckinPendingChange += OnBeforeCheckinPendingChange;
vcs.NewPendingChange += OnNewPendingChange;
if (workspace != null)
{
workspace.PendEdit(fileName);
}
}
}
}
它的结果总是:
非致命故障:TF14098:访问被拒绝:用户我需要 $/MyFile.xaml 的 PendChange 权限。
在对此错误进行了大量研究后,我尝试通过Dos-Box检查权限,并执行以下命令行:
tf checkout $/MyFile.xaml
它导致文件签出没有任何问题!(如果我在文件抵抗的目录中)
有没有人知道问题可能是什么?我的代码(使用 VisualStudio2012 编写和执行的应用程序)和命令行 tf 签出之间有什么区别?
感谢您的提示和提示!帕特里克
代码中的问题是,TfsTeamProjectCollection
不适合您的路径,因为您从未设置集合名称(应该类似于@"http://MyServer:8080/tfs/DefaultCollection")。我从未使用 API 进行过签出,但我从这样开始签入:
WorkspaceInfo wi = Workstation.Current.GetLocalWorkspaceInfo(Environment.CurrentDirectory);
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(wi.ServerUri);
VersionControlServer versionControlServer = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));
Workspace workSpace = versionControlServer.GetWorkspace(wi);
如您所见,我使用我的工作区搜索 TeamCollection,而不是将其设置为独立。这样做,您将获得正确的结帐VersionControlServer
。
使用 tf.exe 工具的不同之处在于,在本地工作区中运行它,因此该工具知道它在 TFS 中链接到哪个项以及链接到哪个集合。