标签: code-analysis

处置或不处理(CA2000)

我正在开启旧项目的代码分析.大多数评论结果我都能理解,但 CA2000:在丢失范围之前处理对象很难做到.

例如,来自ASP.Net页面的此代码:

private void BuildTable()
{
    HtmlTableRow tr = new HtmlTableRow();
    HtmlTableCell td = new HtmlTableCell();

    tr.Cells.Add(td);
    // add some controls to 'td'

    theTable.Rows.Insert(0, tr);
    // 'theTable' is an HtmlTable control on the page
}
Run Code Online (Sandbox Code Playgroud)

提供CA消息:

CA2000:Microsoft.Reliability:在方法'BuildTable()'中,在对所有引用超出范围之前,在对象'tr'上调用System.IDisposable.Dispose.

CA2000:Microsoft.Reliability:在方法'BuildTable()'中,对象'td'未沿所有异常路径放置.在对对象'td'的所有引用都超出范围之前调用System.IDisposable.Dispose.(以及关于添加到'td'的控件的类似消息.)

我可以解决第二个问题:

private void BuildTable()
{
    HtmlTableRow tr = new HtmlTableRow();
    HtmlTableCell td = new HtmlTableCell();

    try
    {
        tr.Cells.Add(td);
        // add some controls to 'td'

        td = null; // this line is only reached when there were no exceptions
    }
    finally …
Run Code Online (Sandbox Code Playgroud)

.net dispose code-analysis

13
推荐指数
1
解决办法
8627
查看次数

我可以告诉IntelliJ(10.5)不要警告没有传递可选的javascript方法参数吗?

function foo(a, opt_b) {
  opt_b = opt_b || 1;
  ...
}

foo(1);  // IntelliJ will yell at me, saying "Invalid number of parameters, expected 2"
Run Code Online (Sandbox Code Playgroud)

有没有办法记录foo()IntelliJ不会对我大喊大叫?

javascript code-analysis intellij-idea

13
推荐指数
2
解决办法
2367
查看次数

如何抑制StyleCop错误SA0102:CSharp.CsParser:使用泛型类型参数属性时在文件中发现语法错误

具有以下带有泛型类型参数属性的C#代码:

[System.AttributeUsage(System.AttributeTargets.GenericParameter)]
public class GenericParameterAttribute : System.Attribute
{
}
public class GenericClass<[GenericParameter] T>
{
}
Run Code Online (Sandbox Code Playgroud)

打开StyleCop集成(在.csproj文件中导入StyleCop.targets)StyleCop返回错误并且编译失败:

错误1 SA0102:CSharp.CsParser:在文件中发现语法错误...

没有在.csproj文件中导入的StyleCop.targets编译好了.

环境

我在StyleCop文档站点http://www.stylecop.com/docs/StyleCop%20Rules.html上找不到代码SA0102 - 似乎SA0102不是StyleCop规则,可能是内部StyleCop错误的代码.

那么问题:如何压制StyleCop错误SA0102?

c# generics code-analysis stylecop

13
推荐指数
2
解决办法
1万
查看次数

什么程序切片工具实际存在?

我刚刚介绍了"程序切片"这个术语.人们想要这样的功能是完全合理的,但是它存在于任何地方吗?

这个词现在已经20岁了,我看到有很多出版物,研究论文等等.但实际的工具在哪里?人们是否真的将这个概念付诸实践,或者只是在学术上研究它?

什么在那里,以及什么语言?

编辑:我想我正在寻找什么,我作为一个接受的答案奖励,是一些出版物/组织/等的参考,特别是面向程序切片和维护工具/技术等的列表.

code-analysis static-analysis dynamic-analysis analysis utility

13
推荐指数
2
解决办法
5065
查看次数

如何强制MSBuild运行代码分析而不重新编译

默认情况下,代码分析仅针对已编译的项目进行.所以当我从命令行运行MSBuild时,它只是第一次运行代码分析.在后续调用中,将跳过代码分析.

背景:我想评估CA规则,并查看启用规则时代码中会有多少警告.为此,我不想重新编译所有内容 - 这需要一些时间 - 但只需重新运行代码分析.你怎么能实现这个目标?

我正在使用Visual Studio 2013和MSBuild 12.0.

即使明确地开启代码分析也无济于事:

msbuild DesktopBuild.proj /p:RunCodeAnalysis=true
Run Code Online (Sandbox Code Playgroud)

c# msbuild code-analysis

13
推荐指数
2
解决办法
1万
查看次数

代码分析/ FxCop CA1726:UsePreferredTerms显示已取消已取消

我在我们拼着性英国LL两个L的编辑.我想使用代码分析规则"CA1726:UsePreferredTerms"但我不希望它将"已取消"标记为违规.

我已经尝试添加<CodeAnalysisCulture>en-GB</CodeAnalysisCulture>到项目文件中以鼓励代码分析使用英语拼写

我已经尝试将<Recognized><Word>Cancelled</Word></Recognized>项目添加到CustomDictionary.xml中

每次使用取消的单词时,我都不热衷于添加抑制.

我想要一个可以检查到源代码控制的解决方案,供其他开发人员使用,所以我不想改变我的本地 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\CustomDictionary.xml

我正在使用Visual Studio 2013.

有没有办法实现这个目标?

culture code-analysis fxcop visual-studio visual-studio-2013

13
推荐指数
1
解决办法
457
查看次数

CA2227的解决方案还是更好的方法?

我只使用代码分析进行清理,组织并确保针对特定警告的所有实例全局执行这些更改.我到了决赛,这是CA2227.

CA2227集合属性应该是只读的通过删除属性setter将''变为只读.

请注意,这是用于EDI文档的映射.这些类代表EDI文档的全部或部分.

public class PO1Loop
{

    public SegmentTypes.PO1LoopSegmentTypes.PO1 PO1 { get; set; }

    public Collection<SegmentTypes.PO1LoopSegmentTypes.PID1> PIDRepeat1 { get; set; }

    public Collection<SegmentTypes.PO1LoopSegmentTypes.PID2> PIDRepeat2 { get; set; }

    public SegmentTypes.PO1LoopSegmentTypes.PO4 PO4 { get; set; }

    /* Max Use: 8 */
    public Collection<SegmentTypes.PO1LoopSegmentTypes.ACK> ACKRepeat { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

您可以看到所有Collection属性都会给我这个警告,并且有数百个.使用上面的类时,我实例化它没有任何数据.然后在外部我添加数据并通过其公共访问器设置每个单独的变量.我没有使用构造函数方法准备和传递所有数据来实例化这个类(IMO的大小可以达到它可以轻易地对眼睛造成严重破坏).完成并分配所有属性后,整个类将用于生成它所代表的文档的那一部分.

我的问题是,对于上面描述的用法,什么是更好的方法来正确设置它?我是否保留公共访问者并完全抑制此警告,或者是否有完全不同的解决方案可行?

c# code-analysis visual-studio

13
推荐指数
2
解决办法
7578
查看次数

列出C/C++函数(Unix中的代码分析)

无论我们是维护不熟悉的代码还是检查Apache模块的实现细节,如果我们能够快速遍历代码并构建我们正在查看的内容的概述,它将会有所帮助.Grep服务于我的大部分日常需求,但有些情况下它不会做.

以下是它可以提供帮助的常见示例.要找到我感兴趣的PHP函数的定义,我可以在命令行输入:

grep -r "function myfunc" .
Run Code Online (Sandbox Code Playgroud)

如果我们知道返回类型,这可以很快适应C或C++,但是如果我要列出我的类提供的每个方法,事情会变得更复杂:

grep "function " ./src/mine.class.php
Run Code Online (Sandbox Code Playgroud)

由于没有单个关键字表示C++中的函数或方法,并且因为它通常是更复杂的语法,我认为我需要某种静态代码分析工具,智能使用C预处理器或盲目信任编码器遵循严格的代码指南(空白的数量,curites的位置等)以获得这些结果.

你会推荐什么?

c c++ grep code-analysis

12
推荐指数
4
解决办法
4984
查看次数

如何在c#项目中找到所有静态变量?

我希望与多个线程并行运行命令行程序的某些部分,我担心可能会有一些静态变量,我必须修复(例如通过制作它[ThreadStatic]).在我的项目中是否有任何工具或简单的方法可以找到这些?

当然,简单地搜索"static"并没有多大帮助:我有很多静态方法可以很好地工作并且可以使用任意数量的线程

c# static code-analysis static-analysis

12
推荐指数
2
解决办法
3778
查看次数

CA2104警告:有没有办法将类标记为"不可变"来抑制它?

请考虑以下代码,这些代码会引发 CA2104: Do not declare read only mutable reference types.

public class Test
{
    // This provokes CA2104: "Do not declare read only mutable reference types".
    protected readonly ImmutableClass ImmutableMember;
}

public class ImmutableClass
{
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道一种方法将一个类标记为不可变的方式会抑制警告CA2104?

我试着装饰MutableClass而[ImmutableObject(true)]没有成功的希望(因为表格编辑器使用的属性非常清楚),而且确实它不起作用.

我假设Code Analysis在确定是否发出CA2104时使用已知的不可变类型列表,因此我们不能使用相同的方法.

我想即使你可以将一个类标记为不可变,编译器也无法实际检查它是否为真,但至少它可能是一个有用的指标.

无论如何,我有什么属性可以忽略吗?如果没有,则必须进行抑制.

目前似乎没有替代方法可以做到这一点.

我找到了一个有趣的博客,来自Joe Duffy("Windows上的并发编程"一书的作者)关于这种事情.

他从"想象我们有一个ImmutableAttribute"开始....... :)

这很有意思 - 他遇到了编写一些新的FxCop规则来分析属于不可变的类型的麻烦.

c# code-analysis immutability

12
推荐指数
1
解决办法
2464
查看次数