Tag: 代码分析

收集属性应该只读 – 漏洞?

在遵守代码分析错误的过程中,我正在更改我的属性以拥有私有的setter。 然后我开始尝试理解为什么多一点。 根据一些研究,MS说: 可写集合属性允许用户使用完全不同的集合替换集合。 答案在这里指出: 在List对象上添加公共setter是危险的。 但它没有列出危险的原因 。 这就是我很好奇的部分。 如果我们有这个集合: public List Foos { get; set; } 为什么要将setter设为私有? 显然我们不希望客户端代码替换集合, 但如果客户端可以删除每个元素,然后添加他们想要的东西,那么重点是什么? 这与完全替换系列不一样吗? 遵循此代码分析规则如何提供价值?

Visual Studio:代码分析器,用于确定方法可以抛出的exception?

Java的一个好处,也是一个诅咒,是你总是知道一个方法可以抛出什么exception。 是否有静态代码分析工具可以确定方法可以抛出的exception? 能够输入///并让xml文档声明部分自动填充块会很棒

使用AdHocWorkspace会导致“不支持语言’C#’。”

使用VS2015中的Microsoft.CodeAnalysis.CSharp.Workspaces的RC2,此代码抛出exception: var tree = CSharpSyntaxTree.ParseText(…); var workspace = new AdhocWorkspace(); var newRoot = Simplifier.Expand(tree.GetRoot(), compilation.GetSemanticModel(tree, false), workspace, n => true, true, CancellationToken.None); exception消息是“不支持语言’C#’。” 我缺少什么让这项工作?

C#CA2104 – 自动代码分析不喜欢静态只读可变类型

我有这样的代码: public abstract class Base { // is going to be used in deriving classes // let’s assume foo is threadsafe protected static readonly Foo StaticFoo = new Foo(); } Visual Studio 2008的代码分析弹出以下消息: CA2104 : Microsoft.Security : Remove the read-only designation from ‘Base.StaticFoo’ or change the field to one that is an immutable reference type. […]

在构造函数中访问已实现的抽象属性会导致CA2214:不要在构造函数中调用可覆盖的方法

public abstract class MyBase { public abstract bool MyProperty { get; protected set; } } public class MyClass : MyBase { public MyClass() { this.MyProperty = true; } public override bool MyProperty { get; protected set; } } 构造函数MyClass()导致CA2214: 不要在构造函数中调用可覆盖的方法。 这通常仅显示是否调用与构造函数在同一类中定义的虚方法。 例如,在MyBase的构造函数中访问MyProperty 。 这里我在派生类的构造函数中调用inheritance的抽象属性的非虚拟重写实现 。

在Roslyn分析器中检查表达式类型的正确方法?

我正在用Roslyn编写代码分析器,我需要检查ExpressionSyntax是否为Task或Task 。 到目前为止我有这个: private static bool IsTask(ExpressionSyntax expression, SyntaxNodeAnalysisContext context) { var type = context.SemanticModel.GetTypeInfo(expression).Type; if (type == null) return false; if (type.Equals(context.SemanticModel.Compilation.GetTypeByMetadataName(“System.Threading.Tasks.Task”))) return true; if (type.Equals(context.SemanticModel.Compilation.GetTypeByMetadataName(“System.Threading.Tasks.Task`1”))) return true; return false; } 它适用于Task ,但不适用于Task或Task …我可以检查名称和命名空间,但这是不切实际的,因为我必须检查命名空间的每个“级别”。 有推荐的方法吗?

清理Crystal Reports ReportDocument对象使用的资源的最佳方法是什么?

我正在开发一个使用Crystal Reports进行报告的应用程序。 它在ReportDocument对象中打开一个给定的报告,完成它需要做的事情然后关闭报告。 using (var report = OpenReport(reportSourceInfo)) { // Do stuff with the report report.Close(); } OpenReport方法对源文件进行一些validation,并返回一个打开的ReportDocument对象。 测试表明,此代码完成了它的意图并且似乎没有任何问题。 我真正建议的问题是当我进行报告项目的代码分析(CA)构建时,我得到以下CA消息: CA2202:Microsoft.Usage:对象’report’可以在方法’CrystalReportingProvider.ReportExecute(ReportSourceInformation)’中多次处理。 为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose。 现在显然我可以改变代码,所以我没有得到这个CA警告,但我的问题是我应该吗? Crystal Reports ReportDocument.Close()方法是否可以正确处理资源清理? 该消息似乎表明Close方法调用Dispose方法,但这似乎不正确。 任何意见,将不胜感激。

代码分析回来时建议不要使用“out”参数

我针对我创建的对象运行了VS 2008代码分析工具,并收到了以下建议…… 警告147 CA1021:Microsoft.Design:考虑一种不要求’returnValue’为out参数的设计。 我发现“out”参数非常有用,并没有意识到它们被认为是一种不受欢迎的设计实践。 我想知道是否有人可以了解我收到此警告的原因? 如果这是不好的做法? 为什么? 什么是好的做法? 我很感激任何建议。

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

默认情况下,代码分析仅针对已编译的项目进行。 因此,当我从命令行运行MSBuild时,它仅首次运行代码分析。 在后续调用中,将跳过代码分析。 背景:我想评估CA规则,并查看启用规则时代码中会有多少警告。 为此,我不想重新编译所有内容 – 这需要一些时间 – 但只需重新运行代码分析。 你怎么能实现这个目标? 我正在使用Visual Studio 2013和MSBuild 12.0。 即使明确地开启代码分析也无济于事: msbuild DesktopBuild.proj /p:RunCodeAnalysis=true

在Visual Studio之外查看代码覆盖率结果

我有一些unit testing,并获得了一些代码覆盖率数据。 现在,我希望能够在Visual Studio之外查看代码覆盖率数据,比如在Web浏览器中。 但是,当我将代码覆盖率导出到xml文件时,我无法对其进行任何操作。 那里有读者吗? 我是否必须编写一个xml解析器,然后按照我想要的方式显示它(看起来像是浪费,因为visual studio已经这样​​做了。)看起来有点傻到必须把我的代码覆盖率结果截图作为我的“报告”建议?