Overblog
Edit post Folge diesem Blog Administration + Create my blog
Blog von Olaf Helper

Visual Basic.NET und Microsoft FxCop

12. Juni 2009 , Geschrieben von Olaf Helper Veröffentlicht in #.NET

Wenn man im Team arbeitet, sind Coding Conventions Standard, allein schon damit man den Code von einem Kollegen nicht nur lesen, sondern auch verstehen kann. Aber auch wenn man „nur“ so ein wenig zuhause für sich selbst programmiert, sollte man sich an bestimmte Coding Conventions halten. Zum einen gewöhnt man sich schneller daran und man hat es dann bereits „im Blut“, wenn es beruflich gefordert wird. Zum anderen steht man selbst gelegentlich vor eigenem Code, den man zuletzt vor Monaten angefasst hatte und fragt sich dann selbst „was habe ich da nur verzapft und was soll mit die Bezeichnung dieser oder jener Variable sagen?“.

Von Microsoft gibt es das kostenlose Tool „FxCop“, das gewisse Coding Convention und Design Pattern überprüfen kann. Entgegen anderen Visual Studio AddOns ist es ein externes Tool, dass auf das kompilierte Assembly aufsetzt und nicht auf den Source Code. Dafür hat es den Vorteil, das es auch zusammen mit der ebenfalls kostenlosen „Express Edition“ von Visual Studio verwendet werden kann; und genau das mache ich.

Manche der gemeldeten Design-Verstöße sind je nach Kontext nicht sinnig oder wirklich zutreffend, z.B. wenn man eine Klassenbibliothek erstellt und dann diverse Hinweise auf "CA1811:AvoidUncalledPrivateCode" bekommt; die Methoden sollen ja von einem anderen Projekt genutzt werden. Diese Meldungen kann man durch ein „SuppressMessage“ Flag unterdrücken lassen, dazu muss man in FxCop nur mit der Rechte-Maus Taste auf die Meldung klicken => „Copy As“ => „SuppressMessage“ oder „Modul-level SuppressMessage“ und das kopiert man dann entsprechend in sein Projekt.

Nur in Kombination mit Visual Basic.NET gibt es eine kleinen Haken: Die Formatierung ist nach C# und sieht als Beispiel so aus:

 [module: SuppressMessage("Microsoft.Globalization", 
  "CA1305:SpecifyIFormatProvider",  
  Scope="member",  
  Target="NETTest.FormatDate.#Main()",  
  MessageId="System.DateTime.ToString")] 

Das ist aber kein wirkliches Problem, man muss es nur etwas von Hand umformatieren

-          Aus den umschließenden eckigen Klammer [ ] macht man eckige < >

-          Die Zuweisung der Attribute muss über := statt über = erfolgen

Sieht dann so aus:

 <module: SuppressMessage("Microsoft.Globalization", _ 
  "CA1305:SpecifyIFormatProvider", _ 
  Scope:="member", _ 
  Target:="NETTest.FormatDate.#Main()", _ 
  MessageId:="System.DateTime.ToString")> 

 

Siehe auch:

Download: Microsoft FxCop 1.36

Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken

The Visual Studio Code Analysis Team Blog

MSDN: FxCop

Diesen Post teilen
Repost0
Um über die neuesten Artikel informiert zu werden, abonnieren:
Kommentiere diesen Post