TFS API: GetLocalWorkspaceInfo siempre devuelve null


En una de mis máquinas, obtengo un valor devuelto de null de cualquier llamada GetLocalWorkspaceInfo. He aislado a problema a donde incluso falla para este simple programa:

namespace WorkstationTest
{
    using Microsoft.TeamFoundation.VersionControl.Client;

    class Program
    {
        static void Main()
        {
            string workspaceLocalPath = @"C:\Dev";
            var info = Workstation.Current
                          .GetLocalWorkspaceInfo(workspaceLocalPath);

            // info is always null here
        }
    }
}

Lo que ya he comprobado:

  • El mismo código funciona exactamente en mi otra máquina de la manera que debería.

  • He verificado que tengo un espacio de trabajo en C:\Dev

    Captura de pantalla del Espacio de Trabajo

  • He creado un nuevo espacio de trabajo y en un directorio diferente y he cambiado la variable workspaceLocalPath en el código para que coincida.

  • He consultado la documentación que indica que el valor devuelto será null if the path is not in a workspace. Desde la imagen de arriba, la ruta debe estar en un espacio de trabajo.

Sin embargo, todo parece sugerir que esto debería funcionar. ¿Hay algo que pueda faltar?

 25
Author: Nick Freeman, 2013-04-11

7 answers

Sé que este es un post antiguo, pero me gustaría compartir la solución que tenemos, utilizando VersionControlServer.QueryWorkspaces para consultar todos los espacios de trabajo para el usuario en su máquina.

private static Workspace FindWorkspaceByPath(TfsTeamProjectCollection tfs, string workspacePath)
{ 
    VersionControlServer versionControl = tfs.GetService<VersionControlServer>();

    WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(workspacePath);

    if (workspaceInfo != null)
    {
        return versionControl.GetWorkspace(workspaceInfo);
    }

    // No Workspace found using method 1, try to query all workspaces the user has on this machine.
    Workspace[] workspaces = versionControl.QueryWorkspaces(null, Environment.UserName, Environment.MachineName);
    foreach (Workspace w in workspaces)
    {
        foreach (WorkingFolder f in w.Folders)
        {
            if (f.LocalItem.Equals(workspacePath))
            {
                return w;
            }
        }
    }

    throw new Exception(String.Format("TFS Workspace cannot be determined for {0}.", workspacePath));
}
 6
Author: eddiecjc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-21 03:22:28

Al ejecutar tf workspaces (en mi computadora) en el símbolo del sistema de Visual Studio 2010 dice No workspace matching * found on this computer, pero al ejecutar el mismo comando en Visual Studio 2012 devuelve todos mis espacios de trabajo esperados.

El problema se puede resolver haciendo cualquiera de las siguientes cosas:

  • Haga referencia a la versión de la dll Microsoft.TeamFoundation.VersionControl.Client que estaba conectada con Visual Studio 2012 en lugar de la dll conectada con Visual Studio 2010.

  • Abrir Visual Studio 2010 y conéctelo a TFS donde creará los espacios de trabajo para Visual Studio 2010

 14
Author: Nick Freeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-12 17:39:28

Después de migrar de TFS2013 a TFS2017 en la empresa para la que trabajo tuve el mismo problema con Workstation.Actual.Obtener espacio de trabajo local enfo.

Lo que funcionó para mí es una llamada a Workstation.EnsureUpdateWorkspaceInfoCache:

TfsTeamProjectCollection tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("<your-tfs-uri-here>"));
VersionControlServer tfServer = tpc.GetService<VersionControlServer>();
Workstation.Current.EnsureUpdateWorkspaceInfoCache(tfServer, tfServer.AuthorizedUser);

Agregué las líneas de código anteriores al constructor de mi clase proxy TFS que usa GetLocalWorkspaceInfo.

 13
Author: Valvestino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 09:27:39

En mi caso, este problema ocurrió debido a VersionControl.archivo de configuración puesto bajo caché TFS (C:\Users\DeepakR\AppData\Local\Microsoft\Team Foundation\5.0\Cache\Volatile \ 0cb76a25-2556-4bd6-adaa-5e755ac07355_http)la carpeta va para un lanzamiento, es decir, la información del espacio de trabajo configurado no estaba disponible como se esperaba.

Por lo tanto, básicamente necesita una actualización de VersionControl.archivo de configuración. Auto Refersh ocurre cuando Visual Studio se carga de nuevo, es decir, extrae la información del espacio de trabajo configurado desde el servidor y actualiza el fichero de configuración o incluso si ejecutamos tf command utility (tf.exe workspaces / collection: TFSURL)

Microsoft.TeamFoundation.VersionControl.La clase de estación de trabajo del cliente(v12.0.0.0) tiene una función EnsureUpdateWorkspaceInfoCache que hará el mismo truco

VersionControlServer vcs = (VersionControlServer)tpc.GetService (typeof (VersionControlServer)); Estación de trabajo.Actual.Asegure el espacio de trabajo actualizado (vcs, Ambiente.Nombre de usuario);

Https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.workstation.ensureupdateworkspaceinfocache(v=vs. 120).aspx

Espero que la sugerencia ayude a resolver el problema.

 7
Author: Deepak Ramalingam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-11 19:50:33

Tuve este problema recientemente (hoy) usando Visual Studio 2017, además de varias otras versiones instaladas y varios espacios de trabajo locales.

Terminé actualizando el paquete NuGet 'Team Foundation Server Client' a la última versión (15.x) a través del menú 'Manage NuGet Packages' y eso lo arregló.

También eliminé las referencias de proyecto existentes primero, pero esa parte podría depender de lo que necesite.

 1
Author: Sean Normoyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-08 04:04:23

Esta es la forma de encontrar workspace cuando tiene la ruta del servidor:

  Workspace[] workspaces = _versionControl.QueryWorkspaces(null, Environment.UserName, Environment.MachineName);
  return workspaces.FirstOrDefault(w => !string.IsNullOrEmpty(w.TryGetLocalItemForServerItem(ConstDefaultFlowsTfsPath)));

Donde ConstDefaultFlowsTfsPath es la ruta del servidor con "$" por ejemplo : "$/MyCompany/Services/DiagnosticsFlows"

También puedes reemplazar la última línea por:

return workspaces.FirstOrDefault(w => !string.IsNullOrEmpty(w.GetServerItemForLocalItem(myLocalPath)));

Y eso debería funcionar para ti también.

 0
Author: Mr.B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-20 12:09:44

Simplemente ejecuta los trucos.

Nada va a funcionar correctamente sin una referencia DLL adecuada. El siguiente había solucionado el mismo problema que tuve durante 5 días, ya que estaba arruinando mi tiempo.

Coloque las siguientes DLL en la carpeta bin de su proyecto y haga una referencia a toda la solución para todas las DLL. Si aparece algún error como 'Referencia no se pudo dar' ignórelo y omita esa DLL de dar referencia en su lugar, simplemente coloque también el error al crear DLL en bin carpeta que el proyecto tomará automáticamente durante la compilación

DLL:

Microsoft.TeamFoundation.Client.dll                                  
Microsoft.TeamFoundation.Common.dll                                   
Microsoft.TeamFoundation.Core.WebApi.dll                              
Microsoft.TeamFoundation.TestManagement.Client.dll                    
Microsoft.TeamFoundation.TestManagement.Common.dll                    
Microsoft.TeamFoundation.Work.WebApi.dll                              
Microsoft.TeamFoundation.WorkItemTracking.Client.DataStoreLoader.dll  
Microsoft.TeamFoundation.WorkItemTracking.Client.dll                  
Microsoft.TeamFoundation.WorkItemTracking.Common.dll                  
Microsoft.TeamFoundation.WorkItemTracking.Controls.dll                
Microsoft.TeamFoundation.WorkItemTracking.Proxy.dll                   
Microsoft.TeamFoundation.WorkItemTracking.WebApi.dll                  
Microsoft.VisualStudio.Services.Client.Interactive.dll                
Microsoft.VisualStudio.Services.Common.dll                            
Microsoft.VisualStudio.Services.WebApi.dll                            
Microsoft.WITDataStore32.dll                                          
Microsoft.WITDataStore64.dll                                          

Las DLL anteriores se pueden encontrar en la ruta de acceso siguiente si el sistema está instalado con MTM o TFS

Ruta: C:\Program Archivos (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TeamFoundation \ Team Explorer

 0
Author: Sathish Krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-08 12:38:57