Добавление аннотации кода 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>
,