虽然之前已讨论过主题,但建议的解决方案似乎不起作用..
我的表单应用程序中有一个按钮单击回调方法,它显示了一个文件夹选择器对话框:
private void ButtonSelectReporterFolderClick(object sender,EventArgs e) { using (var dialog = new FolderBrowserDialog()) // causes warning { if (dialog.ShowDialog() == DialogResult.OK) { this.BoxReporterFolderPath.Text = dialog.SelectedPath; } } }
这会产生一个警告:
CA2000:Microsoft.Reliability:在方法’MainWindow.ButtonSelectReporterFolderClick(object,EventArgs)’中,对象’<> g__initLocal’未沿所有异常路径放置.在对所有引用超出范围之前,调用System.IDisposable.Dispose对象’<> g__initLocal’.
我也试过使用try-finally块甚至调用dialog.Dispose没有任何块,一切都无济于事 – 警告仍然存在,总是在初始化的行.
解决方法
警告不是因为没有处理FolderBrowserDialog,而是因为它有一些实现IDisposable接口的公共成员而你没有单独处理它们.当然,FolderBrowserDialog对象知道如何处理它的依赖关系,但FxCop无法知道它,因此它会发出警告.只需忽略您案例中的警告即可.