Sto provando a migrare le nostre regole personalizzate FxCop (= Analisi del codice) da Visual Studio 2010 a Visual Studio 2012.Le regole personalizzate FxCop non hanno un nome in VS2012 (ma le regole "ufficiali" hanno un nome)
Finora, funzionano bene, tranne che per una cosa: il loro nome è vuoto nella finestra dei risultati (View
->Other windows
->Code Analysis
), solo il CheckId
e la Resolution
presentarsi, mentre il nome viene mostrato per le regole di Microsoft:
Che cosa è strano ge, è che il nome è visibile nell'editor set di regole:
Cosa c'è di sbagliato con le mie regole?
dettagli
Ecco come entrambe le regole appaiono in uscita di MSBuild (c'è qualcosa di sospetto c'è, ma non capisco il motivo per cui ho un messaggio diverso):
6>c:\Users\Me\MySolution\MyProject\Program.cs(15): warning : CA1804 : Microsoft.Performance : 'Foo<T>.SomeMethod()' declares a variable, 'z', of type 'int', which is never used or is only assigned to. Use this variable or remove it.
6>MSBUILD : warning : CF1001 : CustomRules.ThreadSafety : The public Public Field "Tests.Program.Foo" must be preceded of readonly
Ecco il governare dichiarazione nel file XML per la mia regola:
<?xml version="1.0" encoding="utf-8" ?>
<Rules FriendlyName="CustomRules">
<Rule TypeName="PublicFieldsMustBeReadonly" Category="CustomRules.ThreadSafety" CheckId="CF1001">
<Name>Public Fields must be readonly or must be replaced with a Getter/Setter Method.</Name>
<Description>Public Fields must be readonly or must be replaced with a Getter/Setter Method.</Description>
<GroupOwner>MyCompany</GroupOwner>
<DevOwner>Me</DevOwner>
<Owner>Me</Owner>
<Url>http://example.com</Url>
<Resolution>The public Public Field "{0}" must be preceded of readonly</Resolution>
<Email>[email protected]</Email>
<MessageLevel Certainty="100">Warning</MessageLevel>
<FixCategories>Breaking</FixCategories>
</Rule>
</Rules>
Ed ecco la dichiarazione di regola nel XML per il dominio di Microsoft.
<Rules FriendlyName="Performance Rules">
<Rule TypeName="RemoveUnusedLocals" Category="Microsoft.Performance" CheckId="CA1804">
<Name>
Remove unused locals
</Name>
<Description>
Remove locals that are not used or are only assigned to in method implementations.
</Description>
<Url>
@ms182278(VS.100).aspx
</Url>
<Resolution>
{0} declares a variable, {1}, of type {2}, which is never used or is only assigned to. Use this variable or remove it.
</Resolution>
<Email />
<MessageLevel Certainty="95">
Warning
</MessageLevel>
<FixCategories>
NonBreaking
</FixCategories>
<Owner />
</Rule>
</Rules>
Nel mio caso, ho usato 'tag RuleHintPaths' del file' .ruleset' per dare il percorso al mio DLL, ma come dici tu plug-in di VS sembra ignorarlo. Grazie per la risposta, anche se non è quella che mi piacerebbe vedere :). –
Copia i file in ' \ Strumenti del team \ Strumenti di analisi statica \ FxCop \ Rules', ma non è ottimale poiché spesso aggiungiamo o modifichiamo le regole. La chiave di registro era assente sul mio sistema, quindi ho provato a crearla, ma non sembra funzionare. Ho un sistema Windows 7 a 64 bit, la chiave potrebbe essere posizionata da qualche altra parte? Grazie! –
Hai riavviato Visual Studio dopo aver aggiunto la chiave di registro? Inoltre, hai provato ad aggiungere il valore FxCopRulePath sotto la chiave preesistente 'HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 11.0 \ CodeAnalysis', o hai creato una nuova chiave' Code Analysis' con uno spazio tra le parole? (Quest'ultimo è necessario). –