İlk Visual Studio uzantınız

Bu makalede, ilk Visual Studio uzantınızı çalışır duruma getirmek için bazı basit adımlarda size yol gösterilir. Visual Studio uzantısı .NET Framework ve C# kullanılarak yazılır. Zaten bir .NET geliştiricisiyseniz, uzantı yazmanın diğer .NET programlarının ve kitaplıklarının çoğuna benzer olduğunu göreceksiniz.

Bugün yazacağınız uzantı, yürütüldüğünde metin düzenleyicisine yeni bir GUID ekleyen bir komut eklemektedir. Basit, kullanışlıdır ve uzantı geliştirmenin çeşitli yönlerine iyi bir giriş sağlar.

Görsel bir öğrenciyseniz, öğreticiyi izleyen birinin bu kısa videosunu gözden geçirin.

İlk Visual Studio uzantınızı yazmaya başlamadan önce (çok kolay, söz veriyorum!), gerekli araçlara sahip olduğunuzdan emin olun.

Projeyi oluşturma

Aralarından seçim yapabileceğiniz birkaç proje şablonu olduğundan doğru seçimi yapmak istiyorsunuz. Bu topluluk araç setinde kullanılan şablonların isimlerinde (Topluluk) bulunur.

VSIX Proje ile Komut (Topluluk) şablonu, bağlı bir komutla birlikte gelir, bu da buradan başlamayı kolaylaştırır. Bu, çoğu uzantı için harika bir başlangıç noktasıdır. Araç penceresi istediğinizi biliyorsanız VSIX Proje w/Tool Window (Topluluk) şablonunu kullanın. Ayrıca araç penceresini açmak için bir komutu vardır.

Yalnızca MEF uzantıları veya diğer gelişmiş senaryolar için Boş VSIX Projesi (Topluluk) veya VSIX Projesi (Topluluk) şablonlarını kullanın.

Bu kez, aşağıdaki ekran görüntüsünde gösterildiği gibi VSIX Projesi w/Command (Topluluk) şablonunu seçeceksiniz.

VSIX proje şablonlarını gösteren Yeni Proje İletişim Kutusu.

Proje şablonunu seçtikten sonra projenize bir ad vermeniz gerekir. InsertGuid olarak adlandır.

Yeni projenizi yapılandırın.

Oluştur düğmesine bastıktan sonra aşağıdaki gibi görünen temel bir VSIX Projesine sahip olmanız gerekir:

Yeni proje dosyaları ve klasörleri.

Önemli dosyalar

En önemli dosyaların üzerinden geçelim.

InsertGuidPackage.cs , Package sınıfı olarak adlandırılır. Yöntemi InitializeAsync(...) , uzantınızı başlatmak için Visual Studio tarafından çağrılır. Buradan olay dinleyicileri ekleyip komutları, araç pencerelerini, ayarları ve diğer öğeleri kaydedersiniz.

source.extension.vsixmanifest , uzantınızın bildirim dosyasıdır. Başlık ve açıklama gibi meta verileri içerir, ancak uzantının ne içerdiği hakkında da bilgi içerir.

VSCommandTable.vsct , komutların ve anahtar bağlamalarının bildirim temelli olarak tanımlandığı bir XML dosyasıdır, bu nedenle Visual Studio'ya kaydedilebilirler.

Commands/MyCommand.cs , VSCommandTable.vsct dosyasında tanımlanan komutun komut işleyicisidir. Komutun yürütülmesi sırasında düğmeye tıklanarak gerçekleşenleri denetler.

Komutu değiştirme

İlk olarak, komutunuzun Visual Studio menü sistemi içinde doğru ada, simgeye ve konuma sahip olduğundan emin olmak istiyorsunuz.

VSCommandTable.vsct dosyasını açın ve bir <Group> ve <Button>bulun. Düğmenin, bir grubun parçası olarak konumlandırıldığına ve bu grubun üst öğesinin yerleşik VSMainMenu/Araçlar menüsü olduğuna dikkat edin.

Uzantınız için GUID Ekle komut düğmesinin Düzenle ana menüsünün altında olmasını istiyorsunuz, bu nedenle grubu Düzenle menüsünün altına taşımak için grubun ebeveynini değiştireceksiniz. Aşağıdaki kod parçacığında olduğu gibi AraçlarıDüzenle ile değiştirin:

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

Doğru noktayı bulmayı kolaylaştırmak için yerleştirmelerde tam IntelliSense desteği sağlanır.

VSCT ana IntelliSense.

<Button>'nin güncellenmesi de gerekiyor. öğesinin özniteliğini PasteAppend olarak güncelleyerek yeni bir simge oluşturacaksınız. Metni iyi, açıklayıcı bir adla güncelleştirin <ButtonText> ve komutunun teknik adıyla güncelleştirin <LocCanonicalName> . Bu, Araçlar > Seçenekleri > Ortam > Klavyesi iletişim kutusunda kullanıcılara komutunuza özel klavye kısayolları atadığında gösterilen addır.

<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>

Uyarı

her zaman nokta karakteriyle başlayın <LocCanonicalName> . Başka hiçbir metnin otomatik olarak önceden eklenmemesini ve noktanın görüntülenmemesini sağlar.

Visual Studio'nun görüntü kitaplığında bulunan binlerce simgeyi kullanabilir ve hatta IntelliSense'te gösterilen önizlemeyi alabilirsiniz:

VSCT simgesi IntelliSense.

Şimdi komutumuzun adını, simgesini ve konumunu güncelleştirdiniz ve guid'yi metin düzenleyicisine eklemek için kod yazmanın zamanı geldi.

/Commands/MyCommand.cs dosyasını açın ve çalıştırıldığında yeni bir GUID eklemek için değiştirin.

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

Aktif düzenleyici metin görünümünü almak ve ardından guid değerini metin arabelleğinin imleç konumuna eklemek için VS nesnesini kullanıyorsunuz. VSVisual Studio IDE kullanıcı arabirimi öğelerine erişim sağlayan statik bir nesnedir; vsIX Community Toolkit GitHub deposundakiVS.cs tanımına bakın.

Uyarı

Birçok yerde bu topluluk araç setinde await JoinableTaskFactory.SwitchToMainThreadAsync() ve ThreadHelper.ThrowIfNotOnUIThread() göreceksiniz. İş parçacığı değiştirme en iyi pratiklerini ele alırlar ve bu noktada bunları ne zaman ve nasıl kullanacağınızı bilmeniz gerekmez - Derleyici uyarıları ve Kod Düzeltmeleri (işaret ışıkları) süreçleri çok basit hale getirir.

Uzantımızın ilk taslağı artık tamamlandı ve test etme zamanı geldi.

Çalıştırma ve hata ayıklama

Uzantınızı çalıştırmak, diğer .NET projelerini çalıştırmak kadar kolaydır. Hata ayıklayıcı ekli olarak çalıştırmak için F5 tuşuna veya olmadan çalıştırmak için Ctrl+F5 tuşlarına basmanız yeterlidir.

Bunu yaptığınızda uzantınız yüklü olarak Visual Studio'nun Deneysel Örneği başlatılır. Deneysel Örnek, Visual Studio'nun normal sürümünüzdür, ancak ayrı ayarlar ve uzantılar yüklüdür. Şeylerin ayrı tutulmasına yardımcı olur.

Deneysel Örnek başlatıldığında, Düzenle ana menüsünde GUID Ekle komutunu görmeniz gerekir.

Ana menüyü düzenle'de bulunan GUID ekle komutu.

Herhangi bir metin tabanlı dosyayı açın ve komutunu yürüterek yeni bir guid ekleyin. Hepsi bu kadar!

Özet

Şimdi ana menüye bir komut düğmesi ekleyen ve yürütürken metin düzenleyicisiyle etkileşim kuran ilk uzantınızı oluşturdunuz.

Tebrikler!!

Bu uzantının kodunu örnek deposunda bulabilirsiniz.