Cómo usar los Controles y Formas de Visual Studio para acceder al Control de Versión de TFS

Con las classs de los espacios de nombres Microsoft.TeamFoundation.Client y Microsoft.TeamFoundation.VersionControl.Client , es posible acceder programáticamente al Team Foundation Server Version Control (TFS-VC).

¿También es posible usar los controles y formularios que se usan en Visual Studio en una aplicación propia? Parece que la mayoría de las classs en Microsoft.TeamFoundation.VersionControl.Controls están marcadas como internas y, por lo tanto, no están disponibles fuera …

Es posible, lo siguiente que utilicé para TFS2010 y encontré que estaba en Internet, abre SourceControlFileSelector:

VersionControlServer versionControlServer = (VersionControlServer)tfsConnection.GetService(typeof(VersionControlServer)); Assembly controlsAssembly = Assembly.GetAssembly(typeof(Microsoft.TeamFoundation.VersionControl.Controls.ControlAddItemsExclude)); Type vcChooseItemDialogType = controlsAssembly.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogChooseItem"); ConstructorInfo ci = vcChooseItemDialogType.GetConstructor( BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[] { typeof(VersionControlServer) }, null); _chooseItemDialog = (Form)ci.Invoke(new object[] { versionControlServer }); _chooseItemDialog.ShowDialog(); this.DialogResult = _chooseItemDialog.DialogResult; _selectItemProperty = vcChooseItemDialogType.GetProperty("SelectedItem", BindingFlags.Instance | BindingFlags.NonPublic); Item selectedItem = (Item)_selectItemProperty.GetValue(_chooseItemDialog, null); 

Para TFS2012 hay algunos dialogs directamente utilizables, como TeamProjectPicker:

  TeamProjectPicker dp = new TeamProjectPicker(TeamProjectPickerMode.NoProject, false); DialogResult dr = dp.ShowDialog(); if (dr.Equals(DialogResult.OK) && dp.SelectedTeamProjectCollection != null) { Name = dp.SelectedTeamProjectCollection.ConfigurationServer.Name; configTfsUrl = dp.SelectedTeamProjectCollection.ConfigurationServer.Uri.AbsoluteUri; tfsUrl = dp.SelectedTeamProjectCollection.Uri; }