gpt4 book ai didi

c# - VS2010 中的 FxCop 行为、代码分析和 SuppressMessage

转载 作者:太空狗 更新时间:2023-10-30 01:22:02 28 4
gpt4 key购买 nike

我有这样一个类:

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Io")]
public void ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()
{

}

public void ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()
{

}

我使用自定义规则集文件CustomRules.ruleset

<RuleSet Name="RulesNet" ToolsVersion="10.0">
<RuleHintPaths>
<Path>C:\Fxcop10.0\Rules</Path>
</RuleHintPaths>
<Rules AnalyzerId="Microsoft.Analyzers.ManagedCodeAnalysis" RuleNamespace="Microsoft.Rules.Managed">

<Rule Id="CA1709" Action="Warning" />

</Rules>
</RuleSet>

当我运行内置代码分析工具的 VS2010 时,我收到此警告:

CA1709 : Microsoft.Naming : Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()' by changing it to 'IO'.

现在,我可以在 FxCopCmd.exe 中使用相同的规则集文件 CustomRules.ruleset:

FxCopCmd.exe /gac /d:"C:\CompanyFramework\4.0.0.0" /f:"D:\TFS\Tests\WebApplication1\bin\WebApplication1.dll" /o:"resultsFxCop.xml" /ruleset:"=CustomRules.ruleset" /v

我收到2 个错误(FixCategory Breaking 和 Level Error)

CA1709 - Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()' by changing it to 'IO'.

CA1709 - Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()' by changing it to 'IO'.

  <Message Id="Io" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Status="Active" Created="2013-02-05 10:24:01Z" FixCategory="Breaking">
<Issue Name="Member" Certainty="85" Level="Error" Path="D:\TFS\Tests\WebApplication1" File="Default.aspx.cs" Line="21">Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoUnoIo_ReglaCA1709()' by changing it to 'IO'.</Issue>
</Message>

<Message Id="Io" TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709" Status="Active" Created="2013-02-05 10:24:01Z" FixCategory="Breaking">
<Issue Name="Member" Certainty="85" Level="Error" Path="D:\TFS\Tests\WebApplication1" File="Default.aspx.cs" Line="26">Correct the casing of 'Io' in member name '_Default.ParaQueFalleCalidadCodigoDosIo_ReglaCA1709()' by changing it to 'IO'.</Issue>
</Message>

在 resultsFxcop.xml 中,我看到了 CA1709: IdentifiersShouldBeCasedCorrectly 规则:

 <Rule TypeName="IdentifiersShouldBeCasedCorrectly" Category="Microsoft.Naming" CheckId="CA1709">
<Name>Identifiers should be cased correctly</Name>
<Description>Type, namespace, and... OMITED.</Description>
<Resolution Name="Member">Correct the casing of '{0}' in member name {1} by changing it to '{2}'.</Resolution>
<Owner />
<Url>http://msdn.microsoft.com/library/ms182240(VS.100).aspx</Url>
<Email>[none]</Email>
<MessageLevel Certainty="85">Error</MessageLevel>
<File Name="namingrules.dll" Version="10.0.0.0" />
</Rule>

CA1709 规则的消息级别:

   <MessageLevel Certainty="85">Error</MessageLevel>

两个问题:

  • 我收到错误,但 CA1709 规则操作是警告
  • 使用 FxCopcmd.exe 忽略 SuppressMessage

现在,我修改 CustomRules.ruleset 并再次执行 FxCopcmd.exe

<Rule Id="CA1709" Action="None" />

没有错误

我修改了 CustomRules.ruleset 并再次执行 FxCopcmd.exe

<Rule Id="CA1709" Action="Ignore" />

我得到了同样的 2 个错误

我需要使用 FxCopCmd.exe 和自定义规则集。

  • SuppressMessage 是否适用于 FxCopcmd.exe?
  • 如果使用 Fxcopcmd.exe,如果操作是警告,为什么我会收到错误消息?
  • CA1709 规则的 MessageLevel Error 是什么意思?比规则操作“警告”更优先?

有什么建议吗?

更新

http://social.msdn.microsoft.com/Forums/en/vstscode/thread/3f8931da-9a4d-47a6-b331-8b6b07aea8d6

http://social.msdn.microsoft.com/forums/en-US/vstscode/thread/3cb6c50c-7095-4551-a4e3-a3cbc7cb85be

对于默认的 FxCop 规则,没有简单的方法来修改消息级别,

MessageLevel 是消息的重要性,例如如果您有数千条消息,那么首先开始解决关键(感叹号)错误可能是个好主意。

确定性 是规则编写者分配给每个规则的数字,它是消息导致代码更改的可能性。这个数字是根据领域专家和客户的反馈以及规则中使用的启发式方法避免误报的能力得出的。

修复类别:这表示如果代码之前已发布,则针对违规的修复是否是二进制破坏性更改。例如,您有一个拼写错误的图书馆,您已经将其运送给客户。您现在开始在其上运行 FxCop 并查看拼写错误。 FxCop 会告诉您这是一个重大变化。如果您修复了拼写错误并将新版本的库发送给客户,他们将无法在不更改和重新编译代码的情况下使用该库。因此,您可能希望忽略此 API 上的 FxCop 违规。另一方面,如果您从未发货,则完全可以解决 FxCop 违规问题。

最佳答案

Does SuppressMessage works for FxCopcmd.exe?

是的。您将需要使用定义的 CODE_ANALYSIS 编译符号进行编译,以便您的 SuppressMessage 属性包含在程序集中。一旦它们进入其中,FxCop 引擎就会识别它们,而不管用于运行分析的机制如何。

Why I get errors if Action is Warning, using Fxcopcmd.exe?

写入 FxCop 生成的报告的问题级别始终使用规则作者指定的级别。当您从 Visual Studio 中运行时,Visual Studio 集成插件会使用规则集中指定的级别覆盖此级别。当您运行 fxcopcmd.exe 时,将规则配置为警告与错误之间的唯一区别是检测到错误级别的规则违规将导致 fxcopcmd.exe 返回非零退出代码,从而允许您中断自动构建。

如果您希望 fxcopcmd.exe 在生成其报告时使用您的级别覆盖,您可能需要考虑在 http://visualstudio.uservoice.com/ 提出建议。 .

关于c# - VS2010 中的 FxCop 行为、代码分析和 SuppressMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14703765/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com