没有工作文件夹映射"访问TFS时出现错误
本文关键字:TFS 访问 错误 quot 工作 工作文件 文件夹 映射 | 更新日期: 2023-09-27 18:03:15
我正在开发一个可以创建和添加项目到TFS的应用程序。
我的文件被正确地创建在正确的位置,但是Workspace.PendAdd
方法只适用于一个特定的工作区,其他工作区给我"没有工作文件夹映射"错误。
我使用的方法是PendAdd(string filepath, bool recursive)
,所以我传入一个要添加的目录,并期望将该目录及其文件作为TFS中的挂起添加添加。
两个工作区除了名称之外,其他内容都是相同的,当前都没有签出任何文件,也不包含任何文件。
从我的谷歌搜索中,我发现在将文件添加到映射到$/
的工作空间时可能存在问题,但我使用的工作空间映射到$/TFSFiles/
,到目前为止似乎没有其他问题。
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));
}
在将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
}
我不确定为什么你的代码不工作,因为我认为问题是在更大的上下文中,而不是我们在上面的例子中看到的