我正在开发一个可以为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));
}
答案 0 :(得分:2)
您需要先创建一个本地工作区,然后才能将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
}
我再次不确定为什么你的代码没有工作,因为我认为这个问题比我们在上面的例子中看到的更大。