Существует ли директива резких комментариев, чтобы отключить очистку кода для класса?
У меня есть класс, где FileHelpers зависит от порядка полей в этом файле класса. Если файл класса когда-либо получит очистку кода, запустите его, что приведет к сортировке полей по алфавиту и незаметно испортит мой класс.
Поскольку я хотел бы избежать этого случайно, существует ли директива резкого комментария, чтобы отключить очистку кода для класса?
3 ответа
Вы можете настроить XML-файл макета элемента по умолчанию и указать шаблон, который вы хотите игнорировать на этапе "Изменение порядка элементов" при очистке кода.
Взгляните на раздел "Тип элемента" в настройках Resharper. Вы можете видеть, что уже есть два исключения, определенные для интерфейсов COM и структур с StructLayoutAttribute
:
<!--Do not reorder COM interfaces-->
<Pattern>
<Match>
<And Weight="100">
<Kind Is="interface"/>
<HasAttribute
CLRName="System.Runtime.InteropServices.InterfaceTypeAttribute"/>
</And>
</Match>
</Pattern>
<!--Do not reorder when StructLayoutAttribute is set -->
<Pattern>
<Match>
<And Weight="100">
<Or>
<Kind Is="struct"/>
<Kind Is="class"/>
</Or>
<HasAttribute
CLRName="System.Runtime.InteropServices.StructLayoutAttribute"/>
</And>
</Match>
</Pattern>
Вы можете легко создать свой собственный IgnoreTypeMemberReorderingAttribute
и добавьте небольшой раздел в файл XML, который проверяет это.
Я считаю, что Resharper наблюдает атрибут [StructLayout(LayoutKind.Sequential)].
Обновление: я думаю, что это работало для классов на момент написания, но в текущих версиях Resharper (10), кажется, это относится только к структурам, а не к классам. Так что это, вероятно, все еще полезно во многих ситуациях взаимодействия, но не является общим способом удержания порядка любого класса.
Еще один полезный атрибут для применения к вашим полям [FieldOrder(1)]
, так что вы явно определяете порядок... Мне нравится, как на всякий случай, чтобы защитить от полей, когда-либо переупорядоченных
Не уверен, с какой версией FileHelpers это пришло... Я использую v2.9.9.0, установленную с помощью NuGet