216 votes

Erreur lors de l'utilisation d'une section enregistrée comme allowDefinition='MachineToApplication' au-delà du niveau de l'application

C'est une erreur d'utiliser une section enregistrée comme allowDefinition='MachineToApplication' au-delà du niveau de l'application.

La ligne supérieure de toutes mes pages aspx dans mon répertoire /portal/ contient ce message d'erreur, et je sais que c'est un message courant. J'ai cherché ce message d'erreur sur Google et j'ai vu beaucoup de messages me disant de configurer le dossier /portal/ en tant qu'application dans IIS (ce que j'ai fait), et encore plus de messages me disant que j'ai des web.config imbriqués (mais aucun de ces messages ne propose de solution).

Ma configuration est la suivante : j'ai un web.config dans mon répertoire Root, et j'essaie de créer un portail d'entreprise, dans le répertoire /portal/d. Le répertoire /portal/ a son propre web.config (nécessaire).

Ma ligne 50 de web.config est comme ceci :

    <customErrors mode="Off" defaultRedirect="customerrorpage.aspx"/>
    <anonymousIdentification enabled="true"/>
    <authentication mode="Forms"/>
    <membership defaultProvider="MyProvider">

J'ai donc domain.com/web.config ET domain.com/portal/web.config ... et ma page domain.com/portal/default.aspx ne se charge pas.

Quelle est la véritable solution à ce problème ? Dois-je trouver un moyen de fusionner le web.config de ma racine avec le web.config de mon répertoire /portail/, ou suis-je à côté de la plaque ?

Tout conseil serait grandement apprécié !

1 votes

Si vous souhaitez que /portal/ soit une application distincte de votre site Web principal (ce qui est le cas si vous y déposez un web.config), vous devez le configurer comme un répertoire virtuel. Quelle version de IIS utilisez-vous ? Vous pouvez généralement cliquer avec le bouton droit de la souris sur le répertoire et, sous Propriétés, rechercher l'onglet "Répertoire" et cliquer sur le bouton "Créer" à côté du nom de l'application, qui est probablement actuellement grisé. Pour limiter la portée du fichier web.config parent, regardez l'attribut inheritInChildApplications="false". Indiquez-moi votre version d'IIS.

0 votes

Salut Dash. J'utilise IIS7, et le /portail/ est juste censé être un répertoire d'employés pour notre société où les gens peuvent stocker des documents, garder un calendrier, et des choses comme ça. Je pense que Benni a en quelque sorte résumé ce que vous disiez - dans sa deuxième option, il a décrit la solution IIS. Je suis sûr qu'entre l'une de ces deux solutions, je peux trouver une solution. Merci d'avoir pris le temps de lire ce Dash et de m'aider. Dès que je verrai l'option "créer", je saurai que je suis sur la bonne voie ! Merci encore !

3 votes

J'ai eu ce problème, après avoir défini le profil de publication pour précompiler avant de publier. Le dossier obj contenait un web.config qui cassait le projet, après avoir supprimé tout ce qui se trouvait dans le dossier obj, cela a fonctionné à nouveau.

229voto

benni_mac_b Points 5194

À titre d'information, les informations de configuration d'un site Web ASP.NET sont définies dans un ou plusieurs fichiers Web.config. Les paramètres de configuration sont appliqués de manière hiérarchique. Il existe un fichier Web.config "global" qui définit les informations de configuration de base pour tous les sites Web du serveur Web. %WINDIR%\Microsoft.Net\Framework\version\CONFIG dossier. Vous pouvez également avoir un fichier Web.config dans le dossier racine de votre site Web. Ce fichier Web.config peut remplacer les paramètres définis dans le fichier Web.config "global", ou en ajouter de nouveaux. En outre, vous pouvez avoir des fichiers Web.config dans les sous-dossiers de votre site Web, qui définissent de nouveaux paramètres de configuration ou remplacent les paramètres de configuration définis dans les fichiers Web.config situés plus haut dans la hiérarchie.

Certains éléments de configuration dans Web.config ne peuvent être définis au-delà du niveau de l'application, ce qui signifie qu'ils doivent être définis dans le fichier Web.config "global" ou dans le fichier Web.config du dossier racine du site Web. Le site <authentication> est l'un de ces exemples. Le message d'erreur ci-dessus indique qu'il existe un fichier Web.config dans l'un des sous-dossiers du site Web qui contient l'un de ces éléments de configuration qui ne peuvent être définis au-delà du niveau de l'application.

Fuente: http://scottonwriting.net/sowblog/archive/2010/02/17/163375.aspx

Vous avez correctement identifié les 2 approches possibles.

1 - En fonction du contenu de votre deuxième web.config et si votre configuration le permet (i.e. même méthode d'authentification) - ajoutez l'option <authentication> et tout autre élément qui devrait être défini globalement dans le web.config supérieur.

2 - Si vous ne pouvez pas fusionner le contenu du web.config, vous devriez pouvoir transformer le sous-dossier en application web dans IIS en suivant les étapes contenues dans ce lien archivé ci-dessous. Le lien original ne fonctionne plus. (voir archivé ) J'espère que cela vous aidera.

8 votes

Oui, Benni, absolument, ça a aidé et éclairci les choses - beaucoup de choses. J'apprécie vraiment le temps que vous avez consacré à répondre à cette question ; j'ai appris une tonne de choses juste en lisant votre réponse, et les choses ont un peu plus de sens maintenant. Je pense que je vais essayer de fusionner les deux fichiers web.config -- au moins la partie authentification -- et si cela ne fonctionne pas, je regarderai les différentes options de IIS7. Merci encore pour votre temps et vos informations, Benni !

14 votes

Lorsque je construis un paquet de déploiement web, il provoque ce problème la prochaine fois que je construis. Il a une copie de Web.config dans MyWebSiteProject/obj/Debug/...

4 votes

Après avoir passé près d'une journée à essayer de résoudre ce problème, j'ai enfin trouvé une réponse descriptive et approfondie qui explique réellement le problème, plutôt que de dire... nettoyez simplement votre solution et reconstruisez. Merci pour cette réponse !

87voto

Aaronius Points 101

Pour ce que ça vaut, j'ai reçu l'erreur "It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level" et j'ai fini par la résoudre en supprimant l'attribut "MachineToApplication". \myWebApp\obj\Debug y \myWebApp\obj\Release répertoires. J'ai également dû définir une page de démarrage par défaut. Mais, ensuite, l'application a bien démarré. HTH.

27 votes

+1 La suppression du dossier OBJ semble être une solution courante... stackoverflow.com/a/5175074/188926

2 votes

La suppression du contenu du dossier OBJ a réglé le problème pour moi aussi. Il semble y avoir beaucoup d'autres causes potentielles à cette erreur. La phrase qui m'a aidé à trouver la bonne réponse était "pendant la publication".

1 votes

Si j'avais un dossier OBJ, j'essaierais.

61voto

Matthew Brown Points 361

Comme le dit RY4N ci-dessus, ce n'est pas nécessairement le web.config dans votre dossier Project qui pose problème. Dans certains cas, j'ai constaté que l'exécution d'un build sous le profil Debug laissait des détritus dans le dossier Debug du projet en question. Il y a souvent un fichier web.config dans ce dossier qui conduit à l'erreur ci-dessus lorsque vous exécutez ensuite un build sous le profil Release.

La solution qui fonctionne pour moi ici est de supprimer l'ensemble du dossier Debug que la ou les constructions précédentes ont créé sous le répertoire du projet.

1 votes

Merci Matthew ; j'ai finalement trouvé la solution il y a quelques temps, mais oui, j'ai dû compiler en version de base, pas en version de débogage. J'apprécie que vous preniez le temps de me répondre !

3 votes

Merci pour le conseil ! J'ai supprimé les dossiers bin et obj dans mon projet de site web et cela a résolu le problème lorsque j'ai reconstruit.

24voto

Lord of Scripts Points 601

Cela se produisait également sur mon ordinateur personnel, mais UNIQUEMENT lorsque j'activais Build Views sur la configuration de la version et que je construisais une configuration de la version. Sinon, cela ne se produisait pas.

Bien que l'option Build Views soit très intéressante, j'ai fini par la désactiver parce que cette "erreur" apparaissait toujours et m'empêchait de lancer l'application.

2 votes

Merci Seigneur ... cela semble faire l'affaire, ainsi que quelques autres suggestions. J'apprécie que vous preniez le temps de répondre !

1 votes

Cela m'arrivait à moi aussi. Je ne sais pas pourquoi. En tout cas, cela rend le paramètre "MvcBuildViews" beaucoup moins utile.

0 votes

Existe-t-il un moyen d'avoir des MvcBuildViews définis uniquement pour les paramètres de l'utilisateur ? Comme dans le fichier webproject.csproj.user ?

13voto

RY4N Points 445

Juste pour dire

Si vous mettez à niveau (par exemple 2008 -> 2010) Un projet Visual studio créera une sauvegarde (si vous l'autorisez) dans la solution du projet qui est ajoutée à la nouvelle solution. L'ancienne Webconfig est l'endroit d'où peut provenir l'erreur signalée ci-dessus.

" Le fichier Web.config dans l'un des sous-dossiers du site Web possède l'un de ces éléments de configuration qui ne peuvent être définis au-delà du niveau de l'application. "@benni_mac_b

Pour le réparer : Il suffit de supprimer le dossier de sauvegarde du projet et de la solution, dans ce scénario.

0 votes

Merci pour ces informations, Ryan .... Je n'ai que VS 2010. Je ne suis pas tout à fait sûr de ce que vous voulez dire quand vous dites de supprimer le dossier de sauvegarde du projet et de la solution. Mais je vais approfondir votre réponse. Encore une fois, merci d'avoir pris le temps d'essayer de m'aider ! Je viens de poster une question de suivi ici : stackoverflow.com/questions/10414751/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X