System.InvalidOperationException:堆栈为空

时间:2013-12-05 17:20:08

标签: asp.net asp.net-4.0 visual-studio-2013

运行Visual Studio 2013中构建的ASP.NET 4.x应用程序后,我得到以下异常。

我尝试通过删除页面检查器程序集

来禁用PageInspector
<assemblies>
    <remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>

并将此配置添加到应用设置

<appSettings>
    <add key="PageInspector:ServerCodeMappingSupport" value="Disabled"/>
</appSettings>

没有任何帮助。

[/Pages/TargetPage.aspx] System.Web.HttpException (0x80004005): Exception of type 'System.Web.HttpException' was thrown. ---> System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.InvalidOperationException: Stack empty.
   at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
   at System.Collections.Generic.Stack`1.Pop()
   at Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingRenderTraceListener.EndRendering(TextWriter writer, Object renderedObject)
   at System.Web.UI.RenderTraceListener.RenderTraceListenerList.EndRendering(TextWriter writer, Object renderedObject)
   at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
   at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.LegacyPageAsyncInfo.<CallHandlersPossiblyUnderLock>b__32(Object o)
   at System.Web.HttpContext.InvokeCancellableCallback(WaitCallback callback, Object state)
   at System.Web.UI.Page.LegacyPageAsyncInfo.CallHandlersPossiblyUnderLock(Boolean onPageThread)
   at System.Web.UI.Page.LegacyPageAsyncInfo.CallHandlers(Boolean onPageThread)
   at System.Web.HttpAsyncResult.End()
   at System.Web.UI.Page.LegacyAsyncPageEndProcessRequest(IAsyncResult result)
   at System.Web.UI.Page.AsyncPageEndProcessRequest(IAsyncResult result)

有什么方法可以避免异常吗? 非常感谢任何建议

12 个答案:

答案 0 :(得分:24)

我在VS 2013中禁用了浏览器链接,并且能够看到错误的实际原因。它通常是设置浏览器链接时的基础。您可以在此处查看如何禁用它:http://www.poconosystems.com/software-development/how-to-disable-browser-link-in-visual-studio-2013/

答案 1 :(得分:22)

如果标签上的AssociatedControlID与无法找到的控件相关联,就会发生这种情况。

答案 2 :(得分:8)

有多种原因
System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. -
System.InvalidOperationException: Stack empty.
Microsoft.VisualStudio.Web.PageInspector.Runtime.WebForms.SelectionMappingRenderTraceListener.EndRendering(TextWriter writer, Object renderedObject)
...

按建议添加后:

 <appSettings>
   <add key="PageInspector:ServerCodeMappingSupport" value="Disabled"/>
   ...
 </appSettings>

我注意到我在下拉列表中重复了所选项目,从而产生了问题。

答案 3 :(得分:6)

希望这有助于某人。

asp:panel有一个默认按钮说 XYZ 并修改名称 XYZ 并忘记更改面板中的默认按钮名称时,我收到此错误

答案 4 :(得分:4)

我发现了这个问题。改变了如何在GridView中生成控件ID的方法,默认为

ClientIDMode="Predictable" ClientIDRowSuffix="ID"

导致例外。不确定为什么PageInspector堆栈为空隐藏了真正的异常。只需将更改恢复为原始版即可解决问题。

现在异常是不同的(但是一旦GridView设置恢复原状,这个消失器也是如此)

System.ArgumentException: An entry with the same key already exists.

答案 5 :(得分:3)

我在使用Visual Studio 2013和#34;浏览器链接&#34;在开发机器上运行的一些网络应用程序中也看到了这个问题。启用。

在我见过的多种情况下,启用浏览器链接会导致各种问题,包括客户端脚本和安全警告,以及像这样的服务器异常(令人讨厌的是它似乎默认启用,感谢Msft! )

答案 6 :(得分:2)

我有同样的例外,但在我的情况下,问题是缺少以下内容:

<form runat="server">
</form>

答案 7 :(得分:2)

在我的情况下(ASP.NET 4.6,Visual Studio 2015) 我评论了一个asp文本控件,并添加了一个新的asp下拉列表,但没有更新相关标签的AssociatedControlID。

将AssociatedControlID更改为新添加的asp下拉列表ID我的问题已修复。

答案 8 :(得分:0)

我们从VisualStudio 2012解决方案文件启动VisualStudio 2015(vs2015),同时构建所有项目都没有构建。这是由于默认情况下启用了“启用浏览器链接”选项。我禁用了“启用浏览器链接”选项并重新构建了成功构建所有项目的解决方案。在此之后,我在浏览器中启动了网址,Boom工作正常!对于那些像我一样有类似情景的人。给它一个旋转!

答案 9 :(得分:0)

当我向我的页面添加新的<asp:Panel>并将DefaultButton设置为面板外的按钮时(错误地),这对我很有帮助。 当我将DefaultButton更改为面板内的另一个时,错误已得到修复。

答案 10 :(得分:0)

就我而言,因为我在将网站从VS2002迁移到VS2015时遇到了很多问题,所以我决定在VS2015上创建一个新项目,并将旧项目(VS2002)中的所有webforms转移到新项目(VS2015)。 / p>

新项目有一个Site.Master页面,该页面已有标签。因为我在没有修改的情况下传输旧的webforms,所以他们也有一个标签,所以每个试图加载的页面里面都有两个标签。

当我删除每个页面上的标记,只留下Site.Master页面上的标记时,问题就解决了。

我希望这会有所帮助。

答案 11 :(得分:0)

我在选择不同的下拉值时遇到了这个问题,下面是问题的解决方案

首先清除下拉选择的值,然后启用其他下拉值选择

dropdown.ClearSelection();
dropdown.Items.FindByValue(result.Birthday.Value.Year.ToString()).).Selected = true;