Próbuję przenieść nasze niestandardowe reguły FxCop (= Analiza kodu) z Visual Studio 2010 do Visual Studio 2012.Reguły niestandardowe FxCop nie mają nazwy w VS2012 (ale "oficjalne" reguły mają nazwę)
tej pory działają dobrze z wyjątkiem jednej rzeczy: ich nazwa jest pusty w oknie wyników (View
->Other windows
->Code Analysis
), tylko CheckId
i Resolution
pojawi się, gdy nazwa jest pokazany na zasadach Microsoft:
Co to jest nieznajomy ge, jest to, że nazwa jest widoczne w edytorze zestawu reguł:
Co jest nie tak z moimi zasadami?
Szczegóły
Oto jak obie reguły pojawiają się na wyjściu msbuild za (jest podejrzany coś tam, ale nie rozumiem, dlaczego mam inny komunikat):
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
Oto deklaracja reguły w pliku XML dla mojej reguły:
<?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>
I tutaj jest deklaracja reguły w XML dla reguły Microsoftu.
<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>
W moim przypadku użyłem 'tag RuleHintPaths' katalogu' .ruleset' pliku, aby dać drogę do mojego DLL, ale jak mówisz plugin VS wydaje się je ignorować. Dziękuję za odpowiedź, nawet jeśli nie jest to ta, którą chciałbym zobaczyć :). –
Kopiowanie plików do ' \ Team Tools \ Static Analysis Tools \ FxCop \ Rules' ale jest nieoptymalne, ponieważ często dodajemy lub modyfikujemy reguły. Klucz rejestru był nieobecny w moim systemie, więc próbowałem go utworzyć, ale wydaje się, że nie działa. Mam 64-bitowy system Windows 7, czy klucz mógł zostać umieszczony w innym miejscu? Dzięki! –
Czy ponownie uruchomiłeś program Visual Studio po dodaniu klucza rejestru? Czy próbowałeś dodać wartość FxCopRulePath do istniejącego klucza 'HKEY_CURRENT_USER \ Software \ Microsoft \ VisualStudio \ 11.0 \ CodeAnalysis', czy też utworzyłeś nowy klucz' Code Analysis' zawierający spację między słowami? (To ostatnie jest konieczne.) –