2009-11-24 18 views
12

i absolut verehre ReSharper und würde ohne sie nicht funktionieren, aber es gibt ein paar Fallstricke, die ich in gelaufen und gelernt zu vermeiden:ReSharper gotchas

  • erlauben ReSharper Stringliterale automatisch wirklich beißen können umbenennen in solche Fälle, wenn Ihre Objektvariablen den Spaltennamen in Ihrer DAL SQL- oder anderen String-Konstanten entsprechen. Ich habe gelernt, dass statt ungeduldig die Enter-Taste drücken, wenn der zweite Umbenennungsdialog erscheint, ich wirklich sehen muss, was ReSharper vorschlägt und oft den String literals Umbenennungsschritt überspringe.
  • Dies ist ein wenig heimtückischer: Wenn Sie Solution-Wide Analyse aktiviert haben, wird ReSharper Ihnen sagen, ob öffentliche Methoden verwendet werden. Dies schließt Getter und Setter in Eigenschaften ein. Es ist ein großartiges Feature, aber was ReSharper nicht weiß, ist, dass beim Entwerfen einer Ansicht, die im Designer angezeigt wird (Formular, Benutzer-Ctrl), die Eigenschaften-Getter und Setter zur Entwurfszeit aufgerufen werden und nicht angezeigt werden in der Zusammenstellung. Daher wird ReSharper vorschlagen, dass die Getter oder Setter dieser Eigenschaft privat gemacht oder einfach entfernt werden können. Wenn Sie jedoch die Anpassung vornehmen und anschließend die Ansicht im Designer laden, stürzt der Designer ab, weil die Eigenschaft nicht verfügbar ist und die Fehlermeldung nicht genau ersichtlich ist. Kurz gesagt, ein Programmierer muss beim Entwurf einer Ansicht sorgfältig Vorschläge für die Verwendung von Eigenschaften berücksichtigen.

Das sind meine Großen. Was gibt es sonst noch, die mich und andere ReSharper-Fans beißen könnte?

+1

Das Umbenennen von Verwendungen in Strings ist nur eine blöde Eigenschaft. Es beißt mich die ganze Zeit in den Arsch und ich will nie Strings suchen. Der ganze Punkt der Refactoring ist, dass es kugelsicher ist. Das Umbenennen in Strings ist nie kugelsicher - ich weiß nicht, warum sie es überhaupt anbieten. –

+1

@Kirk: Ich stimme zu. Zumindest sollte es standardmäßig deaktiviert sein. –

Antwort

22

Wenn ich Präprozessordirektiven durchführe, die #ifs für die bedingte Kompilierung verwenden, und die aktuelle Konfiguration so eingestellt ist, dass ein Codeblock ausgeblendet wird, scheint der # if'd-Code nicht angezeigt zu werden und wird empfohlen Eine Variable, die der Block des Codes verwendet, wird herausgezerrt und denkt, dass sie nie aufgerufen wird.

+4

+1 zu diesem Thema. Resharper scheint bedingte Compiler-Anweisungen nicht zu verstehen. – camainc

+5

Ich bin heute darauf gestoßen und habe berichtet: http://youtrack.jetbrains.com/issue/RSRP-337056 –

+1

@RudiVisser Sie haben dies vor langer Zeit gemeldet und das Problem ist noch offen! Es ist auch ein Problem mit usings, Resharper denkt, dass einige Namespaces entfernt werden können, während dies nicht der Fall ist ... –

14

Sie können solche Eigenschaften mit dem Attribut UsedImplicitly markieren, und ReSharper schlägt nicht vor, sie zu entfernen.

+1

Gute, obwohl ich gerne Attribute zu verwenden, um ein Produktivitätstool zu leiten, wie es den Code an eine dritte Partei bindet Paket. Gibt es möglicherweise eine Einstellung, in der R # Attribute in Control-abgeleiteten Klassen ignorieren kann?Oder vielleicht sollte das ein Feature-Vorschlag für das JetBrains-Team für die nächste Version sein. –

+0

lol. Mannschaft 23! Ich denke, dass ich vielleicht gerade eine Feature-Anfrage gestellt habe! –

+6

Es ist nicht notwendig, auf die JetBrains-Baugruppe zu verweisen. Sie können diese Attribute in Ihr Projekt und an jeden beliebigen Ort und Namespace kopieren. Siehe ReSharper → Optionen → Code-Anmerkungen → Standard-Implementierung in die Zwischenablage kopieren. – derigel

2

Resharper ignoriert entweder vollständig oder hat eine ganz andere Implementierung der Handhabung Warnung als Fehler Projekt Build-Schalter. Außerdem, als ich das letzte Mal nachprüfte, ignorierte es den Block "Warnungen unterdrücken" in der Projektkonfiguration, wenn er in Verbindung mit Warnungen als Fehler verwendet wurde.

7

Wir haben in der Vergangenheit feilenweite bedingte Kompilierung verwendet, und Resharper geht völlig verrückt nach denen. Es hat keine Ahnung, dass die Bedingungen überhaupt existieren, und es können viele Konflikte und Fehler auftreten, wenn beide Dateien dieselben Konstanten und Methoden deklarieren.

<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

Die bedingte Kompilierung wurde zu ReSharper 8 hinzugefügt. Holen Sie sich einfach die letzte Version.