Udostępnij za pośrednictwem


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 tekstów 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 poleceniem podłączonym, 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.

New Project Dialog showing VSIX project templates.

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

Configure your new project.

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

New project files and folders.

Ważne pliki

Przejdźmy do najważniejszych plików.

Plik InsertGuidPackage.cs jest określany 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.

Commands/MyCommand.cs to program obsługi poleceń zdefiniowany w pliku VSCommandTable.vsct . Steruje to, co się stanie po wykonaniu polecenia, klikając 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 element nadrzędny, a element nadrzędny grupy jest wbudowanym menu VSMainMenu/Narzędzia .

W przypadku rozszerzenia chcesz , aby przycisk Wstaw identyfikator GUID był w menu głównym Edytuj , więc zamierzasz ponownie umieścić grupę w menu Edycja. Zastąp ciąg Narzędzia edycją tak jak w poniższym fragmencie kodu:

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

Możesz uzyskać pełną funkcję IntelliSense dla umieszczania, aby ułatwić znalezienie odpowiedniego miejsca.

VSCT parent IntelliSense.

Wymaga <Button> również aktualizacji. Nadasz jej nową ikonę, aktualizując id atrybut <Icon> elementu na PasteAppend. <ButtonText> Zaktualizuj tekst przy użyciu dobrej, opisowej nazwy i zaktualizuj <LocCanonicalName> element za pomocą nazwy technicznej 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

Zawsze uruchamiaj znak <LocCanonicalName> kropką. 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:

VSCT icon 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 wstawić nowy identyfikator GUID podczas wykonywania:

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.

Uwaga

Zobaczysz await JoinableTaskFactory.SwitchToMainThreadAsync() i ThreadHelper.ThrowIfNotOnUIThread() w wielu miejscach w tym zestawie narzędzi społeczności. Obsługują one najlepsze rozwiązania dotyczące przełączania wątków i nie trzeba wiedzieć, kiedy i jak ich używać w tym momencie — ostrzeżenia kompilatora z poprawkami kodu (żarówki) sprawiają, że bardzo proste.

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ąć klawisz 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 zostać wyświetlony polecenie Wstaw identyfikator GUID.

Insert GUID command located in the Edit main menu.

Otwórz dowolny plik tekstowy i wykonaj polecenie , aby wstawić nowy identyfikator GUID. I już!

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.