У меня есть много кода, как это:C# CA2000: Утилизировать объекты до потери сферы с помощью FileStream/XmlTextReader
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.
Если я следовать предложение и я поставил 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 и Я не могу не думать, что я делаю что-то неправильно, но я этого не вижу. Что я делаю неправильно?
FYI, «новый XmlTextReader» устарел с .NET 2.0. Вместо этого используйте 'XmlReader.Create', как показывает Ганс ниже. –
Jeepers ... Я не знал, что XmlTextReader устарел. Теперь это имеет гораздо больший смысл. Благодаря! –
Причина 'CA2202' в том, что утилизация' Reader' или 'Writer' также избавляет от' FileStream', используемых для его создания; это означает, что вы должны распоряжаться 'fs', если построение' Writer' терпит неудачу, но если это не удастся; что приводит к [ниже] (http://stackoverflow.com/a/3700444/562906) ** testalino **. – PJTraill