web-dev-qa-db-fra.com

System.InvalidOperationException: Pile vide

Une fois l'application ASP.NET 4.x intégrée à Visual Studio 2013 obtenue, j'obtiens l'exception ci-dessous.

J'ai essayé de désactiver le PageInspector en supprimant l'inspecteur de page

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

et en ajoutant 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)

Est-il possible d'éviter l'exception? Merci beaucoup pour vos suggestions

24
mybrave

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 avoir ajouté comme proposé:

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

J'ai remarqué que l'élément sélectionné figurant en double dans une liste déroulante était à l'origine du problème.

8
fcm

J'ai désactivé le lien de navigateur dans VS 2013 et j'ai pu voir la cause réelle de l'erreur. Il s'agit généralement d'un élément sous-jacent lorsque le lien de 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/

24
Jason

Cela peut arriver si la AssociatedControlID d'une étiquette est associée à un contrôle introuvable.

21
Sam Jones

J'espère que cela aidera quelqu'un.

J'avais cette erreur lorsque mon asp:panel a un bouton par défaut disantXYZet que j'ai modifié le nomXYZet que j'ai oublié de changer le nom du bouton par défaut dans le panneau.

5
Halim

J'ai trouvé le problème. La manière de générer les ID des contrôles dans GridView a été modifiée. 

ClientIDMode="Predictable" ClientIDRowSuffix="ID"

Ce qui a entraîné l'exception. Vous ne savez pas pourquoi la véritable exception a été masquée par la pile PageInspector vide. Le simple fait de revenir au changement d'origine a résolu le problème.

Maintenant l'exception est différente (mais une fois que les paramètres de GridView sont revenus à leur valeur d'origine, ce dernier disparaît aussi)

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

J'ai également constaté ce problème dans certaines applications Web exécutées sur des machines de développement utilisant Visual Studio 2013 avec l'option "Lien de navigateur" activée.

Dans plusieurs cas que j'ai vus, laisser Browser Link activé pose toutes sortes de problèmes, à la fois script client et avertissements de sécurité, et exceptions serveur similaires (ce qui est gênant, c'est qu'il semble être activé par défaut, merci Msft!) 

3

J'ai eu la même exception, mais dans mon cas, le problème était le suivant:

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

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 l'identificateur AssociatedControlID du libellé associé.

lors de la modification de AssociatedControlID en ID de liste déroulante asp récemment ajouté, mon problème a été résolu.

2
Satbir

Nous avons démarré VisualStudio 2015 (vs2015) à partir du fichier de solution VisualStudio 2012 et n’avons pas construit tous les projets. 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 reconstruit la solution qui a réussi à créer tous les projets. Après cela, j'ai lancé l'URL dans un navigateur et Boom cela a fonctionné! Pour ceux qui ont un scénario similaire comme le mien. essayer !

0
Syed belgam

Dans mon cas, en raison de la migration d’un site Web de VS2002 vers 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) vers le nouveau (VS2015).

Le nouveau projet avait une page Site.Master, qui a déjà une balise. Étant donné que je transférais d'anciens formulaires Web sans modification, ils comportaient déjà une balise. Chaque page essayant de charger contenait deux balises.

Lorsque j'ai supprimé la balise sur chaque page, ne laissant que celle de la page Site.Master, le problème a été résolu.

J'espère que ça aide.

0
Rolo

Cela m’arrive lorsque j’ai ajouté un nouveau <asp:Panel> à ma page et défini la DefaultButton sur un bouton extérieur au panneau (Par erreur) . Erreur corrigée lorsque j’ai remplacé la DefaultButton par un autre à l’intérieur du panneau.

0
AmiNadimi