根据Visual Studio版本,无法访问抛出的关闭流

时间:2015-01-25 13:54:08

标签: c# asp.net visual-studio-2012 visual-studio-2013 stream

我有一个有趣的场景,即从.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中进行编译时,我确实得到了例外。

如果您已经阅读过这篇文章,那么您可能也想了解我的环境设置。这些是我认为值得你知道的点,以便提供任何指导。

  • 网站项目
  • 在IIS 7.5中本地托管
  • 目标.NET 4.0
  • 使用Any CPU内置调试模式

实际问题: Visual Studio的版本如何影响此行为?

Update1:​​例外情况下的设置 - > Common Language Runtime例外设置为' User-unhandled'对于VS2012 / 13。 '抛出该异常'未经检查。

0 个答案:

没有答案