我有很多这样的代码:
FileStream fs = File.Open(@"C:\Temp\SNB-RSS.xml", FileMode.Open);
using (XmlTextReader reader = new XmlTextReader(fs))
{
/* Some other code */
}
这使我收到了以下代码分析警告:
CA2000 : Microsoft.Reliability : In method 'SF_Tester.Run()', object 'fs' is not disposed along all exception paths. Call System.IDisposable.Dispose on object 'fs' before all references to it are out of scope.
如果我按照建议在using语句中放置File.Open,那么我会得到如下结果:
CA2202 : Microsoft.Usage : Object 'fs' can be disposed more than once in method 'SF_Tester.Run()'. To avoid generating a System.ObjectDisposedException you should not call Dispose more than one time on an object.: Lines: 39
我正在使用VS2010,但我感觉自己做错了什么,却又找不到问题所在。 我到底哪里做错了?
XmlReader.Create
,就像Hans在下面所示的那样。 - John SaundersCA2202
的原因是,释放Reader
或Writer
也会释放用于创建它的FileStream
;这意味着如果Writer
的构造失败,则必须释放fs
,但如果成功则不需要;这导致了testalino在下面的答案中的回答。 - PJTraill