{"id":493,"date":"2008-07-08T20:14:03","date_gmt":"2008-07-08T18:14:03","guid":{"rendered":"http:\/\/www.tupperclub.de\/blog\/?p=493"},"modified":"2008-07-08T20:14:03","modified_gmt":"2008-07-08T18:14:03","slug":"external-annotations-mit-resharper-4","status":"publish","type":"post","link":"https:\/\/www.tupperclub.de\/blog\/?p=493","title":{"rendered":"External Annotations mit Resharper 4"},"content":{"rendered":"<p>Refactoring ist in Entwicklungsumgebungen im Java Bereich seit vielen Jahren Standard. Mit kleinen Schritten n\u00e4hert sich nun auch die .NET Welt langsam an das dort M\u00f6gliche an. Nachdem ich schon seit vielen Jahren <a href=\"http:\/\/www.jetbrains.com\/idea\/index.html\">IntelliJ IDEA<\/a> verwende (seit Version 2.6 \u00fcbrigens), freue ich mich nat\u00fcrlich, da\u00df viele der Funktionen nun durch <a href=\"http:\/\/www.jetbrains.com\/resharper\/index.html\">Resharper 4<\/a> auch f\u00fcr Visual Studio 2008 zur Verf\u00fcgung stehen.<\/p>\n<p>In der aktuellen Versionen haben nun auch die bereits aus Java bekannten Annotationen endlich Einzug gehalten. H\u00e4ufig hat man jedoch das Problem, da\u00df externe Bibliotheken nicht mit den entsprechenden Attributen entwickelt wurden. Dies trifft nat\u00fcrlich auch f\u00fcr das komplette .NET Framework zu. <!--more-->Dies wiegt aber nicht so schwer, da Jetbrains <a href=\"http:\/\/www.jetbrains.com\/resharper\/features\/code_analysis.html#Annotated_Framework\">dies f\u00fcr Microsoft nachgeholt hat<\/a>. <\/p>\n<p>Genau diesen Mechanismus kann man sich nun zu Nutze machen, wenn man selbst die Code Analyse f\u00fcr Funktionen aus einer Bibliothek verwenden m\u00f6chte, deren Code man nicht \u00e4ndern kann. Im Verzeichnis <code>c:\\Program Files\\JetBrains\\ReSharper\\v4.0\\Bin\\ExternalAnnotations\\<\/code>&#8220; legt man einfach Datei f\u00fcr die entsprechende DLL an. Der Name ist dabei nicht wichtig, so lange die Endung <code>.xml<\/code> ist.<\/p>\n<p>F\u00fcr die DLL &#8222;ulitmate.framework.dll&#8220;, die eine Methode bereitstellt, um Zusicherungen zu \u00fcberpr\u00fcfen, sieht der Eintrag zum Beispiel so aus:<\/p>\n<blockquote><p>\n&lt;assembly name=&quot;ultimate.framework&quot;&gt;<br \/>\n&nbsp;&nbsp;&lt;!&#8211; public static void Assert(bool condition) &#8211;&gt;<br \/>\n&nbsp;&nbsp;&lt;member<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;name=&quot;M:ultimate.framework.Diagnostics.Assert(System.Boolean)&quot;&gt;<br \/>\n&nbsp;&nbsp;&lt;attribute<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;ctor=&quot;M:JetBrains.Annotations.AssertionMethodAttribute.#ctor&quot;\/&gt;<br \/>\n&nbsp;&nbsp;&lt;parameter name=&quot;condition&quot;&gt;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;attribute<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctor=&quot;M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JetBrains.Annotations.AssertionConditionType)&quot;&gt;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;argument&gt;0&lt;\/argument&gt;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/attribute&gt;<br \/>\n&nbsp;&nbsp;&lt;\/parameter&gt;<br \/>\n&nbsp;&nbsp;&lt;\/member&gt;<br \/>\n&lt;\/assembly&gt;<\/p><\/blockquote>\n<p>Analog funktioniert das f\u00fcr die anderen Attribute, die von Jetbrains bereitgestellt werden. Infos \u00fcber die verf\u00fcgbaren Attribute findet man in der <a href=\"http:\/\/www.jetbrains.com\/resharper\/docs\/resharper-help.zip\">Onlinehilfe<\/a>. Au\u00dferdem kann man sich natprlich auch ganz gut an den XML Dateien f\u00fcr die anderen Bibliotheken orientieren.<\/p>\n<p>Ach ja: Man sollte auf die genaue Signatur achten, da Fehler kommentarlos ignoriert werden. Mehrere Parameter einer Methode werden mit Komma, aber ohne Leerzeichen getrennt. Ich hoffe, ich erleichtere allen, die das nicht beachtet haben, die Suche nach dem Fehler ein wenig mit dieser Info\u2026<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Refactoring ist in Entwicklungsumgebungen im Java Bereich seit vielen Jahren Standard. Mit kleinen Schritten n\u00e4hert sich nun auch die .NET Welt langsam an das dort M\u00f6gliche an. Nachdem ich schon seit vielen Jahren IntelliJ IDEA verwende (seit Version 2.6 \u00fcbrigens), freue ich mich nat\u00fcrlich, da\u00df viele der Funktionen nun durch Resharper 4 auch f\u00fcr Visual [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-493","post","type-post","status-publish","format-standard","hentry","category-allgemeines"],"_links":{"self":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/493","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=493"}],"version-history":[{"count":0,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=\/wp\/v2\/posts\/493\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tupperclub.de\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}