ReSharper 9 Добавление пункта меню не работает
Пытаюсь обновить расширение resharper для работы на 9.0, прежде чем я просто переместил dll в каталог плагинов, но теперь мне нужно выяснить, как заставить работать nuget... Я смог упаковать файлы, dll получает включен в nupkg, но я думаю, что у меня есть некоторое пространство имен \id, что-то, что что-то вызывает (не очень знакомо с.net), и не похоже, что мой файл actions.xml даже читается resharper, когда я импортирую пакет nuget. Пункт меню не добавляется. В любом случае, если кто-нибудь может дать мне какой-либо совет о том, как отлаживать пакет nuget или что может пойти не так, был бы очень признателен, так как я застрял в этом несколько дней назад.
Actions.xml
<?xml version="1.0" encoding="utf-8" ?>
<actions>
<action id="yuval" text="L10N"></action>
<insert group-id="ReSharper" position="last">
<action-ref id="yuval" text="About Localization Helper"/>
</insert>
</actions>
AboutAction.cs
namespace JetBrains.Resharper.L10N
{
[Action(Id)]
public class AboutAction : IExecutableAction
{
public const string Id = "yuval";
public bool Update(IDataContext context, ActionPresentation presentation, DelegateUpdate nextUpdate)
{
return true;
}
public void Execute(IDataContext context, DelegateExecute nextExecute)
{
MessageBox.ShowMessageBox(
"Localization Helper\nYuval\n\nHelps Localize",
"About Localization Helper",
MbButton.MB_OK,
MbIcon.MB_ICONASTERISK);
}
}
}
Nuget Spec
<?xml version="1.0"?>
<package >
<metadata>
<id>JetBrains.Resharper.L10N</id>
<version>1.0.0.7</version>
<title>L10N</title>
<authors>Yuval</authors>
<owners>UW</owners>
<licenseUrl>https://myurl.com</licenseUrl>
<projectUrl>https://myurl.com</projectUrl>
<iconUrl>https://myurl.com/logo.png</iconUrl>
<requireLicenseAcceptance>true</requireLicenseAcceptance>
<description>Tool to help localize</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2015</copyright>
<tags></tags>
<dependencies>
<dependency id="Wave" version="[1.0]" />
</dependencies>
</metadata>
<files>
<file src="..\bin\Debug\JetBrains.Resharper.L10N.dll"
target="dotFiles\"/>
</files>
</package>
1 ответ
Способ регистрации действий изменился в ReSharper 9. Это больше не делается с actions.xml
, но с интерфейсами в вашем классе действий. Например, чтобы добавить действие в меню ReSharper → Инструменты, вы должны сделать:
[Action(ActionId, Id = 1)]
public class AboutAction : IExecutableAction, IInsertLast<ToolsMenu>
{
public const string ActionId = "yuval";
// …
}
Вам также нужно указать уникальное значение для Id
, Начиная с 9.1, это должно быть уникальным в вашем собственном расширении (9.0 требовало, чтобы оно было уникальным для всей установки, включая сам ReSharper и любые другие расширения).
Всякий раз, когда вы изменяете атрибуты или интерфейсы действия, расширение необходимо переустанавливать через nupkg (действия статически регистрируются в Visual Studio, так же, как стандартное расширение VS), но если изменилась только реализация, вы можете Скопируйте DLL-файлы в папку установки, либо вручную, либо с помощью небольшого изменения в.csproj.
Вы также должны убедиться, что вы определили ZoneMarker
учебный класс. Это объявляет, что ваше действие принадлежит к зоне, которая используется для включения / выключения функциональности на основе установленных функций и текущего хоста (например, поэтому определенные расширения Visual Studio работают только в VS и не загружаются в dotPeek и т. Д.). Вы можете узнать больше о Зонах в devguide, с этой страницей, предоставляющей полезную информацию для определения маркера зоны.
Эта ветка тоже должна помочь.
Кроме того, это, вероятно, хорошая идея, чтобы назвать вас dll и nupkg что-то, кроме JetBrains.ReSharper.(Whatever)
предотвратить любые потенциальные столкновения с официальными dll, и предотвратить путаницу относительно того, откуда dll происходит. Предполагается, что первой частью имени будет название вашей компании (или личное имя).