Добавление аннотации кода Resharper к собственному коду неинвазивным способом

Я хочу пометить один из моих методов с атрибутом StringFormatMethod, чтобы синтаксис Resharper выделил его.

Я смог сделать это, сославшись на сборку JerBrains.Annotations и добавив атрибут.

Однако я считаю, что это очень агрессивный способ сделать это. Не все здесь используют JetBrains, и это потребует фиксации.dll в subversion, добавления зависимости и засорения кода чем-то, специфичным для конкретной IDE, которую я ненавижу.

Я читал о функции "внешних аннотаций", но не смог этого сделать. Я не уверен, сделал ли я это неправильно или просто не поддерживается для проекта внутри решения (т.е. не для ссылки на скомпилированную сборку).

Так есть ли способ добавить аннотацию кода к методу в проекте неинвазивным способом?

PS это метод:

используя Систему;

namespace MyLib
{
    public static class Assert
    {
        public static void That(bool condition, string format, params object[] @params)
        {
            if (!condition)
                throw new Exception(string.Format(format, @params));
        }
    }
}

И это содержание

C:\Program Files (x86)\JetBrains\ReSharper\v7.1\Bin\ExternalAnnotations\MyLib.xml:

<assembley name="MyLib">
    <member name="MyLib.Assert.That(System.Boolean,System.String,System.Object[])">
        <attribute ctor="M:JetBrains.Annotations.StringFormatMethodAttribute.#ctor">
            <argument>format</argument>
        </attribute>
    </member>
</assembley>

3 ответа

Решение

Вам не нужно ссылаться на сборку, чтобы добавить атрибуты аннотации. Согласно документации, вы можете перейти к ReSharper/Options/Code Annotationsскопируйте реализации атрибутов в буфер обмена и вставьте их в свой собственный источник, где ReSharper будет их использовать. Вы даже можете изменить пространство имен, в котором они находятся, если вы предпочитаете не иметь JetBrains в вашей сборке.

Я не знаю, удастся ли вам использовать внешние (XML) аннотации для исходного кода. У меня сложилось впечатление, что они только для существующих двоичных файлов. Тем не менее, я думаю, что украшение вашего источника атрибутами является весьма ценным источником документации для вас и других разработчиков.

Просто чтобы подвести итог возможностей:

  • Вы ссылаетесь на nuget Jetbrains.Annotations и НЕ определяйте JETBRAINS_ANNOTATIONS Такие аннотации полезны только для разработчиков, работающих с исходным кодом, они не скомпилированы в вашем бинарном файле (используется условный оператор) и не видны при обращении к вашей DLL. Вы даже можете добавить developmentOnly="true" приписывать Jetbrains.Annotations в packages.config, поэтому по умолчанию он не будет рассматриваться как зависимость.

  • Вы ссылаетесь как указано выше, но определяете JETBRAINS_ANNOTATIONS : теперь у вас есть реальная бинарная зависимость и Jetbrains.Annotations.dll должен быть либо распространен вместе с вашей библиотекой, либо загружен как зависимость nuget.

  • Вы копируете аннотации с internal проверил (чтобы клиентский код не использовал их) в "YourLib.Annotations": они затем встраиваются в вашу библиотеку и становятся доступными для других разработчиков, даже если они используют только двоичную версию.

  • Вы предоставляете внешние аннотации: для больших библиотек / большего количества атрибутов это также может потреблять 40 КБ, это отдельный файл, и, как правило, его создание / использование не так просто.

Я лично выбрал третий вариант (для разделяемых библиотек проекты обычно используют только нюгетеры)

Не знаю, поможет ли это, но название элемента <assembley> написано с ошибкой (если они на самом деле не использовали это в схеме). Должно быть <assembly>,

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