我正在广泛使用DataVisualization.Charting.Chart
,并且在大多数情况下它是有效的。然而,我一直在频繁地运行代码分析,并且已经处理了我自己的所有警告。但是,在使用图表的*. designer .cs文件中大约有30个CA2000(对象没有沿着所有异常路径处理)。Designer文件生成了几乎所有的图表代码,并且几乎所有的图表元素都实现了IDisposable
。我在项目首选项中勾选了"抑制生成代码的结果",但它仍然这样做。
有没有办法解决这个问题,而不必手动创建图表对象,并且不禁用该类中其余代码的代码分析?是否有一种方法来禁用它为所有。designer .cs文件?或者,是否有一种解决方案可以通过让设计器代码负责处理来正确地删除这些警告?
相当多的开发人员似乎遇到过这种情况,没有运气,所以+1为一个好问题!
一个可能的解决方案是编写一个方法,该方法覆盖CA2000并在设计器文件中检测到警告时抑制规则,下面是一个好的开始:
在Visual Studio 2010中编写自定义代码分析规则
否则,请参阅本线程末尾的评论,微软工程师提到要记录连接调用:http://blogs.msdn.com/b/codeanalysis/archive/2010/03/22/what-s-new-in-code-analysis-for-visual-studio-2010.aspx
我知道我来晚了,但还是来吧。
我猜这些警告都是为InitializeComponent
方法内的代码发出的?如果是这样,那么您是否考虑修改位于Common7IDEItemTemplates文件夹中的模板文件?您可以在这些方法上添加GeneratedCode
属性。因为这个属性只会在它上面设置,所以同一类中的所有其他代码仍然会被代码分析检查。
下面是Form
设计器文件的示例:
namespace $rootnamespace$
{
partial class $safeitemrootname$
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
[System.CodeDom.Compiler.GeneratedCode("Windows Form Designer generated code", "1.0.0.0"), System.Diagnostics.DebuggerNonUserCode()]
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Text = "$safeitemrootname$";
}
#endregion
}
}
只需在*. designer .cs文件中为Dispose
方法添加一个[SuppressMessage("Microsoft.Usage", "CA2213:DisposableFieldsShouldBeDisposed", MessageId = "..."]
。
我刚刚做了,我发现VS 2012足够聪明,即使在重写文件时,当在设计器中更改了某些内容时,也可以保留它。
您是否尝试在项目的代码分析属性页中将"从生成的代码中抑制结果"属性值切换为true ?这个选项是在生成的代码中忽略问题的标准机制。
也就是说,生成的代码是将要执行的代码,所以忽略它的违反不一定是一个好主意。考虑到CA2000的"噪音",您可能希望考虑禁用该规则。