我有一个有趣的场景,即从.NET 4中的流中编写和读取数据。当我从Visual Studio 2012切换到2013时,这种行为首次出现。记住最后一句,因为它'是这个问题的主要原因。感觉VS的版本应该不以任何方式影响此行为,因为我仍在编译相同的框架版本。
我遇到的情况是我正在运行ASP.NET WebForms,我们正在自定义正在呈现的特定ASP.NET控件的输出。 实际上,它是第三方控件,我们与控件的输出定义了继承关系。
以下是发生错误的代码(我稍微修改了源代码,试图更好地向您展示我的观点):
protected override void Render(HtmlTextWriter output)
{
using (var stream = new System.IO.MemoryStream())
{
using (var writer = new System.IO.StreamWriter(stream))
{
var htmlWriter = new HtmlTextWriter(writer);
base.Render(htmlWriter);
htmlWriter.Flush();
stream.Position = 0;
using (var reader = new System.IO.StreamReader(stream))
{
string content = reader.ReadToEnd();
// modify content...
output.Write(content);
reader.Close();
}
} // exception thrown
}
}
这是例外消息:
无法访问已关闭的流。
我做明白异常本身正在抛出,如下所述:MemoryStream - Cannot access a closed Stream.实际上我非常好奇地知道为什么这段代码已被工作了这么长时间。这里有很多不同的答案在stackoverflow上明确指出,这不是处理流的正确方法。 Here's another one
如果我在Visual Studio 2012中编译完全相同的代码,则所有"工作",即我没有得到异常。但是,在VS 2013中进行编译时,我确实得到了例外。
如果您已经阅读过这篇文章,那么您可能也想了解我的环境设置。这些是我认为值得你知道的点,以便提供任何指导。
实际问题: Visual Studio的版本如何影响此行为?
Update1:例外情况下的设置 - > Common Language Runtime例外设置为' User-unhandled'对于VS2012 / 13。 '抛出该异常'未经检查。