Utilizzando questi strumenti, anche se può rivelarsi non sempre agevole, sicuramente avremo un codice più pulito, una scrittura standard, codice più ottimizzato ecc.
FxCop include una sua interfaccia, può essere utilizzato da riga di comando o può essere utilizzato come tool esterno in Visual Studio ( http://msdn.microsoft.com/it-it/library/bb429389(en-us,VS.80).aspx ) . Vedi impostazioni in VS 2008 ad esempio:
Le versioni correnti sono
StyleCop 4.3.1.3: http://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis&ReleaseId=1425
FxCop 1.36: http://www.microsoft.com/downloads/details.aspx?FamilyID=9aeaa970-f281-4fb0-aba1-d59d7ed09772&displaylang=en
Se lanciamo FXCop da menu di Visual Studio dopo averlo aggiunto come tool esterno in un progetto con questo semplice codice:
using System;
namespace varie
{
public class Test
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Avremo i seguenti warning:
Questo è il codice dopo aver corretto tutti i warning:
using System;
[assembly: CLSCompliant(true)]
namespace Varie
{
public sealed class Test
{
private Test()
{ }
static void Main()
{
Console.WriteLine("Hello World!");
}
}
}
In questo semplicissimo esempio abbiamo visto come FXCop ci ha segnalato di eliminare il costruttore (ho aggiunto il costruttore privato) questo perchè il costruttore non è necessario perché la chiamata a membri statici non richiede un'istanza del tipo. Poiché il tipo non presenta membri non statici, la creazione di un'istanza non consente di accedere ad alcun membro del tipo.
Altro warning ci segnala di marcare sealed la classe questo perchè la regola presuppone che un tipo che contiene solo membri statici non sia progettato per essere ereditato perché il tipo non fornisce alcuna funzionalità sottoponibile a override in un tipo derivato. Un tipo non adatto a essere ereditato deve essere contrassegnato con il modificatore sealed per impedirne l'utilizzo come tipo di base.
In entrambi i tool è possibile aggiungere nuove regole (rules) personalizzate in modo da espandere le potenzialità di questi due strumenti adattandoli alle nostre esigenze di progetto.
StyleCop oltre ad agire sul codice sorgente è comunque più focalizzato sulla leggibilità e la documentazione del codice.
StyleCop home: http://blogs.msdn.com/sourceanalysis/
Codice corretto con le indicazioni di StyleCop:
//-----------------------------------------------------------------------
// <copyright file="Test.cs" company="Nicogis">
// Copyright (c) Nicogis. All rights reserved.
// </copyright>
// <author>Domenico Ciavarella</author>
//-----------------------------------------------------------------------
namespace Varie
{
using System;
/// <summary>
/// summury class test
/// </summary>
public sealed class Test
{
/// <summary>
/// Prevents a default instance of the Test class from being created
/// </summary>
private Test()
{
}
/// <summary>
/// description main method ...
/// </summary>
private static void Main()
{
Console.WriteLine("Hello World!");
}
}
}