Dieser Artikel wurde maschinell übersetzt.

ALM Rangers

Erweitern von Visual Studio Team Explorer 2012

Mike Fourie

In diesem Artikel werde ich neue Erweiterungspunkte gemäß Microsoft Visual Studio Team Explorer 2012 diskutieren. Ich werde ein Arbeitsbeispiel, um die Architektur des Team Explorer 2012 zu markieren, und bieten Sie hoffentlich einige Anregungen zu Erweiterungen zu bauen, die vorteilhaft für Sie, Ihr Team und vielleicht sogar die Staatengemeinschaft werden gleichzeitig bauen.

Team Explorer hat seit Visual Studio 2005 die primäre Schnittstelle bereitgestellt, für die Interaktion mit den verschiedenen Team-orientierten Features, die in Visual Studio wie Arbeitsaufgaben, SharePoint-Dokumente, Berichte, Builds und Datenquellen-Steuerelement bereitgestellt.

Die nachfolgenden Versionen von Visual Studio 2008 und Visual Studio 2010 bereitgestellt geringfügige Aktualisierungen Team Explorer, jedoch blieb das grundlegende Paradigma der Strukturansicht-Navigation — bis Visual Studio 2012 angekommen, das ist. Visual Studio 2012 eingeführt, eine komplett neu gestaltete Team Explorer und UX. Verschwunden ist der Strukturansicht, die durch eine Sammlung von Seiten ersetzt wurde, das Zugriff auf die gleichen Funktionen, die, denen wir haben sich daran gewöhnt, sowie einige neue Features wie eigene Arbeit.

Beachten Sie, dass Sie arbeiten mit Visual Studio 2012 vollständig in verwaltetem Code ohne irgendwelche Bedenken über den Umgang mit COM-Interna können.

Team Explorer 2012 Übersicht

Team Explorer 2012 umfasst mehrere Seiten, von denen jede in Abschnitte und Navigation Hostelemente und Navigationslinks aufgeteilt werden kann. Die Standardseite wird Startseite genannt, und es bietet einfachen Zugriff auf die anderen Seiten Team Explorer, nämlich meine Arbeit, ausstehende Änderungen, Arbeitsaufgaben, Builds, Web Access, Teammitglieder und Einstellungen.

Abbildung 1 zeigt die Homepage und die verschiedenen Navigationspunkte und Links zur Verfügung gestellt.

The Team Explorer 2012 Home Page
Abbildung 1 die Team Explorer 2012-Startseite**

Abbildung 2 zeigt die Verwendung der Abschnitte, in denen Sie Seiten hinzufügen können.

Sections in the Team Explorer Builds Page
Abbildung 2 Abschnitte im Team Explorer baut Seite

Wenn dies das erste Mal Sie Team Explorer 2012 gesehen haben ist, werden Sie zweifellos zustimmen, dass das Design völlig anders als die auf der Grundlage der Strukturansicht Vorkenntnisse gemäß Visual Studio 2005, 2008 und 2010.

Angesichts der Einfachheit und Effizienz der vorherigen Strukturansicht-Implementierungen, Sie Fragen sich vielleicht warum gab es solch eine radikale Neugestaltung. Nach der Arbeit in der neuen seitenbasierte Team Explorer könnte man glauben, — und ich denke, mit einer gewissen Berechtigung —, dass die Navigation nicht so effizient wie die einfache Baum-Ansicht, die es ersetzt. Es dauert sicherlich etwas gewöhnungsbedürftig, aber hoffentlich Ende dieses Artikels Sie verstehen, dass der aktuelle Verlust Navigation Effizienz ist der leistungsstarke Erweiterungsfeatures überwiegen, die das neue Design der Seite bereitstellt und die Verringerung der Modale Dialoge weit verbreitet in früheren Versionen sind. Beachten Sie, dass "aktuell" Verlust in Navigation Effizienz gesagt, wie ich erwarte, dass das Design im Laufe der vierteljährlichen Updates optimiert werden, die Microsoft nun für Visual Studio. In der Tat hat Visual Studio 2012 Update 2 eine praktisch neue Connect-Seite, die zeigt jeden Team Foundation Server (TFS), die Team Project-Auflistung und die Team-Projekt mit dem Sie zuvor dass Navigation TFS Verbindungen viel leichter verbunden habe.

Vorhandenen Team Explorer Extensibility Ressourcen

Zusätzlich zu diesem Artikel sollten Sie wenigen andere Ressourcen kennen, die Sie zurecht Verlängerung Team Explorersuchen können. MSDN hat API-Ebene-Dokumentation zu dem Microsoft.TeamFoundation.Controls-Namespace hostet alle Objekte, die ich verlängern werde.

Im Visual Studio Developer Center hat eine Probe "Extending Team Explorer Visual Studio 2012" (bit.ly/Zp1OFf), erschien, die durch das Team, Team Explorer 2012 entwickelt. Die Beispielerweiterung MyHistory Lieferumfang dieses Artikels basiert auf das Beispiel, und ich empfehle, dass Sie es zuerst lesen.

Team Explorer Architektur

Bevor Sie beginnen, Erstellen von Erweiterungen für Team Explorer wird es von Vorteil sein, ein wenig zu verstehen, über wie Team Explorer ausgelegt ist.

Die Erweiterungen, die Sie erstellen müssen die Schnittstelle für die Extension-Point zu implementieren, die Sie verwenden möchten. Diese Schnittstellen werden in der Microsoft.TeamFoundation.Controls-Namespace implementiert und sind wie folgt definiert:

Erweiterungen, die Sie erstellen werden mithilfe der Managed Extensibility Framework (MEF) entdeckt. Um die Entdeckung zu unterstützen, müssen Sie Ihre Klasse mit dem entsprechenden Attribut schmücken, wie hier definiert:

  • Seite: [TeamExplorerPage("guid")] (bit.ly/17kBzQD)
  • Abschnitt: [TeamExplorerSection ("Guid", "ParentPageGuid", Priorität)] (bit.ly/12nMxCC)
  • Navigationspunkt: [TeamExplorerNavigationItem ("Guid", Priorität)] (bit.ly/Y6YQ7S)
  • Navigationslink: [TeamExplorerNavigationLink ("Guid", "ParentNavigationItemGuid", Priorität)] (bit.ly/12KFghj)

Für Ihre Erweiterung, entdeckt zu werden muss die Assembly in einem der Standorte "bekannten" Erweiterung für Visual Studio. Diese Orte sind in der Datei "Master PkgDef", in <VsInstallRootFolder> \Common7\IDE\devenv.pkgdef definiert.

Der empfohlene Verpackung-Mechanismus für Ihre Erweiterungen ist eine Visual Studio -Erweiterung (VSIX) verwenden. Dieser Mechanismus kümmert sich um die Bereitstellung-Sanitär für Sie. Wenn Sie, lesen Sie mehr möchten über Entdeckung, finden Sie unter den Visual Studio -Blog-Post "Wie VSIX Erweiterungen erkannt und in VS 2010 geladen" (bit.ly/xTJrSv).

Um die Erweiterung-Lebensdauer, Navigation, Context Management und andere Funktionen, die Ihre Erweiterung zu veranschaulichen, werfen wir einen Blick auf das mit diesem Artikel bereitgestellte My History-Beispiel.

Erste Schritte mit der Beispielanwendung

Du kannst voll funktionstüchtiges Beispiel für diesen Artikel, aber ich glaube es ist wichtig, hervorzuheben, ein paar wichtige Punkte, damit Sie erfolgreich mit Ihren eigenen Erweiterungs-Gebäude beginnen können.

Zum Erstellen einer Erweiterungs wirst du Visual Studio 2012 brauchen — und insbesondere die Visual Studio 2012-SDK — das VSIX-Projekt erstellt. Wenn Sie ein VSIX-Projekt erstellen, Visual Studio gelangen Sie direkt auf die Datei .vsixmanifest in Abbildung 3. Ich habe meine eigene Lizenz-Datei dem Projekt hinzugefügt und ein paar Felder ausgefüllt, wie gezeigt.

Details of the .vsixmanifest File
Abbildung 3 Informationen über die .vsixmanifest-Datei

Sie können Ihre Erweiterung in einer separaten Assembly hinzufügen oder hosten Ihren Code innerhalb des VSIX-Projekts. Wenn Sie Ihren Code in die VSIX hosten möchten, ist es wichtig, die CSPROJ-Datei manuell zu optimieren, sodass die Erweiterungs-Assembly in das VSIX-Paket enthalten ist. Standardmäßig erstellt das Projekt VSIX nur das VSIX-Paket. Wenn Sie Ihre Erweiterung bereitstellen, wird es zeigen, wie installiert; Allerdings wird nicht die Assembly bereitgestellt werden, so wird nicht entdeckt werden. Wenn die Assembly einschließen möchten, müssen Sie die CSPROJ-Datei in einem Texteditor öffnen und die Projekteinstellungen festlegen, wie im folgenden Code gezeigt (diese Änderung nicht über die Benutzeroberfläche möglich):

<IncludeAssemblyInVSIXContainer>true</IncludeAssemblyInVSIXContainer>
<CopyBuildOutputToOutputDirectory>true</CopyBuildOutputToOutputDirectory> 

Innerhalb der manifest-Datei müssen Sie Vermögenswerte so konfigurieren, dass die Erweiterung Ihrer Erweiterung entsprechend bereitstellen kann. Fügen Sie auf der Registerkarte Ressourcen eine neue Microsoft.VisualStudio.VsPackage für das Projekt. Dies sagt die VSIX, dass Sie eine Visual Studio -Paket erstellen. Auch, Hinzufügen eines Vermögenswertes vom Typ Microsoft.VisualStudio.MefComponent, die den Namen der Erweiterungs-Assembly im Paket VSIX bereitstellt.

Ein VSIX-Projekt hat keine Verweise in der Standardeinstellung, musst du alle diejenigen hinzuzufügen, die erforderlich sind. Zumindest sind Sie wahrscheinlich brauchen die folgenden Referenzen:

  • Microsoft.TeamFoundation.Client
  • Microsoft.TeamFoundation.Controls
  • Microsoft.TeamFoundation.VersionControl.Client
  • Microsoft.TeamFoundation.VersionControl.Controls
  • Microsoft.VisualStudio.Shell.Interop
  • Microsoft.VisualStudio.Shell.Interop.10.0
  • Microsoft.VisualStudio.Shell.Interop.8.0
  • Microsoft.VisualStudio.Shell.Interop.9.0
  • Microsoft.VisualStudio.TeamFoundation.VersionControl
  • Microsoft.VisualStudio.OLE.Interop
  • Microsoft.VisualStudio.Shell.11.0
  • Microsoft.VisualStudio.Shell.Immutable.10.0
  • PresentationCore
  • PresentationFramework
  • System
  • System.ComponentModel.Composition
  • System.Core
  • System.Drawing
  • System.Windows.Forms
  • System.Xaml
  • System.Xml

Obwohl Sie Ihre Erweiterung in verwaltetem Code erstellen können, müssen Sie wahrscheinlich noch mit Visual Studio über COM, zu integrieren, so dass Sie höchstwahrscheinlich auch COM-Verweise auf EnvDTE und EnvDTE80 benötigen.

Sobald Sie all das getan haben, können Sie vor dem Erstellen von Inhalten, Team Explorererweitern.

Debuggen

Ist dies Ihr erstes Abenteuer mit VSIX Projekte, wundern Sie sie Debuggen. Im Visual Studio 2012 das neue Projekt wird nun mit den erforderlichen Debug-Informationen erstellt, also einfach drücken Sie F5 und eine neue "experimentell" Instanz der Visual Studio (bit.ly/12KRCGq) beginnt mit Ihrer Erweiterung geladen.

Sie können Haltepunkte in Ihrem Code und Debug wie jede mögliche andere app festlegen, obwohl vielleicht ein wenig langsamer, als Sie für einfachere Anwendungen benutzt werden kann. Irgendwie mein Projekt geschafft, die Einstellungen zu verlieren, so dass ich, in gezeigt habe Abbildung 4. Im Grunde dürfte die Startaktion externes Programm starten mit dem Wert C:\Program Files (X 86) \Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe und die Befehlszeile Argumente /rootsuffix Exp festgelegt sind.

VSIX Debug Settings
Abbildung 4 VSIX Debug Einstellungen

Begehbare von der meine Geschichte-Beispiel

Oft müssen Entwickler Multitasking (das die Phantasie Wort zur Randomisierung!) und manchmal vergessen, was sie nur ein paar Minuten oder Stunden. Meine Geschichte-Erweiterung soll dazu beitragen, zu verbessern Ihre Multitasking-Erfahrung, indem eine Liste der Shelvesets, Changesets, Arbeitsaufgaben und Projekte/Lösungen mit denen Sie zuletzt gearbeitet haben. Siehe Abbildung 5, es besteht aus einer neuen Seite zusammen mit mehreren Abschnitten, Navigationspunkte und Navigations-Links.

The My History Extension
Abbildung 5 der meine Geschichte-Erweiterung

An dieser Stelle würde ich empfehlen, um zu sehen, wie es Team Explorererweitert-Erweiterung installieren, dann kommen zurück zu diesem Artikel einige Teile Prinzipal den Erweiterungscode durchlaufen.

Der Code in meiner Geschichte

Die Lösung gliedert sich in eine Reihe von Ordnern für einfachere Navigation und Entdeckung.

Der Basisordner enthält einen Satz von Klassen, die auf der Grundlage von im oben genannten Sinne "Extending Team Explorer in Visual Studio 2012"-Beispiel. Die Interna und Ressourcen-Ordner enthalten verschiedene Hilfsklassen. Sie sind am meisten interessiert in den Bereichen-Ordner, der die Umsetzung der Objekte enthält, von dem Sie abgeleitet werden müssen. Abbildung 6 zeigt, wie die Klassen miteinander verknüpft sind.

Diagram of MyHistory Classes
Abbildung 6-Diagramm der MyHistory Klassen

Um einen Einstieg in die neue Seite zu erstellen müssen Sie einen der vorhandenen Abschnitte auf der Homepage einen Navigationslink hinzu.

Abbildung 7 zeigt den Code für den benutzerdefinierten Navigation Link in MyHistory­NavigationLink.cs. Dieser Code erzeugt den Link meine Geschichte Abbildung 5.

Abbildung 7 die meine Geschichte-Navigation-Link

[TeamExplorerNavigationLink(MyHistoryNavigationLink.LinkId,
   TeamExplorerNavigationItemIds.MyWork, 200)]
public class MyHistoryNavigationLink : TeamExplorerBaseNavigationLink
{
  public const string LinkId = "e49a882b-1677-46a9-93b4-db290943bbcd";
  [ImportingConstructor]
  public MyHistoryNavigationLink([Import(typeof(SVsServiceProvider))]
     IServiceProvider serviceProvider) : base(serviceProvider)
  {
    this.Text = "My History";
    this.IsVisible = true;
    this.IsEnabled = true;
  }
  public override void Execute()
  {
    try
    {
      ITeamExplorer teamExplorer = GetService<ITeamExplorer>();
      if (teamExplorer != null)
      {
        teamExplorer.NavigateToPage(new Guid(MyHistoryPage.PageId), 
          null);
      }
    }
    catch (Exception ex)
    {
      this.ShowNotification(ex.Message, NotificationType.Error);
    }
  } 

Wenn der Link angeklickt wird, wird die Execute-Methode ausgeführt und Team Explorer erfolgt zu Ihrer benutzerdefinierten My History-Seite navigieren. Werfen wir einen genaueren Blick auf die erste Zeile in Abbildung 7. Die TeamExplorerNavigation­Link Class-Attribut wird verwendet, um den Link der builtserver-Abschnitt zuordnen, und die Priorität von 200 bedeutet, dass die Verbindung wahrscheinlich erscheint, vorausgesetzt, jemand hat nicht eine weitere Erweiterung installiert, mit einer höheren Nummer (niedrigere Priorität).

Abbildung 8 zeigt den Code in MyHistoryPage.cs, die die Hinzufügung einer neuen Team Explorer -Seite bietet. Beachten Sie die Verwendung von Attributen und eindeutige ID verwendet.

Abbildung 8 die Seite "MyHistory"

/// <summary>
/// MyHistory Page. We're extending Team Explorer by adding a new page and
/// therefore use the TeamExplorerPage attribute and pass in our unique ID
/// </summary>
[TeamExplorerPage(MyHistoryPage.PageId)]
public class MyHistoryPage : TeamExplorerBasePage
{
  // All Pages must have a unique ID; use the Tools | Create   
  // GUID menu in Visual Studio to create your own GUID
  public const string PageId = "BAC5373E-1BE5-4A10-97F5-AC278CA77EDF";
  public MyHistoryPage()
  {
    // Set the page title
    this.Title = "My History";
  }
}

Sie haben einen Eintrag auf Ihrer neuen Seite zeigen können, und Sie zu Ihrer neuen Seite; Jetzt müssen Sie zum Abrufen von Inhalten auf die Seite. Ich werde Abschnitt Changesets im Detail zu decken und überlasse es Ihnen, einen Blick auf die anderen implementierten Abschnitte in Ihrer eigenen Zeit zu nehmen. Alle Folgen das gleiche Grundmuster.

In den zugehörigen Code ist Download der ChangesetsSection.cs-Klasse, die in diesem Artikel Liste zu lang ist. In dieser Klasse registrieren Sie eine neue ITeamExplorerSection mit der MyHistory-Page, mit das TeamExplorerSection-Class-Attribut. Beachten Sie, dass der Wert von 20 im Class-Attribut die Priorität des Abschnitts ist. Je niedriger Ruft die Priorität, die weiter oben auf der Seite im Abschnitt dargestellt. Die Klasse deklariert eine ObservableCollection Differenzmengen an die Benutzeroberfläche gebunden ist. Im Konstruktor der Klasse definieren Sie zusätzliche visuelle und verhaltensbasierte Einstellungen. Es ist wichtig, die Klasse auf den gerenderten Inhalt zu verbinden, die eine neue Instanz des Benutzersteuerelements, ChangesetsSectionView.xaml ist.

Beachten Sie, dass in der Initialize-Methode Sie für Kontext überprüfen, so dass Sie können erneut aus dem Speicher zu laden, anstatt es veröffentlicht. Die SaveContext-Methode speichert erforderlichen Kontextinformationen für die zukünftige Verwendung, und die ContextChanged-Methode kann verwendet werden, um die Daten zu aktualisieren, wenn der Benutzer, Projekte oder Sammlungen ändert. In allen Fällen benötigen Sie veröffentlicht, tun Sie dies in einem Async Mode zu vermeiden, den UI-Thread blockiert. Die ViewChangesetDetails-Methode wird vom Steuerelement aufgerufen. Diese Methode interagiert mit Team Explorer und finden sie die Informationen, die er benötigt, um die Changesetdetails auf der richtigen Seite zu rendern.

Das letzte Stück im Puzzle ist, erstellen Sie das Benutzersteuerelement, um den Inhalt anzuzeigen. Der Differenzmengen-Abschnitt enthält eine Doppel -­anklickbare Liste der letzten 10-Check-ins der Benutzer haben, jeweils mit einer QuickInfo zeigt einige relevante Details und einen Hyperlink zu den Benutzer, die vollständige Geschichte der Differenzmenge, siehe Abbildung 9.

The Changesets Section UI
Abbildung 9 Abschnitt Changesets UI

Der Code für das Benutzersteuerelement ist recht einfach und es handhabt wirklich nur die Benutzerereignisse, die durch die ParentSection Interaktion mit Team Exploreraufrufen. Abbildung 10 bietet einen abgekürzten Blick über einige der Codebehind. Beachten Sie die Verwendung der Abhängigkeit­Eigenschaftsklasse (bit.ly/11FJNQW), wodurch um das Benutzersteuerelement zur Klasse zu binden, Sie habe mit Team Explorerregistriert.

Abbildung 10 die Changesets Benutzersteuerelement

public partial class ChangesetsSectionView
{
  public static readonly DependencyProperty ParentSectionProperty =       
    DependencyProperty.Register("ParentSection",
    typeof(ChangesetsSection), typeof(ChangesetsSectionView));
  public ChangesetsSection ParentSection
  {
    get { return (ChangesetsSection)GetValue(ParentSectionProperty); }
    set {SetValue(ParentSectionProperty, value);}
  }
  private void HistoryLink_Click(object sender, RoutedEventArgs e)
  {
    this.ParentSection.ViewHistory();
  }
  private void ChangesetList_MouseDoubleClick(
    object sender, MouseButtonEventArgs e)
  {
    if (e.ChangedButton == MouseButton.Left &&
       changesetList.SelectedItems.Count == 1)
    {
      this.ViewChangesetDetails();
    }
  }
} 

Bewusstsein, Einsicht und Ausgangspunkt

Es gibt viel mehr Code im Beispiel durchsehen, die zusammen mit was ich in diesem Artikel behandelt habe hoffentlich Ihnen bietet:

  • Ein Bewusstsein für die Erweiterbarkeit Team Explorer 2012 bietet.
  • Ein Einblick in die große API- Visual Studio bietet, mit denen Sie interagieren können (achten Sie darauf, lesen Sie im MSDN Magazine -Artikel "Version Control in the TFS Client Object Model" msdn.microsoft.com/magazine/jj883959, wenn Sie sich für weitere API-Ebene Lektüre interessiert).
  • Ausgangspunkt und das Vertrauen zum Erstellen Ihrer ersten Erweiterungs.

Vielen Dank für Ihre Zeit, die dies lesen und bitte schauen Sie für weitere Artikel aus den ALM Rangers (aka.ms/vsarunderstand).

Mike Fourie ist ein unabhängiger Berater mit mehr als 13 Jahren Erfahrung der Software-Entwicklung, Erstellung und Bereitstellung Automatisierung spezialisiert. Er ist ein Microsoft ALM MVP und definierten ALM Ranger. Er ist erreichbar über seinen Blog unter freetodev.com. Sie können auch folgen ihm auf Twitter bei twitter.com/mikefourie.

Unser Dank gilt den folgenden technischen Experten für die Durchsicht dieses Artikels: Chad Boles (Microsoft), Jeff Bramwell (Farm Credit Services von Amerika), Willy -Peter Schaub (Microsoft) und Hamid Shahid (Consultant)

Jeff Bramwell ist Direktor der Unternehmensarchitektur Farm Credit Services of America. Er verfügt über mehr als 20 Jahre Software-Entwicklungserfahrung und ist immer bemüht das Mantra der Start einfach zu folgen und arbeiten Sie sich von dort aus. Sein Blog ist unter devmatter.blogspot.com. Sie können ihn auf Twitter zu folgen twitter.com/jbramwell.

Willy -Peter Schaub ist leitender Programmmanager bei den Visual Studio ALM Rangers im Microsoft Canada Development Center. Seit Mitte der 80er Jahre bemüht er sich um mehr Einfachheit und Instandhaltbarkeit in der Softwareentwicklung. Sie finden seinen Blog unter blogs.msdn.com/b/willy-peter_schaub. Folgen Sie ihm auf Twitter unter twitter.com/wpschaub.

Hamid Shahid ist ein Microsoft Visual Studio ALM Ranger und ein Softwareberater. Er hat mehr als 13 Jahre Erfahrung in der Arbeit mit Microsoft-Technologien mit speziellem Interesse in MSBuild und Team Foundation Server.