Как добавить сочетание клавиш в расширение Visual Studio?C#

Место общения программистов C#
Ответить
Anonymous
 Как добавить сочетание клавиш в расширение Visual Studio?

Сообщение Anonymous »

Я пытаюсь научиться создавать сочетание клавиш в расширении Visual Studio 2022.
Я хотел бы получить ярлык отображается и доступен для редактирования в Инструменты > Параметры > Среда > Клавиатура
Шаги, которые я пробовал:
  • < li>Добавлено: [ProvideMenuResource("Menus.ctmenu", 1)]
  • Создан пакет и GUID кнопок быстрого доступа в общедоступном статическом классе PackageIds
  • Создал файл .vsct и установил тот же GUID, который использовался для кнопку.
  • Изменено включение .vsct в .csproj на VSCTCompile

Код: Выделить всё

  

Menus.ctmenu
Designer


Он компилируется и устанавливается, когда я нажимаю Ctrl + W, я вижу, как курсор на короткое время меняется на значок загрузки, но Функция Execute() никогда не вызывается.
Чего мне не хватает?
VSIXPackage.cs

Код: Выделить всё

using Microsoft;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using System;
using System.Runtime.InteropServices;
using System.Threading;
using System.ComponentModel.Design;
using System.Windows;
using Task = System.Threading.Tasks.Task;

namespace VSIX;

[PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
[ProvideMenuResource("Menus.ctmenu", 1)]
[Guid(VSIXPackage.PackageGuidString)]
[ProvideAutoLoad(UIContextGuids.NoSolution, PackageAutoLoadFlags.BackgroundLoad)]
public sealed class VSIXPackage : AsyncPackage
{
public const string PackageGuidString = "f9a8aea3-f579-4816-9cb5-4ae3a5d68ef7";

protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress progress)
{
await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);

var commandService = await GetServiceAsync(typeof(IMenuCommandService)) as OleMenuCommandService;
Assumes.Present(commandService);

var menuCommandID = new CommandID(PackageIds.guidVSIXPackageCmdSet, PackageIds.MyCommandId);
var menuItem = new OleMenuCommand((s, e) => Execute(), menuCommandID);
commandService.AddCommand(menuItem);
}

public static void Execute()
{
MessageBox.Show("Hello World!");
}

public static class PackageIds
{
public const string CmdSetGuid = "d858b0de-b9fa-49e8-a7ae-e080d04a78be"; // Match the GUID in .vsct
public const int MyCommandId = 0x0100;
public static readonly Guid guidVSIXPackageCmdSet = new Guid(CmdSetGuid);
}
}
VSIXPackage.vsct

Код: Выделить всё

















MyCommandId
MyShortcut



















VSIX.csproj

Код: Выделить всё



17.0
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)



Debug
AnyCPU
2.0
{82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
{C28A9253-3A5D-41ED-A3F9-FAA709A70BD9}
Library
Properties
VSIX
VSIX
v4.7.2
12
true
true
true
false
false
true
true
Program
$(DevEnvDir)devenv.exe
/rootsuffix Exp


true
full
false
bin\Debug\
DEBUG;TRACE
prompt
4


pdbonly
true
bin\Release\
TRACE
prompt
4







Designer











5.0.2




Menus.ctmenu
Designer






Полный проект расширения можно найти здесь, на GitHub.


Подробнее здесь: https://stackoverflow.com/questions/791 ... -extension
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»