2010-07-09 14 views
13

Tengo una clase donde FileHelpers depende del orden de campo en este archivo de clase. Si el archivo de la clase alguna vez obtiene un código de limpieza, corra contra él, lo que hará que los campos se clasifiquen alfabéticamente e irremediablemente arruinen mi clase.¿Hay una directiva de comentarios de Resharper para deshabilitar la limpieza del código para una clase?

Como me gustaría evitar que esto ocurra accidentalmente, ¿hay alguna directiva de comentarios de resistencia para deshabilitar la limpieza del código para una clase?

Respuesta

11

Puede personalizar el archivo XML de diseño de miembros predeterminado y especificar un patrón que desea ignorar durante el paso "reordenar miembros" de una limpieza de código.

Eche un vistazo a la sección Tipo de diseño de miembro en la configuración de Resharper. Se puede ver que ya hay dos excepciones definidas para las interfaces COM y Structs con el 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> 

Desde aquí se puede crear su propia IgnoreTypeMemberReorderingAttribute y añadir una pequeña sección en el archivo XML que comprobar en contra de ella.

+1

Hoy en día se llama _File Layout_ y es fácil de encontrar si buscas en las Opciones de Resharper. Vale la pena mencionar que _COM interfaces o structs_ se encuentran en el mismo nivel que _Default Pattern_, si ya se ha alejado de _Patterns_. – wezzix

9

Creo que Resharper observa el atributo [StructLayout (LayoutKind.Sequential)].

Actualización: Creo que esto funcionaba para las clases en el momento de la escritura, pero en las versiones actuales de Resharper (10), parece que solo se aplica a las estructuras, no a las clases. Por lo tanto, probablemente todavía sea útil en muchas situaciones de interoperabilidad, pero no es una forma general de mantener el orden de cualquier clase.

+0

No funciona. Probado con 10.0.2 – user764754

+0

@ user764754 - Parece que funciona con structs pero no con clases en la versión actual de Resharper. Esto probablemente sigue la semántica de 'StructLayoutAttribute' –

2

Otro atributo útil para aplicar a sus campos es [FieldOrder(1)], por lo que se define explicitamente el orden ... me gusta como ordenada re just-in-caso para protegerse de los campos cada vez que se

No estoy seguro de qué versión de FileHelpers esto vino con ... Estoy usando el v2.9.9.0 instalado usando NuGet

+0

Terminé creando un metaproyecto completo para FileHelpers que me permite dejar de preocuparme por el orden de los campos para relacionarlo con el orden de las columnas en un archivo csv. Si alguna vez se abre de origen seguiré aquí con él. –

+1

FWIW finalmente abandonamos el uso de mi puente FileHelper y en este punto utilizo http://joshclose.github.io/CsvHelper/ cada vez que necesito CSV –

Cuestiones relacionadas