FxCop, исключить правило из сборки (но использовать его для других сборок) - PullRequest
2 голосов
/ 14 сентября 2010

Я хотел бы исключить CA1822: MarkMembersAsStatic из сборки CoreTest, поскольку методы тестирования NUnit не могут быть преобразованы в статические методы, поскольку NUnit не выполнит их, если я это сделаю. В других сборках я хотел бы иметь это правило, так как считаю его ценным.

Если это возможно, мне не нравится добавлять SuppressMessage к каждому методу тестирования, так как у меня их много, и он просто загромождает файл.

Это XML-файл правила FxCop:

<?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>

Есть идеи, как это можно сделать наиболее удобным способом?

1 Ответ

2 голосов
/ 14 сентября 2010

Невозможно использовать отдельные наборы правил в рамках одного прогона FxCop. Для решения проблемы метода тестирования CA1822 я обычно создаю два отдельных проекта FxCop: один, включающий CA1822 для обычных сборок, и другой, исключающий CA1822 для тестовых сборок.

Если вы используете функцию анализа кода, встроенную в некоторые версии Visual Studio для разработчиков, вы можете применить разные наборы правил для каждой сборки. Это поддерживается потому, что в конечном итоге инструмент запускает fxcopcmd.exe отдельно для каждой сборки, а не потому, что он использует более сложную конфигурацию для поддержки нескольких наборов правил в рамках одного запуска.

...