Ich versuche, unsere benutzerdefinierten FxCop (= Code Analysis) -Regeln von Visual Studio 2010 zu Visual Studio 2012 zu migrieren.FxCop-benutzerdefinierte Regeln haben keinen Namen in VS2012 (aber "offizielle" Regeln haben einen Namen)
Bisher sie außer eine Sache gut funktionieren: ihr Name ist leer, im Ergebnisfenster (View
->Other windows
->Code Analysis
) nur die CheckId
und die Resolution
zeigen, während der Name für Microsofts Regeln angezeigt:
Was ist stran ge ist, dass der Name ist sichtbar im ruleset Editor:
Was mit meinen Regeln falsch?
Einzelheiten
Hier ist, wie beide Regeln in MSBuild die Ausgabe zeigen (es ist etwas faul da, aber ich verstehe nicht, warum ich eine andere Botschaft haben):
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
Hier ist die Regeldeklaration in der XML-Datei für meine Regel:
<?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>
Und hier ist die Regel Deklaration in der XML für Microsoft-Regel.
<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>
In meinem Fall habe ich die '' .ruleset' RuleHintPaths' Tag-Datei, um den Pfad zu meiner DLL zu geben, aber wie Sie VS Plugin sagen, scheint es zu ignorieren. Danke für die Antwort, auch wenn es nicht die ist, die ich gerne sehen würde :). –
Kopieren Sie die Dateien in ' \ Team Tools \ Statische Analysetools \ FxCop \ Rules', aber es ist suboptimal, da wir oft Regeln hinzufügen oder optimieren. Der Registrierungsschlüssel war auf meinem System nicht vorhanden, also habe ich versucht, es zu erstellen, aber es scheint nicht zu funktionieren. Ich habe ein Windows 7 64-Bit-System, könnte der Schlüssel woanders liegen? Vielen Dank! –
Haben Sie Visual Studio nach dem Hinzufügen des Registrierungsschlüssels neu gestartet? Haben Sie außerdem versucht, den FxCopRulePath-Wert unter dem bereits vorhandenen Schlüssel "HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 11.0 \ CodeAnalysis" hinzuzufügen, oder haben Sie einen neuen Schlüssel "Code Analysis" mit einem Leerzeichen zwischen den Wörtern erstellt? (Letzteres ist notwendig.) –