Tengo un montón de código como este:C# CA2000: Eliminar objetos antes de perder el alcance usando FileStream/XMLTextReader
FileStream fs = File.Open(@"C:\Temp\SNB-RSS.xml", FileMode.Open);
using (XmlTextReader reader = new XmlTextReader(fs))
{
/* Some other code */
}
Esto me da la siguiente advertencia de análisis de código:
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.
Si sigo el sugerencia y pongo el File.Open en una instrucción using, me sale esto:
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
estoy usando VS2010 y No puedo evitar pensar que estoy haciendo algo mal, pero no lo veo. ¿Qué estoy haciendo mal?
FYI, "new XmlTextReader" ha quedado en desuso desde .NET 2.0. Use 'XmlReader.Create' en su lugar, como Hans le muestra a continuación. –
Jeepers ... No sabía que XmlTextReader había quedado en desuso. Esto tiene mucho más sentido ahora. ¡Gracias! –
El motivo de 'CA2202' es que la eliminación de un' Reader' o 'Writer' también elimina el' FileStream' utilizado para crearlo; esto significa que tiene que deshacerse de 'fs' si la construcción del' Writer' falla, pero no si tiene éxito; eso lleva a [la respuesta a continuación] (http://stackoverflow.com/a/3700444/562906) por ** testalino **. – PJTraill