Могу ли я убедиться, что resharper не меняет порядок полей в этом классе?
Я использую этот класс NetResource для отправки файлов на сетевой диск, и это выглядит так:
[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
public ResourceScope Scope;
public ResourceType ResourceType;
public ResourceDisplayType DisplayType;
public int Usage;
public string LocalName;
public string RemoteName;
public string Comment;
public string Provider;
}
Теперь очень важно, чтобы порядок этих полей оставался таким же, как намекнул StructLayout
приписывать.
Тем не менее, когда кто-то запускает очистку с помощью резарпера, он решает переместить поля, и это нарушит код.
Есть ли способ сказать Рехсарперу не связываться с ним? Я чувствую, что если я не смогу этого сделать, кто-то в конце концов нарушит код и не знает, где искать.
Но посредственным решением, которое я считаю, было бы создание юнит-теста, который мог бы проверить, есть ли расположение, как ожидалось.
Изменить: я видел этот ответ, но он устарел и требует обновления настроек резче. Я также не буду гарантирован, что коллеги используют эту настройку резкости. Я ищу способ добавить его в код, так же, как вы можете сделать // ReSharper disable once InconsistentNaming
1 ответ
Я вижу пару решений здесь:
- Вы можете пометить класс
NoReorderAttribute
из JetBrains.Annotations (есть несколько способов добавить их в проект). Затем ReSharper прекратит переупорядочивать элементы внутри отмеченного объекта кода. - В основном это уже упомянутый ответ, я покажу вам, как получить то же самое в последних сборках ReSharper. Все, что вам нужно, это добавить "System.Runtime.InteropServices.StructLayoutAttribute" в шаблон "Не переупорядочиваемые типы" в ReSharper | Варианты | Редактирование кода | C# | Макет файла.
Чтобы ваши коллеги использовали те же настройки в ReSharper, сохраните это изменение в общем слое команды разработчиков (Save To
в нижней части диалога параметров). Затем, если кто-либо из ваших коллег откроет решение, ReSharper автоматически использует настройки этого слоя без дополнительных действий.