标签: code-analysis

检测C#代码中的递归调用

我想在我的代码中找到所有递归调用.

如果我在Visual Studio中打开文件,我会在编辑器的左侧看到"递归调用"图标. 在此输入图像描述

我想检查这些电话的整个解决方案.

我使用Resharper命令行工具和VS的加载项Resharper - 代码检查没有运气,这个规则不适用于他们的规则集.

有什么办法可以检查整个解决方案 - 我真的不想打开每个文件并检查那个蓝色的"递归调用"图标:)

编辑:我对单级递归很感兴趣

c# resharper recursion code-analysis visual-studio

21
推荐指数
1
解决办法
5901
查看次数

如何在Visual Studio 2017中禁用实时代码分析?

在哪里可以禁用Visual Studio 2017中的实时代码分析?每次我启动解决方案时都会弹出。我不需要这个:

实时代码分析弹出图片

我遵循了Microsoft的支持文档,但是取消选中“启用完整解决方案分析”似乎对实时代码分析没有影响。然后,我找到了Visual Studio 2012的解决方案,但也没有任何运气。

因此,在我看来,实时代码分析是完全不同的事情,无法通过完整的解决方案分析来管理。(重新)启动解决方案后,它立即作为后台进程任务运行。无论如何,我该如何摆脱呢?

code-analysis visual-studio-2017

21
推荐指数
2
解决办法
8474
查看次数

CA1500与SA1309 - 哪一个获胜?

我的前缀是说我理解Code Analysis和StyleCop都是指导原则,很多人选择忽略这些.但话说回来,我想看看这两条规则的普遍共识是什么.

规则CA1500表示不要使参数名称和私有字段名称相同.

另一方面,规则SA1309表示不要为成员添加下划线或"m_"作为前缀.

这使我们几乎没有选择区分私有支持字段与其相应的参数.拿这些例子.

SA1309抱怨:

class SomeClass
{
    int _someField;

    public SomeClass(int someField)
    {
        this._someField = someField;
    }
}
Run Code Online (Sandbox Code Playgroud)

CA1500抱怨:

class SomeClass
{
    int someField;

    public SomeClass(int someField)
    {
        this.someField = someField;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有什么选择?我不想创建私有支持字段PascalCase,因为这是公共字段/属性的(我相信相当普遍的)约定.而且我不想重命名其中一个,只是为了解决歧义.

所以我留下了上面两个中的一个,这将要求我压制其中一个SA/CA规则.

你们通常做什么?更重要的是,这些规则的作者认为你应该做些什么(因为它们都没有在他们的文档中提供替代解决方案)?

c# code-analysis fxcop stylecop naming-conventions

20
推荐指数
1
解决办法
4215
查看次数

替代嵌套类型的Expression <Func <T >>

我有一个调用服务时使用的函数.在调用服务之前,它将创建一个日志条目:

protected TResult CallService<TService, TResult>(TService service,
    Expression<Func<TService, TResult>> functionSelector)
{
    Logger.LogServiceCall(service, functionSelector);
    return functionSelector.Compile()(service);
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio 2010代码分析器通知我不应在以下消息中使用嵌套类型:

CA1006:Microsoft.Design:考虑一种设计,其中'ServiceManager.CallService <TService,Result>(TService,Expression <Func <TService,TResult >>)'不嵌套泛型类型'Expression <Func <TService,TResult >>' .

虽然我可以简单地为此条目创建抑制规则,但是是否存在可以阻止显示此类警告的替代方法?

c# types code-analysis nested

20
推荐指数
2
解决办法
4042
查看次数

识别应用程序中的"敏感"代码

希望提高相当大的Python项目的质量.我对PyLint给我的警告类型感到满意.但是,它们太多而且难以在大型组织中执行.此外,我认为某些代码在下一个bug可能出现的地方比其他代码更具关键性/敏感性.例如,我想花更多的时间验证100个模块使用的库方法,而不是2年前最后一次触及的脚本,可能不会用于生产.了解经常更新的模块也很有趣.

是否有人熟悉Python工具或其他有助于此类分析的工具?

python code-analysis

20
推荐指数
4
解决办法
1015
查看次数

在代码分析中使用Microsoft.Bcl.Async会导致错误

我正在尝试使用Microsoft.Bcl.Async和代码分析,但是当我运行代码分析时,我得到一个或多个错误.

我正在使用Visual Studio 2012和Update 2.

这对我来说很容易重现:

  1. 创建一个新的默认控制台应用程序.Net 4.
  2. 右键单击References然后选择Manage NuGet Packages...
  3. 单击OnlineasyncSearch Online框中键入.
  4. 你应该看到Async for .Net Framework 4 ....点击Install并接受所有问题.
  5. 添加到Main()一行说:TaskEx.Delay(1000);和ausing System.Threading.Tasks;
  6. 转到项目属性,代码分析部分并勾选Enable Code Analysis on Build.
  7. 编译程序.

我收到两个代码分析错误:

CA0052运行代码分析时出错CA0052:未选择任何目标.[错误和警告](全球)

CA0055运行代码分析CA0055时出错:无法加载ConsoleApplication2.exe.读取模块"ConsoleApplication2"时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks,Version = 1.0.12.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a] System.Threading.Tasks.TaskEx :: Delay.[错误和警告](全球)

我为其他测试程序得到了不同的代码分析错误.我试过的基本Windows窗体应用程序给了我:

CA0001错误运行代码分析CA0001:读取模块"AsyncForNet4"时遇到以下错误:无法解析成员引用:[Microsoft.Threading.Tasks,Version = 1.0.12.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a] System.Threading. Tasks.TaskEx ::延迟.[错误和警告](全球)

两个问题:

  1. 其他人可以重现这个问题吗?
  2. 有人有解决方案吗?

c# code-analysis fxcop base-class-library

20
推荐指数
1
解决办法
5477
查看次数

在源代码中排除代码分析规则

在我正在研究FxCop的项目中,我向Windows窗体设计器生成的InitializeComponent()方法显示了很多(我的意思是400多个)错误.大多数错误只是标签的Text属性的赋值.

我想在源代码中禁止这些方法,因此我将FxCop生成的抑制代码复制到AssemblyInfo.cs中,但它不起作用.

这是FxCop复制到剪贴板的属性.

[module: SuppressMessage("Microsoft.Globalization",
    "CA1303:DoNotPassLiteralsAsLocalizedParameters",
    Scope = "member",
    Target = "WindowsClient.MainForm.InitializeComponent():System.Void",
    MessageId = "System.Windows.Forms.Control.set_Text(System.String)")]
Run Code Online (Sandbox Code Playgroud)

任何人都知道正确的属性来压制这些消息?

PS:我使用的是Visual Studio 2005,C#,FxCop 1.36 beta.

code-analysis fxcop initializecomponent suppression visual-studio

19
推荐指数
1
解决办法
6547
查看次数

CA1026(所有参数应具有默认值)和扩展方法

前提

使用带有C#可选参数的代码分析(或fxCop)时,您可以收到CA1026的警告.对此的简短原因1不是使用默认值来提供所有参数.

下面的声明正确地生成了此警告

public Color GetColor(bool red, bool blue = true, bool green = true)
Run Code Online (Sandbox Code Playgroud)

但是,有一种情况是您无法使用默认值提供所有参数,这就是扩展方法.因此,下面的声明会因为第一个参数而生成警告:

public static bool ValidateRules(this string s, Rules rules = Rules.Default)
Run Code Online (Sandbox Code Playgroud)

编译器不允许您在this参数上指定默认值,因此只有两个解决方案是:

  1. 忽略警告,我不喜欢这样做,因为它会导致不良做法.
  2. 不使用扩展方法,我不喜欢这样做,因为我发现扩展方法使代码更易读.

问题

  • 以上两个选项是解决这个问题的唯一方法吗?
  • fxCop/Code Analysis在检查中是否不正确?

  1. 长期的原因

c# extension-methods code-analysis fxcop

19
推荐指数
1
解决办法
6376
查看次数

PMD将每个循环的Java标记为UR异常

我想确认这是否是PMD的错误?如果是,我如何提交票证.

    public static void main(final String[] args) {
        for (final String string : args) {
            string.getBytes(); //UR Anomaly
        }
        for (int i = 0; i < args.length; i++) {
            args[i].getBytes();
        }
    }
Run Code Online (Sandbox Code Playgroud)

第1-3行被标记为UR异常,而重写它以使用局部变量进行迭代很好.

想要消除尽可能多的PMD违规,但不得不求助于旧的循环结构作为一种解决方法.

虽然有争议,但我不希望禁用此规则,因为我发现DD,并且DU异常标记为有用.

java code-analysis for-loop static-analysis pmd

19
推荐指数
1
解决办法
8131
查看次数

使用Roslyn查找对方法的所有引用

我正在寻找一组.cs文件来查看哪些调用a的Value属性Nullable<T>(查找所有引用).例如,这将匹配:

class Program
{
    static void Main()
    {
        int? nullable = 123;
        int value = nullable.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现了Roslyn并查看了一些样本,但其中许多已经过时且API非常庞大.我该怎么做呢?

解析语法树后我陷入困境.这是我到目前为止:

public static void Analyze(string sourceCode)
{
    var tree = CSharpSyntaxTree.ParseText(sourceCode);

    tree./* ??? What goes here? */
}
Run Code Online (Sandbox Code Playgroud)

c# code-analysis findall roslyn

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