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 происходит. Предполагается, что первой частью имени будет название вашей компании (или личное имя).

Другие вопросы по тегам