2009-12-18 16 views
5

No tengo mucha experiencia con TFS, aparte de usarlo para control de fuente. Estoy trabajando en una aplicación C# que necesitará modificar los archivos que están siendo controlados por TFS. Desde dentro de mi aplicación C#, ¿cómo puedo consultar un archivo que se controla a través de TFS?TFS/File Checkout desde C#

Gracias -. Randy

Respuesta

7

Puede utilizar PendEdit para hacer sus archivos writables, realice los cambios a la misma, a continuación, se agrega a los cambios pendientes, y finalmente comprobar que en

Aquí hay un código donde se crea una estructura de carpeta y luego se marca (muy similar a lo que necesitará).

private static void CreateNodes(ItemCollection nodes) 
{ 
    using (var tfs = TeamFoundationServerFactory.GetServer("http://tfsserver:8080")) 
    { 
     var versionControlServer = tfs.GetService(typeof (VersionControlServer)) as VersionControlServer; 
     versionControlServer.NonFatalError += OnNonFatalError; 

     // Create a new workspace for the currently authenticated user.    
     var workspace = versionControlServer.CreateWorkspace("Temporary Workspace", versionControlServer.AuthenticatedUser); 

     try 
     { 
      // Check if a mapping already exists. 
      var workingFolder = new WorkingFolder("$/testagile", @"c:\tempFolder"); 

      // Create the mapping (if it exists already, it just overides it, that is fine). 
      workspace.CreateMapping(workingFolder); 

      // Go through the folder structure defined and create it locally, then check in the changes. 
      CreateFolderStructure(workspace, nodes, workingFolder.LocalItem); 

      // Check in the changes made. 
      workspace.CheckIn(workspace.GetPendingChanges(), "This is my comment"); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      // Cleanup the workspace. 
      workspace.Delete(); 

      // Remove the temp folder used. 
      Directory.Delete("tempFolder", true); 
     } 
    } 
} 

private static void CreateFolderStructure(Workspace workspace, ItemCollection nodes, string initialPath) 
{ 
    foreach (RadTreeViewItem node in nodes) 
    { 
     var newFolderPath = initialPath + @"\" + node.Header; 
     Directory.CreateDirectory(newFolderPath); 
     workspace.PendAdd(newFolderPath); 
     if (node.HasItems) 
     { 
      CreateFolderStructure(workspace, node.Items, newFolderPath); 
     } 
    } 
} 
+0

No debe asignar a los archivos modificables por su cuenta. Workspace.PendEdit() lo hace por usted. Los archivos que se pueden escribir pero no están desprotegidos representan un estado incoherente que puede causar conflictos innecesarios durante operaciones como Obtener y Renombrar. –

+0

Gracias por la aclaración. La publicación ahora está actualizada. – joerage

+0

¿Cómo pasas las credenciales? –

2

El uso de la otra solución me dio problemas de permiso.

Aquí es una forma alternativa de pago y envío sus archivos usando tf.exe:

//Checkout file 
Process proc = new Process(); 
proc.StartInfo = 
    new ProcessStartInfo(
     @"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\tf.exe", 
     string.Format("checkout \"{0}\"", fileLocation) 
    ); 
proc.StartInfo.UseShellExecute = false; 
proc.Start(); 
proc.WaitForExit(); 
+1

solo un poco de nota, hay un problema si la ruta del archivo tiene espacios en blanco: la línea de comando debe ser "checkout \" {0} \ "" –