2009-11-24 18 views
12

Adoro ReSharper y no funcionaría sin él, pero hay algunas trampas que se han topado con y aprendido a evitar:ReSharper Gotchas

  • Permitir ReSharper para cambiar el nombre literales de cadena automáticamente realmente puede morder en ejemplos como cuando las variables de objeto coinciden con los nombres de columna en su DAL SQL u otras constantes de cadena. He aprendido que en lugar de presionar impacientemente la tecla Intro cuando aparece el segundo cuadro de diálogo de cambio de nombre, realmente necesito ver lo que ReSharper sugiere y, a menudo, omitir el cambio de nombre de los literales de la cadena.
  • Este es un poco más insidioso: cuando tiene activado el análisis de toda la solución, ReSharper le dirá si se utilizan o no métodos públicos. Esto incluye getters y setters en propiedades. Es una gran característica, pero lo que ReSharper no sabe es que cuando se diseña una vista que se mostrará en el diseñador (formulario, usuario ctrl) se llama a los captadores de propiedades y los arreglos en el momento del diseño y no aparecen en compilación. Entonces ReSharper sugerirá que los captadores o incubadores de esa propiedad se pueden hacer privados o simplemente eliminarse. Pero si realiza el ajuste y luego carga la vista en el diseñador, el diseñador se bloqueará porque la propiedad no está disponible y el mensaje de error no es exactamente obvio. En pocas palabras, un programador necesita considerar cuidadosamente las sugerencias de uso de propiedad cuando diseña una vista.

Esos son mis mayores. ¿Qué más hay por ahí que podría morderme a mí y a otros aficionados ReSharper?

+1

Ofrecer cambiar el nombre de los usos en cadenas es solo una característica estúpida. Me muerde todo el tiempo y nunca * quiero * buscar cadenas. El * punto * completo de refactorización es que es a prueba de balas. Renombrar dentro de cadenas nunca es a prueba de balas, no sé por qué incluso lo ofrecen. –

+1

@Kirk: estoy de acuerdo. Al menos debería estar deshabilitado por defecto. –

Respuesta

22

Cuando me encuentro con las directivas de preprocesador que usan #ifs para hacer una compilación condicional, y la configuración actual está configurada para que un bloque de código esté oculto, no parece ver el código # if'd y recomendará sacando una variable que usa ese bloque de código, pensando que nunca se llama.

+4

+1 en esto. Resharper no parece entender las declaraciones de compilación condicionales. – camainc

+5

Me encontré con esto hoy y he informado: http://youtrack.jetbrains.com/issue/RSRP-337056 –

+1

@RudiVisser ¡Usted ha informado esto hace mucho tiempo y el problema sigue abierto! También es un problema con los usuarios, Resharper piensa que algunos espacios de nombres pueden eliminarse mientras que este no es el caso ... –

14

Puede marcar tales propiedades mediante el atributo UsedImplicitly y ReSharper no lo eliminará.

+1

Bueno, aunque me gusta evitar el uso de atributos para dirigir una herramienta de productividad, ya que vincula el código a un tercero paquete. ¿Existe posiblemente una configuración donde R # puede ignorar los atributos en las clases derivadas de control?O tal vez esa debería ser una sugerencia de función para el equipo de JetBrains para la próxima versión. –

+0

lol. Equipo 23! ¡Creo que quizás acabo de presentar una solicitud de función! –

+6

No es necesario hacer referencia al ensamblaje de JetBrains. Puede copiar estos atributos a su proyecto, a cualquier lugar y espacio de nombres. Mire ReSharper → Opciones → Anotaciones de código → Copie la implementación predeterminada en el portapapeles. – derigel

2

Resharper está ignorando por completo o tiene una implementación de manejo bastante diferente Advertencia Como errores, el modificador de compilación del proyecto. Además, la última vez que lo comprobé, ignoró el bloqueo "Suprimir advertencias" en la configuración del proyecto cuando se usa junto con Avisos como errores.

7

Hemos utilizado la compilación condicional de todo el archivo en el pasado, y Resharper se vuelve completamente loco sobre eso. No tiene idea de que las condiciones existan, y pueden aparecer muchos conflictos y errores si ambos archivos declaran las mismas constantes y métodos.

<ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' Or '$(Configuration)|$(Platform)' == 'Release|x64'"> 
    <Compile Include="SomeFileFor.x64.cs"> 
     <SubType>Code</SubType> 
    </Compile> 
</ItemGroup> 
<ItemGroup Condition=" !('$(Configuration)|$(Platform)' == 'Debug|x64' Or '$(Configuration)|$(Platform)' == 'Release|x64')"> 
    <Compile Include="SomeFileFor.x32.cs"> 
     <SubType>Code</SubType> 
    </Compile> 
</ItemGroup> 
2

La compilación condicional se ha agregado a ReSharper 8. Acaba de obtener la última versión.