visual usuarios tutorial team studio proyecto español cuenta crear conectar c# .net tfs tfs2010 vcs-checkout

c# - usuarios - team foundation server manual español



¿Cómo puedo verificar mediante programación un artículo para editar en TFS? (6)

Estoy trabajando en una utilidad que procesa archivos bajo control de fuente usando TFS 2010.

Si un elemento aún no se ha revisado para su edición, recibiré una excepción, lo que definitivamente es predecible porque el archivo está en modo de solo lectura.

¿Qué formas existen para sacar un archivo?

PD: Quiero algo para programática en lugar de Process.Start("tf.exe", "..."); si eso es aplicable


Algunos de los otros enfoques mencionados aquí solo funcionan para ciertas versiones de TFS o hacen uso de métodos obsoletos. Si está recibiendo un 404, el enfoque que está utilizando probablemente no sea compatible con la versión de su servidor.

Este enfoque funciona en 2005, 2008 y 2010. No uso TFS por más tiempo, por lo que no he probado 2013.

var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fileName); using (var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri)) { var workspace = workspaceInfo.GetWorkspace(server); workspace.PendEdit(fileName); }


Primero, obtenga el espacio de trabajo

var tfs = new TeamFoundationServer("http://server:8080/tfs/collection"); var version = (VersionControlServer)tfs.GetService(typeof(VersionControlServer)); var workspace = version.GetWorkspace("WORKSPACE-NAME", version.AuthorizedUser);

Con el espacio de trabajo puede verificar el archivo

workspace.PendEdit(fileName);



Tengo dos enfoques sobre cómo hacerlo: simple y avanzado.

1). Sencillo:

#region Check Out public bool CheckOut(string path) { using (TfsTeamProjectCollection pc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(ConstTfsServerUri))) { if (pc == null) return false; WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(path); Workspace workspace = workspaceInfo?.GetWorkspace(pc); return workspace?.PendEdit(path, RecursionType.Full) == 1; } } public async Task<bool> CheckoutAsync(string path) { return await Task.Run(() => CheckOut(path)); } #endregion

2). Avanzado (con estado de recepción):

private static string GetOwnerDisplayName(PendingSet[] pending) { var result = pending.FirstOrDefault(pendingSet => pendingSet.Computer != Environment.MachineName) ?? pending[0]; return result.OwnerDisplayName; } private string CheckoutFileInternal(string[] wsFiles, string folder = null) { try { var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(folder); var server = new TfsTeamProjectCollection(workspaceInfo.ServerUri); var workspace = workspaceInfo.GetWorkspace(server); var request = new GetRequest(folder, RecursionType.Full, VersionSpec.Latest); GetStatus status = workspace.Get(request, GetOptions.None); int result = workspace.PendEdit(wsFiles, RecursionType.Full, null, LockLevel.None); if (result == wsFiles.Length) { //TODO: write info (succeed) to log here - messageText return null; } var pending = server.GetService<VersionControlServer>().QueryPendingSets(wsFiles, RecursionType.None, null, null); var messageText = "Failed to checkout !."; if (pending.Any()) { messageText = string.Format("{0}/nFile is locked by {1}", messageText, GetOwnerDisplayName(pending)); } //TODO: write error to log here - messageText return messageText; } catch (Exception ex) { UIHelper.Instance.RunOnUiThread(() => { MessageBox.Show(Application.Current.MainWindow, string.Format("Failed checking out TFS files : {0}", ex.Message), "Check-out from TFS", MessageBoxButton.OK, MessageBoxImage.Error); }); return null; } } public async Task<string> CheckoutFileInternalAsync(string[] wsFiles, string folder) { return await Task.Run(() => CheckoutFileInternal(wsFiles, folder)); }


private const string tfsServer = @"http://tfsserver.org:8080/tfs"; public void CheckOutFromTFS(string fileName) { using (TfsTeamProjectCollection pc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsServer))) { if (pc != null) { WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(fileName); if (null != workspaceInfo) { Workspace workspace = workspaceInfo.GetWorkspace(pc); workspace.PendEdit(fileName); } } } FileInfo fi = new FileInfo(fileName); }

Tenga en cuenta que Microsoft.TeamFoundation.Client.TeamFoundationServerFactory está obsoleto: la clase TeamFoundationServer está obsoleta. Utilice las clases TeamFoundationProjectCollection o TfsConfigurationServer para hablar con un 2010 Team Foundation Server. Para hablar con un Team Foundation Server 2005 o 2008, use la clase TeamFoundationProjectCollection . La clase de fábrica correspondiente para eso es TfsTeamProjectCollectionFactory .


var registerdCollection = RegisteredTfsConnections.GetProjectCollections().First(); var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(registerdCollection); var versionControl = projectCollection.GetService<VersionControlServer>(); var workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(_fileName); var server = new TeamFoundationServer(workspaceInfo.ServerUri.ToString()); var workspace = workspaceInfo.GetWorkspace(server); workspace.PendEdit(fileName);