R# eist eine Erweiterung für Microsofts Entwicklungsumgebung Visual Studio.
R# wertet die Visual-Studio-Entwicklungsumgebung um diverse Funktionen auf, die vor allem beim Entwickeln hilfreich sind und unterstützt unter anderem die Sprachen C#, Visual Basic.NET, XAML, JavaScript, CSS und XML sowie die Technologien ASP.NET und ASP.NET MVC.
Viele Funktionen sind kontextabhängig und richten sich nach der Position des Cursors im Code.

Standardmäßig will R# (im Gegensatz zu den .NET Framework Richtlinien) Underscores vor Felder haben. Dieses Verhalten kann man unter ReSharper => Options => Code Editing => C# Naming Style abstellen. Das geht indem man den Unterstrich(**_**) bei „Name“ als Präfix entfernt.
R# hat eigene Extensions, die unter ReSharper => Extension Manager verwaltet werden können. Empfehlenswert ist dabei insbesondere Enhanced Tooltip.

Es kann vorkommen das R# anfangs sehr viele Sachen unterstreicht und anzumerken hat (Inspections). Will man eine bestimmte Anmerkung deaktivieren (oder die Warnstufe ändern), kann man das über eine Quick-Action ([Alt]+[Enter], siehe auch unten) ändern (Inspection xyz => Configure Inspection Severity). Ansonsten kann man in den R# – Optionen die Stufen (auch für unterschiedliche Programmiersprachen) detailliert einstellen.

Sonstiges

Solution-wide Inspection

Lässt sich ganz unten rechts im Fenster von Virtual Studio aktivieren (graue Kreis in der Statusleiste). R# analysiert daraufhin laufend die komplette Solution und bietet zusätzliche Analysen an. So werden z.B. Fehler nicht erst beim Builden erkannt, sondern zur Entwicklungszeit. Oder es werden Methoden, Eigenschaften und Klassen markiert, die nirgends explizit benutzt werden (Achtung: Zugriff über Reflection kann nicht erkannt werden).

Kann je Größe der Anwendung,recht viele Ressourcen in Anspruch nehmen, wenn VS zu langsam wird kann man es einfach wieder abstellen.

Annotationen

R# bringt einige zusätzliche Attribute mit, mit denen man einerseits den ReSharper selbst steuern kann, andererseits auch die Verständlichkeit im Code erhöhen kann. Die benötigte Datei dazu kann entweder als Paket referenziert werden, oder als Klasse direkt in einem Projekt (z.B. einem *.Common-Projekt).

Am interessantesten sind dabei:

  • [UsedImplicitly]: Markiert ein Element als implizit benutzt, die anders nicht erfasst werden können z.B. über Reflections oder Verwendung in Config-Dateien. R# wird dann z.B. nicht mehr anmerken, dass das Objekt nicht benutzt wird.
  • [CanBeNull]: Kennzeichnet eine Methode oder Methoden-Parameter, dass null sein kann oder zurückgibt.
  • [NotNull]: Kennzeichnet eine Methode oder Methoden-Parameter, welcher nicht null sein darf (weil sonst z.B. eine Exception geworfen wird). R# warnt dann z.B. wenn man so einem Element null zu übergeben versucht.

Externer Code

R# kann automatisch externen Quellcode decompilieren, bzw. (beim .NET Frameworkklassen) die passenden PDB-Dateien herunterladen. Dazu ist nur eine Einstellung nötig: ReSharper => Options => External Sources => Navigation to Sources. Wenn man jetzt z.B. mit [F12] (s.o.) in eine externe Klasse oder Methode schauen will, besorgt R# automatisch die passenden Sourcen dazu. Das sollte auch beim Debugging funktionieren, wenn man in externe Sourcen reinsteppen möchte.