FXCop에서 memoryStream 개체를 두 번 이상 삭제한다고 불만스럽게 보일 수 없습니다. 내가 말할 수있는 것만 큼 가까이서, 나는 그것을 마침내 블록에 버린다.개체를 여러 번 처리하지 마십시오
전체 오류 메시지는 다음과 같습니다 폐기하지 마십시오
CA2202 여러 번 한 번 방법 'MessageTransform.GetEnvelope (메시지)'보다 더 배치 될 수있다 'MemoryStream을을'객체 객체. 당신이 라인 : 객체에 한 번 이상을 폐기 호출해서는 안 System.ObjectDisposedException가 발생하지 : 48 API를 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이 단지 문제인가 또는 사용하여 블록 또는 .Dispose()가 어떻게 든 System.IO.MemoryStream 적용되지를 사용합니까?