gpt4 book ai didi

c# - TFS C# API : Workspace. PendAdd 静默失败

转载 作者:可可西里 更新时间:2023-11-01 14:15:01 24 4
gpt4 key购买 nike

Microsoft.TeamFoundation.VersionControl.Client.Workspace.PendAdd

出于某种原因,每当我从 TFS API 调用 PendAdd 方法时,它都会毫无异常(exception)地执行,但无法将任何文件标记为已添加到我的工作区中。但是,调用 PendEdit 始终按预期工作。我已验证所使用的帐户既有权在 TFS 中添加,又具有对相关文件的完全控制 Windows 权限。

有什么想法吗?

我的代码(为了调试,我尝试对 PendAdd 方法的输入进行四种变体):

public bool AddFile( string filePath, out string status, bool isRecursive = false )
{
Workspace workspace = GetWorkspace( out status );
if( workspace == null )
{
return false;
}

workspace.PendAdd( filePath, isRecursive );

status = "Success";
return true;
}

public bool CheckOutFile( string filePath, out string status )
{
Workspace workspace = GetWorkspace( out status );
if( workspace == null )
{
return false;
}

workspace.PendEdit( filePath );

status = "Success";
return true;
}
...
string status;

// $/Solution/.../foo.cs (non-recursive)
if( TFS.AddFile("$/Solution" + Regex.Split(target, "Solution")[1].Replace('\\', '/'), out status) == false )
{
throw new Exception( "TFS Add failed: " + status );
}

// $/Solution/.../ (recursive)
if( TFS.AddFile("$/Solution" + Regex.Split(target.Substring(0, target.LastIndexOf('\\')), "Solution")[1].Replace('\\', '/'), out status, true) == false )
{
throw new Exception( "TFS Add failed: " + status );
}

// Calls PendEdit with C:\TFS\Solution\...\foo.cs; this works
if( TFS.CheckOutFile(target, out status) == false )
{
throw new Exception( "TFS Checkout failed: " + status );
}

// C:\TFS\Solution\...\foo.cs (non-recursive)
if( TFS.AddFile(target, out status) == false )
{
throw new Exception( "TFS Add failed: " + status );
}

// C:\TFS\Solution\...\ (recursive)
if( TFS.AddFile(target.Substring(0, target.LastIndexOf('\\')), out status, true) == false )
{
throw new Exception( "TFS Add failed: " + status );
}
...
private Workspace GetWorkspace( out string status )
{
Workspace[] workspaces = _versionControlServer.QueryWorkspaces( null, _versionControlServer.AuthorizedUser, Environment.MachineName );

if( workspaces.Length != 1 )
{
status = "You must have exactly 1 local workspace to promote code.";
return null;
}
else
{
status = "You have exactly 1 local workspace.";
}

return workspaces[0];
}

最佳答案

好吧,这很奇怪,但我做了一个更改,允许多个用户通过这个 Controller (而不是一个硬编码用户)添加或编辑文件,并在必要时为每个用户创建一个新的工作区,现在一切都像原来一样工作故意的。这很奇怪,考虑到本应与此行为相关的任何内容都没有以任何重大方式进行修改。

我不完全相信这不是一个错误/我之前没有在代码中遇到过一些边缘情况,但只要我的项目能正常工作(到目前为止它确实如此)我无论哪种方式都不太关心。

Relevant Microsoft Connect thread (以防万一这确实是 TFS 的问题并且后来得到解决)。

关于c# - TFS C# API : Workspace. PendAdd 静默失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com