В этой статье мы рассмотрим основы расширения Visual Studio. Кроме того, создайте одно приложение и изучите файловую структуру и реализацию.

Повестка дня

  • Обзор
  • Создайте новый проект VSIX
  • Структура файла

Предпосылки

  • Визуальная студия
  • Разработка расширений Visual Studio

Обзор

  • Проект VSIX используется для создания нашего пользовательского расширения или упаковки существующего расширения для развертывания в соответствии с нашими требованиями.
  • В проекте VSIX доступны две версии шаблона для Visual Basic и Visual C# в составе пакета SDK для .NET Core.

Создайте новый проект VSIX

Шаг 1

Установите разработку расширения Visual Studio из Tools->Get Tools and Features.

Шаг 2

Затем установите Extensibility Essentials 2022, который поможет нам писать разные расширения.

Шаг 3

Создайте новый проект VSIX

  • Существует множество доступных шаблонов проектов VSIX, каждый со своим назначением и использованием.
  • Шаблон проекта VSIX с командой (сообщество) поставляется с подключенной командой, что помогает нам легко запускать новое расширение после создания команд и их настройки в Visual Studio.
  • Проект VSIX с окном инструментов (сообщество)шаблон с командой окна инструментов.
  • Шаблоны Пустой проект VSIX (сообщество) и Проект VSIX (сообщество) для расширений только для MEF или в других случаях используются в сценариях расширенной настройки.

Но здесь, в этой статье, мы собираемся использовать шаблон проекта VSIX с командой (сообщество).

Шаг 4

Настроить новый проект

Шаг 5

Структура проекта по умолчанию

Как видите, внутри решения проекта VSIX будут созданы разные файлы, каждый со своей целью. Итак, мы рассмотрели их один за другим и поняли их назначение.

MyCommand.cs

Это файл обработчика команд, который выполняет логику, когда команда запускается пользователем.

namespace VSIXProject
{
    [Command(PackageIds.MyCommand)]
    internal sealed class MyCommand : BaseCommand<MyCommand>
    {
        protected override async Task ExecuteAsync(OleMenuCmdEventArgs e)
        {
            await VS.MessageBox.ShowWarningAsync("VSIXProject", "Button clicked");
        }
    }
}

Ресурсы/icon.png

Этот файл используется для установки значков для нашего расширения. Мы также можем создавать свои собственные значки для того же самого.

source.extension.vsixmanifest

Он содержит метаданные нашего проекта расширений, такие как имя, описание, версия, теги, автор и т. д.

// ------------------------------------------------------------------------------
// <auto-generated>
//     This file was generated by the extension VSIX Synchronizer
// </auto-generated>
// ------------------------------------------------------------------------------
namespace VSIXProject
{
    internal sealed partial class Vsix
    {
        public const string Id = "VSIXProject.34901e8a-0458-4252-9662-9ca734552faf";
        public const string Name = "VSIXProject";
        public const string Description = @"Empty VSIX Project.";
        public const string Language = "en-US";
        public const string Version = "1.0";
        public const string Author = "jaydeepvpatil225";
        public const string Tags = "";
    }
}

VSCommandTable.vsct

Это файл XML, и он содержит привязку различных команд к идентификаторам, текст кнопки для нашей команды, родительское меню и многое другое.

<?xml version="1.0" encoding="utf-8"?>
<CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<Extern href="stdidcmd.h"/>
  <Extern href="vsshlids.h"/>
  <Include href="KnownImageIds.vsct"/>
  <Include href="VSGlobals.vsct"/>
  <Commands package="VSIXProject">
    <Groups>
      <Group guid="VSIXProject" id="MyMenuGroup" priority="0x0600">
        <Parent guid="VSMainMenu" id="Tools"/>
      </Group>
    </Groups>
    <!--This section defines the elements the user can interact with, like a menu command or a button
        or combo box in a toolbar. -->
    <Buttons>
      <Button guid="VSIXProject" id="MyCommand" priority="0x0100" type="Button">
        <Parent guid="VSIXProject" id="MyMenuGroup" />
        <Icon guid="ImageCatalogGuid" id="StatusInformation" />
        <CommandFlag>IconIsMoniker</CommandFlag>
        <Strings>
          <ButtonText>My Command</ButtonText>
          <LocCanonicalName>.VSIXProject.MyCommand</LocCanonicalName>
        </Strings>
      </Button>
    </Buttons>
  </Commands>
  <Symbols>
    <GuidSymbol name="VSIXProject" value="{bb2edf02-da6e-4673-b2a4-b3b7449b2ce7}">
      <IDSymbol name="MyMenuGroup" value="0x0001" />
      <IDSymbol name="MyCommand" value="0x0100" />
    </GuidSymbol>
  </Symbols>
</CommandTable>

VSIXProjectPackage

В этом файле есть один метод Initialize, который асинхронно регистрирует команды, когда мы запускаем наш проект расширения.

global using Community.VisualStudio.Toolkit;
global using Microsoft.VisualStudio.Shell;
global using System;
global using Task = System.Threading.Tasks.Task;
using System.Runtime.InteropServices;
using System.Threading;

namespace VSIXProject
{
    [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
    [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)]
    [ProvideMenuResource("Menus.ctmenu", 1)]
    [Guid(PackageGuids.VSIXProjectString)]
    public sealed class VSIXProjectPackage : ToolkitPackage
    {
        protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
        {
            await this.RegisterCommandsAsync();
        }
    }
}

Шаг 6

Запустить проект

Когда мы запустим проект, он откроет одну экспериментальную визуальную студию и будет хранить свои вещи отдельно, связанные с настройками.

Здесь, как мы видим, наша команда появляется в меню «Инструмент» «MyCommand», и когда вы нажимаете на нее, появляется всплывающее сообщение с подробностями, которые мы поместили в файл MyCommand. На самом деле, здесь мы только рассмотрели основы, но вы можете настроить его в соответствии с требованиями и выполнять различные операции.

Это все о примере проекта VSIX.

GitHub:

https://github.com/Jaydeep-007/VSIXProject

Заключение

Здесь мы обсудили основы расширения VSIX с реализацией демонстрационного приложения и сведениями о его файловой структуре.

Удачного кодирования!!!