Système.InvalidOperationException: Pile vide
une fois en cours D'exécution ASP.NET 4.X application construite dans Visual Studio 2013 je reçois l'exception ci-dessous.
j'ai essayé de désactiver le PageInspector en retirant l'ensemble de Page inspector
<assemblies>
<remove assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</assemblies>
et ajouter cette configuration aux paramètres de l'application
<appSettings>
<add key="PageInspector:ServerCodeMappingSupport" value="Disabled"/>
</appSettings>
Rien n'a aidé.
[/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)
y a-t-il un moyen d'éviter l'exception? Merci beaucoup pour toutes suggestions
11 réponses
il y a plusieurs raisons pour lesquelles le
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)
...
après ajout proposé:
<appSettings>
<add key="PageInspector:ServerCodeMappingSupport" value="Disabled"/>
...
</appSettings>
j'ai remarqué que j'avais dupliqué un élément sélectionné sur une liste déroulante créant le problème.
j'ai désactivé le lien du navigateur dans VS 2013 et j'ai pu voir la cause réelle de l'erreur. Il s'agit généralement de quelque chose sous-jacent lorsque le lien du navigateur est défini. Vous pouvez voir comment le désactiver ici: http://www.poconosystems.com/software-development/how-to-disable-browser-link-in-visual-studio-2013/
cela peut arriver si le AssociatedControlID
sur une étiquette est associé à un contrôle introuvable.
Espérons que cela aide quelqu'un.
j'ai eu cette erreur quand mon asp:panel
a un bouton par défaut dire XYZ et j'ai modifié le nom XYZ et a oublié de changer le nom du bouton par défaut dans le panneau.
j'ai trouvé le problème. Il y a eu un changement dans la façon de générer les IDs des contrôles dans GridView de par défaut à
ClientIDMode="Predictable" ClientIDRowSuffix="ID"
ce qui a donné lieu à l'exception. Je ne sais pas pourquoi la vraie exception a été cachée par la pile PageInspector vide. Juste revenir le changement d'origine résolu le problème.
maintenant l'exception est différente (mais une fois que les paramètres de GridView sont de retour à l'original cette désapprobation aussi)
System.ArgumentException: An entry with the same key already exists.
j'ai également vu ce problème dans certaines applications web tournant sur des machines dev en utilisant Visual Studio 2013 avec "Browser Link" activé.
dans de nombreux cas que j'ai vu, laisser le lien du navigateur activé provoque toutes sortes de problèmes, à la fois le script client et les avertissements de sécurité, et les exceptions du serveur comme celui-ci (chose ennuyeuse est qu'il semble être activé par défaut, merci Msft!)
j'ai eu la même exception, mais dans mon cas, le problème était le suivant est manquant:
<form runat="server">
</form>
dans mon cas (ASP.NET 4.6, Visual Studio 2015) J'ai commenté un contrôle de texte asp et ajouté une nouvelle liste déroulante asp mais je n'ai pas mis à jour le code AssociatedControlID de l'étiquette associée.
lors de la modification de la directive AssociatedControlID à la liste déroulante asp nouvellement ajoutée, mon problème a été corrigé.
nous avons commencé VisualStudio 2015 (vs2015) à partir de VisualStudio 2012 solution file et tout en construisant tous les projets n'ont pas construit. Cela était dû à L'option Activer le lien du navigateur activée par défaut. J'ai désactivé L'option Activer le lien du navigateur et j'ai reconstruit la solution qui a permis de construire tous les projets avec succès. Après cela j'ai allumé l'url dans un navigateur et Boom il a fonctionné! Pour ceux qui ont un scénario similaire au mien. donnez-lui un tourbillon !
Qui s'est vraiment passé pour moi quand j'ai ajouté un nouveau <asp:Panel>
pour ma page et définissez DefaultButton
pour un bouton à l'extérieur du panneau (Par erreur).
Erreur corrigée quand j'ai changé le DefaultButton
à un autre à l'intérieur du panneau.
dans mon cas, comme j'avais tellement de problèmes lors de la migration d'un site Web de VS2002 à VS2015, j'ai décidé de créer un nouveau projet sur VS2015 et de transférer tous les formulaires Web de L'ancien projet (VS2002) au nouveau (VS2015).
le nouveau projet avait un Site.Page principale, qui a déjà une étiquette. Parce que je transférais de vieux formulaires Web sans modification, ils avaient déjà une étiquette aussi, donc chaque page essayant de charger avait deux étiquettes à l'intérieur.
Quand j'ai enlevé l'étiquette sur chaque page, ne laissant que celle sur place.Maître page, le problème a été résolu.
j'espère que cela aidera.