Я знаю, что об этом уже есть некоторые темы, но я просто не буду работать для меня.VS2010 Надстройка, добавление команды в контекстное меню?
Что я хочу: Мне нужна новая запись в контекстном меню Visual Studio Source Control Explorer. Для этого я начал новый проект надстройки.
Что я использовал: Я использовал эту статью в качестве руководства. http://blogs.msdn.com/b/team_foundation/archive/2010/06/24/extending-work-item-tracking-context-menus.aspx
Что не работает: я не получаю никаких исключений, меню просто не будут отображаться, независимо от того, где я добавить его.
Некоторые фрагменты кода:
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
if(connectMode == ext_ConnectMode.ext_cm_UISetup)
{
AddCommandToContextMenu(
"Team Project", // context menu Name
"ClearQuery", // menu reference name
"Clear", // display name
47, // command icon
1); // command placement, 1= first item on top
}
}
Я использую название меню "Team Project" для тестирования. VSIPLogging сообщает мне, что это имя меню, если я сделаю правый щелчок на нашем проекте Team TFS. Я также пробовал другие меню без успеха.
Вот функции AddCommandToContextMenu:
private void AddCommandToContextMenu(string menuName, string commandName, string commandText, int iconId, int position)
{
CommandBar contextMenu = ((CommandBars)_applicationObject.CommandBars)[menuName];
AddCommand(contextMenu, commandName, commandText, iconId, position);
}
private void AddCommand(CommandBar parent, string commandName, string commandText, int iconId, int position)
{
Commands2 commands = (Commands2)_applicationObject.Commands;
//create the command
Command newCommand = commands.AddNamedCommand2(_addInInstance, commandName, commandText, commandText, true, iconId);
// add it to parent menu
newCommand.AddControl(parent, position);
}
CommandBar "родитель" дает мне довольно некоторые исключения, если я повнимательнее взглянуть на него:
accChildCount = 'parent.accChildCount' бросил исключение типа «Microsoft.VisualStudio.PlatformUI.Automation.DeprecatedException»
То же самое для каждого другого значения «acc».
Теперь я действительно не знаю, что я сделал не так, или что еще я мог попытаться сделать эту работу. Все, что я хочу сделать, это иметь запись в контекстном меню в проводнике-источнике, которая должна вызывать командную строку exe, чтобы вызвать функцию «отменить неизменную».
Я бы не стал слишком беспокоиться об устаревших Исключениях; они, вероятно, только там, потому что MS не хочет, чтобы вы использовали устаревшую версию интерфейса. Вероятно, они немного изменили интерфейс с момента его первого выпуска и не смогли удалить свойства по соображениям совместимости. – takrl
Каков ваш метод QueryStatus? Этот метод определяет, скрыта или видима команда, и я замечаю, что статья, на которую вы указываете, не дает примера ее реализации. –
У меня почти такой же код, за исключением того, что я добавляю свои пользовательские команды внутри метода «IDTExtensibility2.OnStartupComplete». А внутри метода "IDTExtensibility2.OnConnection", я использую "ext_ConnectMode.ext_cm_AfterStartup" вместо "ext_ConnectMode.ext_cm_UISetup": если (ConnectMode == ext_ConnectMode.ext_cm_AfterStartup) this.OnStartupComplete (ссылка на заказ); –