Поделиться через


Создание расширения с помощью VSPackage

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

Создание VSPackage

  1. Создайте проект VSIX с именем FirstPackage. Шаблон проекта VSIX можно найти в диалоговом окне "Новый проект ", выполнив поиск vsix.

  2. Когда проект откроется, добавьте шаблон элемента пакета Visual Studio с именем FirstPackage. Щелкните правой кнопкой мыши узел проекта в Обозревателе решений, а затем выберите Добавить>Новый элемент. В диалоговом окне "Добавление нового элемента" перейдите в Visual C#>Extensibility и выберите пакет Visual Studio. В поле "Имя" в нижней части окна измените имя файла команды на FirstPackage.cs.

  3. Выполните сборку решения и запустите отладку.

    Появится экспериментальный экземпляр Visual Studio. Дополнительные сведения о экспериментальном экземпляре см. в разделе "Экспериментальный экземпляр".

  4. В экспериментальном экземпляре откройте окно "Расширения инструментов>" и Обновления. Здесь должно появиться расширение FirstPackage . (При открытии Расширения и Обновления в рабочем экземпляре Visual Studio вы не увидите FirstPackage).

Загрузка VSPackage

На этом этапе расширение не загружается, так как нет ничего, что приводит к загрузке. Обычно можно загрузить расширение при взаимодействии с его пользовательским интерфейсом (щелкнув команду меню, открыв окно инструмента) или указав, что VSPackage должен загружаться в определенном контексте пользовательского интерфейса. Дополнительные сведения о загрузке VSPackages и контекстах пользовательского интерфейса см. в разделе "Загрузка VSPackages". Для этой процедуры мы покажем, как загрузить VSPackage при открытии решения.

  1. Откройте файл FirstPackage.cs. Найдите объявление FirstPackage класса. Замените существующие атрибуты следующими атрибутами:

    [PackageRegistration(UseManagedResourcesOnly = true)]
    [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] // Info on this package for Help/About
    [ProvideAutoLoad(UIContextGuids80.SolutionExists)]
    [Guid(FirstPackage.PackageGuidString)]
    public sealed class FirstPackage : Package
    
  2. Давайте добавим сообщение, которое позволяет нам знать, что VSPackage загружен. Для этого мы используем метод VSPackage, так как вы можете получить службы Visual Studio только после того, как vsPackage Initialize() был сайтом. (Дополнительные сведения о получении служб см. в статье Практическое руководство. Получение службы.) Замените Initialize() метод FirstPackage кода, который получает SVsUIShell службу, получает IVsUIShell интерфейс и вызывает его ShowMessageBox метод.

    protected override void Initialize()
    {
        base.Initialize();
    
        IVsUIShell uiShell = (IVsUIShell)GetService(typeof(SVsUIShell));
        Guid clsid = Guid.Empty;
        int result;
        Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(uiShell.ShowMessageBox(
            0,
            ref clsid,
            "FirstPackage",
             string.Format(CultureInfo.CurrentCulture, "Inside {0}.Initialize()", this.GetType().FullName),
            string.Empty,
            0,
            OLEMSGBUTTON.OLEMSGBUTTON_OK,
            OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST,
            OLEMSGICON.OLEMSGICON_INFO,
            0,
            out result));
    }
    
  3. Выполните сборку решения и запустите отладку. Откроется экспериментальный экземпляр.

  4. Откройте решение в экспериментальном экземпляре. Появится окно сообщения, которое говорит first Package Inside Initialize().