首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TFS C#接口: Workspace.PendAdd静默失败

TFS C#接口: Workspace.PendAdd静默失败
EN

Stack Overflow用户
提问于 2012-09-14 10:07:50
回答 3查看 2.4K关注 0票数 4

Microsoft.TeamFoundation.VersionControl.Client.Workspace.PendAdd

由于某些原因,每当我从TFS调用PendAdd方法时,它都会毫无异常地执行,但无法将任何文件标记为已添加到我的工作区中。但是,调用PendEdit的效果与预期一致。我已经验证了使用的帐户既有在TFS中添加的权限,也有对有问题的文件的完全控制Windows权限。

有什么想法吗?

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

代码语言:javascript
复制
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];
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-22 05:54:43

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

我不完全相信这不是一个bug /我之前没有在代码中遇到一些边缘情况,但只要我的项目工作(到目前为止它是工作的),我并不真的担心任何一种方式。

Relevant Microsoft Connect thread (以防这确实是TFS的问题,并在以后得到解决)。

票数 2
EN

Stack Overflow用户

发布于 2017-03-25 06:22:40

我也有同样的问题(即使是使用MSDN示例here),但是在调用PendAdd之前先调用Workstation.EnsureUpdateWorkspaceInfoCache为我解决了这个问题。

倾听NonFatalErrors可以为您提供非常有用的提示来解决此类问题。

票数 1
EN

Stack Overflow用户

发布于 2012-10-09 15:15:50

我已经复制了这种奇怪的行为。在将其添加到sourceControl之前,我可以通过在我的文件系统上创建文件来修复它。

否则,它将静默地失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12417241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档