【问题标题】:Error: Unable to evaluate expression because the code is optimized错误:无法计算表达式,因为代码已优化
【发布时间】:2012-06-14 12:37:28
【问题描述】:

我的 asp.net 应用程序出现错误,显示为

“无法计算表达式,因为代码已优化或本机框架位于调用堆栈顶部。”

protected void btnCustomerProfile_Click(object sender, EventArgs e)
{
    try
    {
        Server.Transfer("CustomerProfile.aspx");
    }
    catch (Exception ex)
    {
        Response.Write(ex.ToString());
    }
    finally
    { }
}

搜索 SO 后,我看到大多数类似的帖子都涉及 response.redirect。我的代码正在使用 server.transfer,我的应用程序也正在使用 Master Pages。

我该如何解决这个问题?

更新:由于某种原因,发生此错误是我也使用了 Response.Redirect。不幸的是,我不能使用 Server.Execute,因为 Server.Execute 会在最后调用调用页面。

【问题讨论】:

  • 能贴出抛出异常的代码吗?
  • uhmm...在我的情况下,问题是由Response.End引起的...但是查看您的代码很难说出这个问题的原因是什么...

标签: c# asp.net master-pages server.transfer


【解决方案1】:

你会得到一个错误,但下面的代码块会捕获它,你可以继续你的生活。

试试这个:

using System.Threading.ThreadAbortException;

catch(ThreadAbortException ex)
{
    throw;
}

【讨论】:

    【解决方案2】:

    您描述的问题似乎是设计使然,如下所示:

    http://support.microsoft.com/kb/312629/EN-US/

    使用Server.Execute应该可以解决问题

    【讨论】:

    • 您的链接上的信息表明 .net 1.0 & 1.1 框架。我正在使用 4.0 框架。我认为这个问题会在 8 年后得到解决。
    • @DotNetRookie 微软没有解决它的问题,只是将它们标记为“已知问题”...... :)
    • server.execute 的问题在于它返回到调用页面。由于我目前有执行 server.transfer 的代码,我想看看我是否可以坚持使用相同的编码策略。 techahead.wordpress.com/2007/10/14/…
    • 异常是否产生了ThreadAbortException?还有一个内部异常消息,可能值得将异常写入日志文件以确保调试器没有格式化消息
    【解决方案3】:

    您是否尝试将server.transfer 替换为response.redirect()

    Server.Transfer VS Response.Redirect

    【讨论】:

    • 应用程序当前有使用server.transfer的代码(代码由不再在这里的开发人员完成),所以我需要与当前架构保持一致。
    【解决方案4】:

    我在使用 MS-Test 测试多线程应用程序的工作时遇到此消息。

    我发现这是因为测试主线程结束并初始化了对象清理,而其他创建的旨在无限运行的线程仍在工作。

    随着奶头清理方法杀死对象,这些线程被中止并显示上述消息。

    【讨论】:

      猜你喜欢
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多