本文章是由機器翻譯。

ALM Ranger

擴充 Visual Studio Team Explorer 2012

Mike Fourie

下載代碼示例

在這篇文章中,我將討論提供 MicrosoftVisual Studio中Team 總管2012年的新擴充點。我就會生成以突出 2012Team 總管的體系結構,同時希望為您提供一些靈感來生成擴展,將有利於您、 您的團隊和也許甚至更廣泛的社會的工作示例。

自Visual Studio2005,Team 總管提供的主要介面與提供的Visual Studio等工作項、 SharePoint 文檔、 報告、 生成和原始程式碼管理中的各種以團隊為中心功能進行交互。

Visual Studio2008 和 2010年的Visual Studio的後續版本提供次要更新到Team 總管,但仍然在執行樹狀檢視中導航的基本模式 — — 直到Visual Studio2012年的到來,這就是。Visual Studio2012年介紹了完全重新設計的Team 總管和 ux 選項。走的是樹狀檢視中,已更換的頁的集合提供對我們已經成為習慣,相同的功能,以及一些新功能,如我的工作訪問。

此外請注意與Visual Studio2012年,你可以現在工作完全在託管代碼中沒有任何有關 COM 塔內件處理關切。

Team 總管2012年概述

Team 總管2012年由幾個網頁,其中每個可以拆分為部分和主機導航專案和導航連結組成。預設頁稱為主頁,它提供了輕鬆訪問到其他頁面提供的Team 總管,即我的工作,暫止的變更、 工作項、 生成、 Web 訪問、 團隊成員和設置。

圖 1 顯示在主頁上的各種導航專案和提供的連結。


圖 1 在Team 總管2012 主頁

圖 2 顯示的部分,您可以向頁面添加使用。


圖 2 節Team 總管中的生成頁

如果這是你見過Team 總管2012年的第一次,你無疑會同意的設計是完全不同于以往基於樹狀檢視的經驗提供的Visual Studio2005年、 2008年和 2010 年。

鑒於簡單性和效率的以前的樹狀檢視中實現的您可能想知道為什麼有這種徹底的重新設計。新頁-基於Team 總管中的工作後你可能會感覺到 — — 我認為有一些理由 — — 導航不是簡單的樹狀檢視,它替換的那樣有效。它當然需要習慣,一些雖然希望結束這篇文章你就會明白當前的導航效率損失由勝過的功能強大的擴充性功能,提供了新的頁面設計和模態對話方塊的減少,是流行在以前的版本。請注意我說"當前"損失中導航的效率,如我所料的設計,在整個過程中的 Microsoft 現在提供的Visual Studio的每季度更新還會調整。事實上,Visual Studio2012年更新 2 有方便新連接顯示的頁面,你以前連接,使導航 TFS 連接更容易每Team Foundation伺服器 (TFS)、 團隊專案集合和團隊專案。

現有Team 總管可擴充性資源

除了這一條,你應該知道的幾個其他資源,可以説明你找到你周圍擴展Team 總管的方式。Msdn 網站已涵蓋 Microsoft.TeamFoundation.Controls 命名空間承載我會擴展的所有物件的 API 級檔。

Visual Studio開發人員中心有一個樣品,"擴大Team 總管中Visual Studio2012"(bit.ly/Zp1OFf),那發表的團隊的開發Team 總管2012年。MyHistory 示例擴展外掛程式提供了這篇文章基於該示例,我推薦你第一次閱讀它。

Team 總管體系結構

你開始為Team 總管創建擴展之前它將有益,瞭解一些有關如何Team 總管的體系結構。

您創建的擴展需要實現的介面的目標就你的擴充點。這些介面在 Microsoft.TeamFoundation.Controls 命名空間中實現,並定義如下:

您創建的擴展是使用託管可擴充性框架 (MEF) 發現的。為了説明發現,必須在此處定義裝飾您的類與相應的屬性:

  • ?醱ㄩ[] TeamExplorerPage("guid")(bit.ly/17kBzQD)
  • 第節:[TeamExplorerSection ("guid"、"parentPageGuid",優先)](bit.ly/12nMxCC)
  • 導航專案:[TeamExplorerNavigationItem 優先"guid")](bit.ly/Y6YQ7S)
  • 導航連結:[TeamExplorerNavigationLink ("guid"、"parentNavigationItemGuid",優先)](bit.ly/12KFghj)

發現您的擴展,您的程式集需要的Visual Studio的"知名"擴展位置之一。這些地點是在位於 <VsInstallRootFolder> \Common7\IDE\devenv.pkgdef 的"母版 PkgDef"檔中定義的。

您的擴展的推薦的包裝機制是使用Visual Studio擴展 (VSIX)。這種機制會照顧你的所有部署管道。如果你想要閱讀更多關於發現,看到的Visual Studio博客張貼內容,"如何 VSIX 擴展都發現,並且在 VS 2010 中載入"(bit.ly/xTJrSv)。

為了說明延長存留期、 導航、 上下文管理和其他可用的您的擴展的功能,讓我們看看這篇文章提供的我的歷史記錄示例。

入門應用程式範例

你可以下載完整的工作示例的這篇文章,但我相信它是重要的是要強調幾個關鍵點,以説明您成功地開始建立您自己的擴展。

若要創建一個擴展你要需要Visual Studio2012年 — — 特別是Visual Studio2012 SDK — — 創建 VSIX 專案。當你創建一個 VSIX 專案時,Visual Studio帶你直接到所示的.vsixmanifest 檔圖 3。我我自己的授權檔案添加到專案中,完成幾個欄位,如圖所示。


圖 3 的.vsixmanifest 檔的詳細資訊

您可以選擇將您的擴展添加在單獨的程式集或主機 VSIX 專案中的所有代碼。如果你選擇主機在 vsix 中所有代碼,它是重要的是要手動調整.csproj 檔,這樣的擴展程式集包含 VSIX 包中。預設情況下,VSIX 專案創建僅 VSIX 包。當您部署您的擴展時,它將顯示為已安裝 ; 但是,不會部署您的程式集,因此它不會被發現。要包含的程式集,您需要在文字編輯器中打開.csproj 檔和設置專案設置,如下面的代碼 (在通過 UI,就不能進行此更改) 中所示:

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

在清單檔中,您需要配置的資產,以便擴展可以適當地部署您的擴展。在資產選項卡,添加新的 Microsoft.VisualStudio.VsPackage 的專案。這會告訴您正在創建一個Visual Studio包 vsix。同時,添加一項資產的類型 Microsoft.VisualStudio.MefComponent,提供的 VSIX 包中的擴展程式集名稱。

VSIX 專案,預設情況下,有沒有引用,因此,您需要添加所需的所有那些。至少你可能需要以下參考資料:

  • 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

雖然您可以在託管代碼中創建您的擴展,您可能仍需要將與Visual Studio通過 COM,集成,所以你很可能還需要對 EnvDTE 和 EnvDTE80 的 COM 引用。

一旦你做這一切,你準備好要開始創建擴展Team 總管的內容。

偵錯

如果這是您第一次冒險使用 VSIX 專案,你可能在想如何調試它們。在Visual Studio2012年新專案,創建了帶有所需的調試資訊,所以你可以簡單地打 F5 和Visual Studio的新"實驗"實例 (bit.ly/12KRCGq) 將開始與您載入的擴展。

雖然比你也許有點慢可能是習慣于簡單的應用程式,您可以在您的代碼和調試像任何其他應用程式,設置中斷點。我的專案設法輸設置,所以我展示了他們在圖 4。基本上啟動操作設置為啟動外部程式與價值 C:\Program 檔 (86) \MicrosoftVisual Studio11.0\Common7\IDE\devenv.exe 和命令列參數都設置為 /rootsuffix Exp。


圖 4 VSIX 調試設置

拱門式的我的歷史樣本

開發人員經常需要多工 (就是花式詞為隨機化)! 有時忘了他們只是做了什麼幾分鐘或幾天前。我的歷史記錄擴展的目的是説明改善您的多工處理體驗,通過提供的擱置集、 變更集、 工作項和專案/解決方案,你最近工作清單。所示圖 5,它包括多個部分、 導航專案和導航連結新的一頁。


圖 5 我的歷史分機

此時我會推薦安裝的擴展,看看它如何擴展Team 總管,然後回來到這篇文章要經過一些主要部件的擴展代碼。

我的歷史記錄中的代碼

該解決方案被組織成一組資料夾更易於導航和發現。

基地資料夾中包含一組類的基礎提供的上述"擴大Team 總管中Visual Studio2012"樣本。內部元件和資源的資料夾包含各種説明器類。你最感興趣的節資料夾,其中包含您需要從其派生的物件的實現。圖 6 顯示這些類如何相關的。


圖 6 的 MyHistory 類的關係圖

若要創建新的頁面的進入點,您需要添加導航連結到主頁上的現有的部分之一。

圖 7 MyHistory 所載的自訂導航連結顯示的代碼­NavigationLink.cs。此代碼生成中所示的我的歷史記錄連結圖 5

圖 7 我國歷史上的導航連結

[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);
    }
  }

當按一下該連結時,執行的方法運行並Team 總管導航到自訂我的歷史頁面。 讓我們仔細看看中的第一行圖 7。 TeamExplorerNavigation­連結類屬性用來與 MyWork 部分中,關聯連結和連結的 200 手段的優先順序將可能會顯示最後,假設有人還沒安裝另一個擴展與較大的數位 (低優先順序)。

圖 8 MyHistoryPage.cs,提供了添加新的Team 總管頁面中顯示的代碼。 請注意屬性用法和使用的唯一 ID。

圖 8 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";
  }
}

您有一個條目指向您的新頁面,並且你可以到新頁面 ; 現在,您需要獲取內容拖到頁上。我會涵蓋中詳細資訊的變更集部分,留給你來看一看在你自己的時間的其他實現的部分。所有都遵循相同的基本圖案。

在隨附的代碼下載是 ChangesetsSection.cs 類,這是太長,無法在本文中列出。在此類中您註冊新的 ITeamExplorerSection 與 MyHistory 頁面,使用 TeamExplorerSection 類屬性。請注意 20 類屬性中的值是節的優先。低優先順序、 高向上在頁中的獲取呈現一節。在類聲明變更集 ObservableCollection 您的 UI 所綁定到的。在類的建構函式來定義額外的視覺和行為設置。它是重要的是要將類連結到其呈現的內容,這是您的使用者控制項,ChangesetsSectionView.xaml 的一個新實例。

請注意在初始化方法你檢查上下文使您可以從記憶體重新載入它,而不是重新查詢它。SaveCoNtext 方法保存以備將來使用,必要的上下文資訊,可以使用 CoNtextChanged 方法來刷新資料,如果使用者在更改專案或集合。在所有情況下,如果您需要重新查詢它,你這樣做以避免阻塞 UI 執行緒以非同步方式。從您的使用者控制項調用 ViewChangesetDetails 方法。此方法與Team 總管進行交互,並為它提供呈現正確的頁面中的變更集詳細資訊所需的資訊。

拼圖的最後一塊是創建您的使用者控制項來顯示內容。變更集部分提供了雙­可點擊清單中的最後 10 檢查接使用者做了,每個都有顯示幾個相關的詳細資訊和採取充分的變更集歷史,使用者的超連結中所示的工具提示圖 9


圖 9 變更集部分 UI

使用者控制項的代碼是非常基本,和它真的只是處理使用者事件,這使通過對調用 ParentSection 與Team 總管進行交互。圖 10 的代碼隱藏一些提供縮略的視圖。請注意,使用依賴項的­屬性類 (bit.ly/11FJNQW),這將有助於將使用者控制項綁定到您已經註冊了Team 總管的類。

圖 10 的變更集的使用者控制項代碼

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();
    }
  }
}

認識、 洞察和起始點

有更多的代碼,以查找的並已經列入這一條,希望為您提供的示例中:

  • Team 總管2012年擴充性的認識提供了。
  • 深入瞭解廣大 APIVisual Studio提供了,你可以進行交互 (一定要閱讀的 MSDN 雜誌文章,"版本控制在 TFS 用戶端物件模型"msdn.microsoft.com/magazine/jj883959,如果你感興趣更多 API 級讀物)。
  • 一個起始點,以創建您的第一個擴展的信心。

感謝您抽出時間來讀,並請在查找更多的文章從ALM Rangers(aka.ms/vsarunderstand)。

Mike Fourie 是具有 13 年以上軟體發展經驗的獨立顧問公司專攻生成和部署自動化。他是一個 Microsoft ALM 最有價值球員和尊敬的 ALM 護林員。他可以通過他的博客在到達 freetodev.com。您也可以按照他在 Twitter 上 twitter.com/mikefourie.

衷心感謝以下技術專家對本文的審閱:乍得鮑爾斯 (Microsoft)、Jeff布拉姆韋爾 (農場的美國信用服務),Willy-Peter Schaub(Microsoft) 和沙希德 · 哈米德 (顧問)

Jeff布拉姆韋爾是美國農場信貸服務的企業體系結構的主任。 他擁有超過 20 年的軟體發展經驗和一貫努力遵循的開始簡單的口頭禪和從那裡工作你的路。 他的博客是在 devmatter.blogspot.com。 你可以跟著他在 Twitter 上 twitter.com/jbramwell

Willy-Peter Schaub是與Visual StudioALM Rangers在微軟加拿大發展中心的高級專案經理。 年年-八十年代以來,他一直在努力的簡單性和可維護性在軟體工程中。 閱讀他在博客上的 blogs.msdn.com/b/willy-peter_schaub 和跟隨他在 Twitter 上 twitter.com/wpschaub

哈米德 · 沙希德是 MicrosoftVisual StudioALM 護林員和軟體顧問。 他擁有超過 13 年的工作特別有興趣在MSBuild和Team Foundation伺服器的 Microsoft 技術與經驗。