Código C#para verificar si el espacio de trabajo existe en TFS
visual-studio-2010 tfs2010 (1)
Intento crear una herramienta de automatización para obtener el último código de TFS. Necesito comprobar si existe algún espacio de trabajo con el mismo nombre en el sistema. Si existe, obtenga la instancia del espacio de trabajo. De lo contrario, cree el espacio de trabajo y las asignaciones.
Descubrí que Microsoft.TeamFoundation.VersionControl.ClientVersionControlServer
tiene el método Workspace GetWorkspace(string workspaceName, string workspaceOwner);
para obtener espacio de trabajo existente. Pero esto arrojará una excepción si el espacio de trabajo no existe en el sistema.
Así que por favor, denme un código que verifique la existencia de espacios de trabajo y mapeos.
En la actualidad tengo el siguiente código que sé que no es la forma correcta
try
{
//**Expected** an exception as sometimes the workspace may not exist or Deleted manually.
workspace = versionControl.GetWorkspace(workspaceName, versionControl.AuthorizedUser);
versionControl.DeleteWorkspace(workspaceName, versionControl.AuthorizedUser);
workspace = null;
}
catch (Exception e)
{
DialogResult res = MessageBox.Show("There are no workspace mapped. I am creating a new workspace mapped to your local folder named DevFolder.", "Error", MessageBoxButtons.YesNo);
if (res == DialogResult.No)
{
return;
}
}
if (workspace == null)
{
var teamProjects = new List<TeamProject>(versionControl.GetAllTeamProjects(false));
// if there are no team projects in this collection, skip it
if (teamProjects.Count < 1)
{
MessageBox.Show("Please select a team project.");
return;
}
// Create a temporary workspace2.
workspace = versionControl.CreateWorkspace(workspaceName, versionControl.AuthorizedUser);
// For this workspace, map a server folder to a local folder
ReCreateWorkSpaceMappings(workspace);
createdWorkspace = true;
}
Si no quiere confiar en la captura de una excepción, puede llamar a QueryWorkspaces
workspace = versionControl.QueryWorkspaces(
workspaceName,
versionControl.AuthorizedUser,
Environment.MachineName).SingleOrDefault();
Este código consultará el espacio de trabajo para un usuario en la computadora que este código ejecuta. Si la colección está vacía, devolverá nulo en el espacio de trabajo o devolverá el único elemento en la lista. En el caso de que QueryWorkspaces devuelva más elementos (parece que no es posible), seguirá lanzando, pero eso me parece bien.
Ahora puedes verificar las asignaciones
if (workspace !=null)
{
foreach(var folder in workspace.Folders)
{
if (!folder.IsCloaked && folder.LocalItem != "some expected path")
{
// mapping invalid, throw/log?
}
}
}