2017-01-27 17 views
1

С помощью TFS 2015 обновления 2, агент был установлен в машине, агент создает свое рабочее пространство:Microsoft.TeamFoundation.VersionControl.Client.ItemNotMappedException даже тогда, когда рабочее пространство существует и имеет отображение

enter image description here

Некоторые пользовательские задачи MSBuild, разработанные InHouse, были реализованы в определении сборки, которое будет выполняться на агенте. Эти задачи выполняют некоторые операции с сервером TFS.

Когда определение сборки в очереди для нового строительства здесь является то, что я получил:

enter image description here

В строительной машине я исхожу запустить следующий сценарий, чтобы проверить наличие рабочего пространства :

# Script to find a Team Foundation workspace 
param(
    [string] $workspaceHint = $(get-location).Path 
) 

begin 
{ 
    # load the needed client dll's 
    [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 
    [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client") 

    # fetches a Workspace instance matching the WorkspaceInfo found in the cache file 
    function getWorkspaceFromWorkspaceInfo($wsInfo) 
    { 
     $tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($wsInfo.ServerUri.AbsoluteUri) 
     $vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
     $vcs.GetWorkspace($wsInfo) 
     # TODO: likely add some convenience properties/methods for easier scripting support 
    } 
} 

process 
{ 
    # is there only 1 workspace in our cache file? If so, use that one regardless of the hint 
    $workspaceInfos = [Microsoft.TeamFoundation.VersionControl.Client.Workstation]::Current.GetAllLocalWorkspaceInfo() 
    if ($workspaceInfos.Length -eq 1) 
    { 
     return getWorkspaceFromWorkspaceInfo($workspaceInfos[0]) 
    } 

    if (test-path $workspaceHint) 
    { 
     # workspace hint is a local path, get potential matches based on path 
     $workspaceInfos = [Microsoft.TeamFoundation.VersionControl.Client.Workstation]::Current.GetLocalWorkspaceInfoRecursively($workspaceHint) 
    } 
    else 
    { 
     # workspace hint is NOT a local path, get potential matches based on name 
     $workspaceInfos = @($workspaceInfos | ?{ $_.name -match $workspaceHint }) 
    } 

    if ($workspaceInfos.Length -gt 1) 
    { 
     throw 'More than one workspace matches the workspace hint "{0}": {1}' -f 
       $workspaceHint, [string]::join(', ', @($workspaceInfos | %{ $_.Name})) 
    } 
    elseif ($workspaceInfos.Length -eq 1) 
    { 
     return getWorkspaceFromWorkspaceInfo($workspaceInfos[0]) 
    } 
    else 
    { 
     throw "Could not figure out a workspace based on hint $workspaceHint" 
    } 
} 

Сценарий не может найти никакого рабочего пространства.

Затем TFS 2015 электроинструменты были установлены с его команды Powershell в машине и запустить следующий сценарий:

if ((Get-PSSnapin -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null) 
     { 
      Add-PSSnapin -Name Microsoft.TeamFoundation.PowerShell 
     } 
$ws = Get-TfsWorkspace -Path C:\t\1\s 

$ws.Folders 

Отображение рабочего пространства и элементы отображаются.

Очередь новых сборок, продолжайте показывать ту же ошибку. Рабочее пространство является общедоступным сервером, и после некоторого древнего сообщения в форумах msdn я очищаю кеш TFS в машине.

Любая подсказка, как заставить Microsoft.TeamFoundation.VersionControl.Client распознавать рабочее пространство?

+0

ошибки говорит, что нет никакого отображения рабочей папки «C: \ т \-\ s», вы проверили на ваш агенте построения, если там какие-либо рабочие создали на нем? Кажется, что нет рабочего пространства, которое отображает путь «C: \ t \ 1 \ s». Сначала проверьте, имеет ли сервер агента сборки какие-либо рабочие области (вы можете запустить команду tf workspaces на машине агента сборки). Затем проверьте каждую рабочую область, если есть сопоставления о «C: \ t \ 1 \ s». Вы можете использовать команду tf workfold для проверки сопоставлений каждой рабочей области. –

+0

Спасибо за ваши комментарии, я знаю, что мой пост - TL; DR. Но, как я заявляю в сообщении: было создано рабочее пространство, а также его отображение. – XtianGIS

+0

Вы проверили код на сервере агента сборки вручную, не используя TFS? Если все еще не удается получить это рабочее пространство. Не могли бы вы попытаться использовать vcs.GetWorkspace (string localPath) этот метод, чтобы получить это рабочее пространство без использования информации о рабочем пространстве. –

ответ

1

Я исправил проблему ItemNotMappedException на своей машине, выполнив что-то вроде следующего скрипта PowerShell;

$localReference = "C:\Repository\Project\Project.sln" 
$teamProjectCollection="http://tfsserver:8080/tfs/projectcollection" 
$username = $env:UserName 


Add-type -AssemblyName "Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" 
Add-type -AssemblyName "Microsoft.TeamFoundation.Common, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" 
Add-type -AssemblyName "Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" 
Add-type -AssemblyName "Microsoft.TeamFoundation.VersionControl.Common, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a" 

$folder = [System.IO.Path]::GetDirectoryName($localReference); 
Push-Location $folder; 

$tfsTeamProjectCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($teamProjectCollection) 
$versioncontrolServer = $tfsTeamProjectCollection.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
[Microsoft.TeamFoundation.VersionControl.Client.Workstation]::Current.EnsureUpdateWorkspaceInfoCache($versionControlServer, $username); 
$workspace = $versioncontrolServer.GetWorkspace($localReference) 
echo $workspace 

Pop-Location 

Вам необходимо будет изменить начальные переменные в соответствии с вашей средой.

Надеется, что это помогает

-1

Пожалуйста, добавьте сборку Microsoft.TeamFoundation.Common в свой скрипт и повторите попытку.

# load the needed client dll's 
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")  
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Common") 
     [void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client") 

 Смежные вопросы

  • Нет связанных вопросов^_^