似乎看不出为什么FXCop抱怨我多次丢弃memoryStream对象。据我所知,我只是把它放在最后一块。不要多次处理对象
完整的错误信息是:
CA2202不处置对象多次对象“的MemoryStream”可以设置比在方法“MessageTransform.GetEnvelope(消息)”一次。为了避免产生System.ObjectDisposedException你不应该调用Dispose多个时间上的对象:行:48个阿比MessageTransform.cs 48
var memoryStream = new MemoryStream();
try
{
var messageBuffer = message.CreateBufferedCopy(int.MaxValue);
var xPathNavigator = messageBuffer.CreateNavigator();
var xmlWriter = XmlWriter.Create(memoryStream);
xPathNavigator.WriteSubtree(xmlWriter);
xmlWriter.Flush();
xmlWriter.Close();
memoryStream.Position = 0;
var xdoc = XDocument.Load(XmlReader.Create(memoryStream));
return xdoc;
}
catch (ApplicationException e)
{
Console.WriteLine(e.Message);
return null;
}
finally
{
memoryStream.Dispose();
}
如果我在使用块包装相同的代码我得到相同错误。
using (var memoryStream = new MemoryStream()) { var messageBuffer = message.CreateBufferedCopy(int.MaxValue); var xPathNavigator = messageBuffer.CreateNavigator(); var xmlWriter = XmlWriter.Create(memoryStream); xPathNavigator.WriteSubtree(xmlWriter); xmlWriter.Flush(); xmlWriter.Close(); memoryStream.Position = 0; var xdoc = XDocument.Load(XmlReader.Create(memoryStream)); return xdoc; }
这只是一个过度活跃的FxCop问题或不使用using块或.Dispose()有点不适用于System.IO.MemoryStream?