2010-09-14 8 views
2

Je souhaite exclure CA1822: MarkMembersAsStatic de l'assembly CoreTest car les méthodes de test NUnit ne peuvent pas être converties en méthodes statiques car NUnit ne les exécutera pas si je fais. Dans les autres assemblées, je voudrais avoir cette règle comme je l'ai trouvé utile.FxCop, exclure une règle d'un assembly (mais l'utiliser pour les autres assemblys)

Si cela est possible, je n'aime pas ajouter un SuppressMessage à chaque méthode de test, car j'en ai beaucoup et cela encombre le fichier.

Ceci est la règle FxCop fichier XML:

<?xml version="1.0" encoding="utf-8"?> 
<FxCopProject Version="1.35" Name="Foo, Release"> 
<ProjectOptions> 
    <SharedProject>True</SharedProject> 
    <Stylesheet Apply="False">http://www.gotdotnet.com/team/fxcop//xsl/1.35/FxCopReport.xsl</Stylesheet> 
    <SaveMessages> 
    <Project Status="None" NewOnly="False" /> 
    <Report Status="Active" NewOnly="False" /> 
    </SaveMessages> 
    <ProjectFile Compress="True" DefaultTargetCheck="True" DefaultRuleCheck="True" SaveByRuleGroup="" Deterministic="True" /> 
    <EnableMultithreadedLoad>True</EnableMultithreadedLoad> 
    <EnableMultithreadedAnalysis>True</EnableMultithreadedAnalysis> 
    <SourceLookup>True</SourceLookup> 
    <AnalysisExceptionsThreshold>10</AnalysisExceptionsThreshold> 
    <RuleExceptionsThreshold>1</RuleExceptionsThreshold> 
    <Spelling Locale="en-us" /> 
    <VersionAware>False</VersionAware> 
    <OverrideRuleVisibilities>False</OverrideRuleVisibilities> 
    <CustomDictionaries SearchFxCopDir="True" SearchUserProfile="True" SearchProjectDir="True" /> 
    <SearchGlobalAssemblyCache>False</SearchGlobalAssemblyCache> 
    <DeadlockDetectionTimeout>120</DeadlockDetectionTimeout> 
</ProjectOptions> 
<Targets> 
    <AssemblyReferenceDirectories> 
    <Directory>$(ProjectDir)/Library/EPiServer CMS/5.2.375.7/</Directory> 
    <Directory>$(ProjectDir)/Foo.Plugin/bin/Release/</Directory> 
    </AssemblyReferenceDirectories> 
    <Target Name="$(ProjectDir)/Foo.Core/bin/Release/Foo.Core.dll" Analyze="True" AnalyzeAllChildren="True" /> 
    <Target Name="$(ProjectDir)/Foo.CoreTest/bin/Release/Foo.CoreTest.dll" Analyze="True" AnalyzeAllChildren="True" /> 
    <Target Name="$(ProjectDir)/Foo.Example/bin/Foo.Example.dll" Analyze="True" AnalyzeAllChildren="True" /> 
    <Target Name="$(ProjectDir)/Foo.Web.WebForms/bin/Release/Foo.Web.WebForms.dll" Analyze="True" AnalyzeAllChildren="True" /> 
</Targets> 
<Rules> 
    <RuleFiles> 
    <RuleFile Name="$(FxCopDir)\Rules\DesignRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\GlobalizationRules.dll" Enabled="True" AllRulesEnabled="False"> 
    <Rule Name="AvoidDuplicateAccelerators" Enabled="True" /> 
    <Rule Name="DoNotHardcodeLocaleSpecificStrings" Enabled="True" /> 
    <Rule Name="SetLocaleForDataTypes" Enabled="True" /> 
    <Rule Name="SpecifyCultureInfo" Enabled="True" /> 
    <Rule Name="SpecifyIFormatProvider" Enabled="True" /> 
    <Rule Name="SpecifyMessageBoxOptions" Enabled="True" /> 
    </RuleFile> 
    <RuleFile Name="$(FxCopDir)\Rules\InteroperabilityRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\MobilityRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\NamingRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\PerformanceRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\PortabilityRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\SecurityRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    <RuleFile Name="$(FxCopDir)\Rules\UsageRules.dll" Enabled="True" AllRulesEnabled="True" /> 
    </RuleFiles> 
    <Groups /> 
    <Settings /> 
</Rules> 
<FxCopReport Version="1.35" /> 
</FxCopProject> 

Toutes les idées sur la façon dont cela peut se faire de la manière la plus pratique?

Répondre

2

Il n'existe aucun moyen d'utiliser des ensembles de règles distincts dans une seule exécution FxCop. Pour traiter le problème de la méthode de test CA1822, je crée généralement deux projets FxCop distincts: un qui inclut CA1822 pour les assemblages normaux et un qui exclut le CA1822 pour les assemblages de test. Si vous utilisez la fonctionnalité d'analyse de code intégrée à une partie de l'édition d'équipe «développeur» de Visual Studio, vous pouvez appliquer un ensemble de règles différent à chaque assembly. Ceci est pris en charge car l'outil exécute fxcopcmd.exe séparément pour chaque assembly, et non parce qu'il utilise une configuration plus complexe pour prendre en charge plusieurs jeux de règles au cours d'une même exécution.