没有工作文件夹映射"访问TFS时出现错误

本文关键字:TFS 访问 错误 quot 工作 工作文件 文件夹 映射 | 更新日期: 2023-09-27 18:03:15

我正在开发一个可以创建和添加项目到TFS的应用程序。

我的文件被正确地创建在正确的位置,但是Workspace.PendAdd方法只适用于一个特定的工作区,其他工作区给我"没有工作文件夹映射"错误。

我使用的方法是PendAdd(string filepath, bool recursive),所以我传入一个要添加的目录,并期望将该目录及其文件作为TFS中的挂起添加添加。

两个工作区除了名称之外,其他内容都是相同的,当前都没有签出任何文件,也不包含任何文件。

从我的谷歌搜索中,我发现在将文件添加到映射到$/的工作空间时可能存在问题,但我使用的工作空间映射到$/TFSFiles/,到目前为止似乎没有其他问题。

我的PendAdd方法的代码是:
 private IEnumerable<PendingChange> PendAddFileToTfs(string newFilename)
      {
         var previousPendingChanges = new List<PendingChange>(_selectedWorkspace.GetPendingChanges());
         var changesAdded = _selectedWorkspace.PendAdd(Path.GetDirectoryName(newFilename), true);
         var pendingAdds = new List<PendingChange>(_selectedWorkspace.GetPendingChanges());
         var itemsToCheckIn = pendingAdds.Except(previousPendingChanges);
         return itemsToCheckIn;
      }

方法在_selectedWorkspace中失败。PendAdd线。我调试并验证了它是正确的本地路径和正确的工作空间。

谁能给我指个正确的方向吗?编辑:

_selectedWorkspace变量由用户设置。

我通过以下代码获得所有可用工作区的列表:

_workspaces = _versionControl.QueryWorkspaces(null, _versionControl.AuthorizedUser,environment.MachineName);

然后在一个组合框中显示一个工作区列表,并允许用户选择一个。

调用这个方法:

 public void SetWorkspace(string workspaceName)
      {
         _selectedWorkspace = _workspaces.FirstOrDefault(ws => ws.Name.Equals(workspaceName));
      }

没有工作文件夹映射"访问TFS时出现错误

在将pendAdd文件添加到TFS之前,需要创建一个本地工作区。我不确定_selectedWorkspace是从哪里来的,但看起来它没有正确配置。虽然我手头没有c#版本,但我在PowerShell中有一个版本调用c#…应该给你指路。

function New-TfsTeamProjectRootFolder {
    Param(
        [Microsoft.TeamFoundation.Client.TfsTeamProjectCollection] $TfsCollection,
        [Microsoft.TeamFoundation.Server.ProjectInfo] $TfsTeamProject,
        [String] $GlobalEntryValue
    )
    $TempWorkspaceName = "Create-TfsTeamSourceFolder"
    $TempFolder = "c:'temp'$TempWorkspaceName"
    $ServerFolder = "$/$($TfsTeamProject.Name)"
    $TfsVersionControl = Get-TfsVersionControlServer $TfsCollection
    try {
        $workspace = $TfsVersionControl.GetWorkspace($TempFolder )
    } catch {
        $workspace = $TfsVersionControl.CreateWorkspace($TempWorkspaceName);
        $workspace.Map($ServerFolder, $TempFolder); 
    }
    $NewFolder = "$TempFolder'$GlobalEntryValue";
    try {
        $SourceItem = $TfsVersionControl.GetItem("$ServerFolder/$GlobalEntryValue")
    } catch {
        New-Item -ItemType Directory -Force -Path $NewFolder;
        $workspace.PendAdd($NewFolder, $true); 
        $pendingChanges = $workspace.GetPendingChanges(); 
        $changesetNumber = $workspace.CheckIn($pendingChanges, "Added folder for '$GlobalEntryValue'"); 
        $SourceItem = $TfsVersionControl.GetItem("$ServerFolder/$GlobalEntryValue")
    }
    $workspace.Delete()
    Return $SourceItem
}

我不确定为什么你的代码不工作,因为我认为问题是在更大的上下文中,而不是我们在上面的例子中看到的