Udostępnij przez


Pierwsze rozszerzenie programu Visual Studio

W tym artykule przedstawiono kilka prostych kroków, aby uruchomić pierwsze rozszerzenie programu Visual Studio. Rozszerzenie programu Visual Studio jest napisane przy użyciu programu .NET Framework i języka C#. Jeśli jesteś już deweloperem platformy .NET, okaże się, że pisanie rozszerzeń jest podobne do pisania większości innych programów i bibliotek platformy .NET.

Rozszerzenie, które napiszesz dzisiaj, dodaje polecenie, które wstawia nowy identyfikator GUID do edytora tekstowego po wykonaniu. Jest to proste, przydatne i stanowi dobre wprowadzenie do różnych aspektów programowania rozszerzeń.

Jeśli jesteś uczniem wizualnym, zapoznaj się z tym krótkim filmem wideo, na którym ktoś śledzi samouczek.

Przed rozpoczęciem pisania pierwszego rozszerzenia programu Visual Studio (jest to łatwe, obiecuję!) upewnij się, że masz potrzebne narzędzia.

Tworzenie projektu

Istnieje kilka szablonów projektów do wyboru, więc chcesz dokonać właściwego wyboru. Szablony używane w tym zestawie narzędzi społeczności zawierają nazwę (Community) w nazwie.

Szablon VSIX Project w/Command (Community) jest dostarczany z już przypisanym poleceniem, co ułatwia rozpoczęcie od tego miejsca. Jest to doskonały punkt wyjścia dla większości rozszerzeń. Jeśli wiesz, że chcesz użyć okna narzędzi, użyj szablonu VsIX Project w/Tool Window (Społeczność). Zawiera również polecenie umożliwiające otwarcie okna narzędzia.

Użyj szablonów Empty VSIX Project (Community) lub VSIX Project (Community) dla rozszerzeń TYLKO MEF lub innych zaawansowanych scenariuszy.

Tym razem wybierzesz szablon VsIX Project w/Command (Community), jak pokazano na poniższym zrzucie ekranu.

Okno dialogowe Nowy projekt z szablonami projektów VSIX.

Po wybraniu szablonu projektu należy nadać projektowi nazwę. Wywołaj metodę InsertGuid.

Skonfiguruj nowy projekt.

Po naciśnięciu przycisku Utwórz powinien zostać wyświetlony podstawowy projekt VSIX, który wygląda następująco:

Nowe pliki i foldery projektu.

Ważne pliki

Przejdźmy do najważniejszych plików.

InsertGuidPackage.cs jest to, co jest określane jako klasa Package. Jej InitializeAsync(...) metoda jest wywoływana przez program Visual Studio w celu zainicjowania rozszerzenia. W tym miejscu można dodawać odbiorniki zdarzeń i rejestrować polecenia, okna narzędzi, ustawienia i inne rzeczy.

source.extension.vsixmanifest to plik manifestu rozszerzenia. Zawiera metadane, takie jak tytuł i opis, ale także informacje o tym, co zawiera rozszerzenie.

VSCommandTable.vsct to plik XML, w którym polecenia i powiązania kluczy są definiowane deklaratywnie, dzięki czemu można je zarejestrować w programie Visual Studio.

Polecenia/MyCommand.cs to procedura obsługi poleceń zdefiniowana w pliku VSCommandTable.vsct . Steruje tym, co się dzieje po wykonaniu polecenia, gdy klikniesz przycisk.

Modyfikowanie polecenia

Najpierw chcesz upewnić się, że polecenie ma odpowiednią nazwę, ikonę i pozycję w systemie menu programu Visual Studio.

Otwórz plik VSCommandTable.vsct i znajdź element <Group> i .<Button> Zwróć uwagę, że przycisk określa grupę jako swojego elementu nadrzędnego, a element nadrzędny dla tej grupy to wbudowane menu VSMainMenu/Narzędzia.

W przypadku rozszerzenia chcesz, aby przycisk Wstaw identyfikator GUID znajdował się w menu głównym Edytuj, więc zamierzasz przenieść grupę do menu Edytuj. Zastąp Narzędzia z Edycją, tak jak w poniższym fragmencie:

<Group guid="InsertGuid" id="MyMenuGroup" priority="0x0600">
  <Parent guid="VSMainMenu" id="Edit"/>
</Group>

Uzyskasz pełne wsparcie IntelliSense dla umiejscowień, aby ułatwić znalezienie odpowiedniego miejsca.

Nadrzędna funkcja IntelliSense vsCT.

<Button> również wymaga aktualizacji. Nadasz jej nową ikonę, aktualizując id atrybut <Icon> elementu na PasteAppend. <ButtonText> Zaktualizuj tekst, używając dobrej, opisowej nazwy, i zaktualizuj element <LocCanonicalName> za pomocą technicznej nazwy polecenia — jest to nazwa wyświetlana użytkownikom podczas przypisywania niestandardowych skrótów klawiaturowych do polecenia w oknie dialogowym Narzędzia > Opcje > Środowiska > Klawiatury.

<Button guid="InsertGuid" id="MyCommand" priority="0x0100" type="Button">
  <Parent guid="InsertGuid" id="MyMenuGroup" />
  <Icon guid="ImageCatalogGuid" id="PasteAppend" />
  <CommandFlag>IconIsMoniker</CommandFlag>
  <Strings>
    <ButtonText>Insert GUID</ButtonText>
    <LocCanonicalName>.Edit.InsertGuid</LocCanonicalName>
  </Strings>
</Button>

Uwaga / Notatka

Zawsze zaczynaj <LocCanonicalName> znakiem kropki. Gwarantuje, że żaden inny tekst nie jest automatycznie wstępnie wpisany, a kropka nie zostanie wyświetlona.

Możesz użyć tysięcy ikon dostępnych w bibliotece obrazów programu Visual Studio, a nawet uzyskać podgląd wyświetlany w funkcji IntelliSense:

Ikona VSCT IntelliSense.

Teraz zaktualizowaliśmy nazwę, ikonę i lokalizację naszego polecenia i nadszedł czas, aby napisać kod w celu wstawienia identyfikatora GUID do edytora tekstów.

Otwórz plik /Commands/MyCommand.cs i zmodyfikuj go, aby dodać nowy GUID, gdy jest uruchamiany.

using System;
using Community.VisualStudio.Toolkit;
using EnvDTE;
using Microsoft.VisualStudio.Shell;
using Task = System.Threading.Tasks.Task;

namespace InsertGuid
{
    [Command(PackageIds.MyCommand)]
    internal sealed class MyCommand : BaseCommand<MyCommand>
    {
        protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
        {
            await Package.JoinableTaskFactory.SwitchToMainThreadAsync();
            DocumentView docView = await VS.Documents.GetActiveDocumentViewAsync();
            if (docView?.TextView == null) return;
            SnapshotPoint position = docView.TextView.Caret.Position.BufferPosition;
            docView.TextBuffer?.Insert(position, Guid.NewGuid().ToString()); 
        }
    }
}

Używasz VS obiektu, aby uzyskać aktywny widok tekstu edytora, a następnie wstaw identyfikator GUID na pozycji karetki buforu tekstu. VS jest obiektem statycznym, który zapewnia dostęp do elementów interfejsu użytkownika środowiska IDE programu Visual Studio; zobacz jego definicję w VS.cs w repozytorium GitHub zestawu narzędzi VSIX Community Toolkit.

Uwaga / Notatka

Zobaczysz await JoinableTaskFactory.SwitchToMainThreadAsync() i ThreadHelper.ThrowIfNotOnUIThread() w wielu miejscach w tym zestawie narzędzi społeczności. Zajmują się najlepszymi praktykami dotyczącymi przełączania wątków i nie musisz wiedzieć, kiedy i jak ich używać w tym momencie — ostrzeżenia kompilatora z poprawkami kodu (żarówki) sprawiają, że to jest bardzo łatwe.

Pierwsza wersja robocza naszego rozszerzenia została ukończona i nadszedł czas, aby go przetestować.

Uruchamianie i debugowanie

Uruchamianie rozszerzenia jest tak proste, jak uruchamianie dowolnego innego projektu platformy .NET. Wystarczy nacisnąć F5 , aby uruchomić z dołączonym debugerem lub Ctrl+F5 do uruchomienia bez.

Spowoduje to uruchomienie eksperymentalnego wystąpienia programu Visual Studio z zainstalowanym rozszerzeniem. Wystąpienie eksperymentalne to zwykła wersja programu Visual Studio, ale z zainstalowanymi oddzielnymi ustawieniami i rozszerzeniami. Pomaga to zachować oddzielne rzeczy.

Po uruchomieniu wystąpienia eksperymentalnego, w menu głównym powinien się pojawić komenda Wstaw identyfikator GUID.

Wstaw polecenie GUID znajdujące się w menu głównym Edytuj.

Otwórz dowolny plik tekstowy i wykonaj polecenie, aby wstawić nowy GUID. To wszystko!

Podsumowanie

Utworzono pierwsze rozszerzenie, które dodaje przycisk polecenia do menu głównego i wchodzi w interakcję z edytorem tekstów po wykonaniu.

Gratulacje!!

Kod dla tego rozszerzenia można znaleźć w repozytorium przykładów.