web-dev-qa-db-fra.com

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 avec allowDefinition = 'MachineToApplication' au-delà du niveau de l'application.

La ligne supérieure de toutes mes pages aspx de 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 sans fin, et je vois beaucoup de messages me disant de configurer le dossier/portal/en tant qu'application dans IIS (que j'ai), et d'autres messages me disant que j'ai imbriqué sur le Web. .configs (mais aucune des publications n'offre de conseils pour une solution).

Ma configuration est que j'ai un fichier web.config dans mon répertoire racine, puis j'essaie de créer un portail d'entreprise dans le répertoire/portal /. Le répertoire/portal/a son propre (nécessaire) web.config. 

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 ... afin que ma page domain.com/portal/default.aspx ne se charge pas.

Quelle est la vraie solution à cela? Est-ce que je trouve en quelque sorte un moyen de fusionner mon racine web.config avec mon/portal/directory web.config, ou suis-je complètement en retrait ici?

Toute orientation serait grandement appréciée!

164
Jason Weber

Juste pour l'information de fond; Les informations de configuration pour 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 «global» Web.config qui énonce les informations de configuration de base pour tous les sites Web sur le serveur Web; ce fichier réside dans le dossier %WINDIR%\Microsoft.Net\Framework\version\CONFIG. 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 plus haut dans la hiérarchie.

Certains éléments de configuration dans Web.config ne peuvent pas ê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 situé dans le dossier racine du site Web. L'élément <authentication> en est un exemple. Le message d'erreur ci-dessus indique qu'il existe un fichier Web.config dans l'un des sous-dossiers du site Web contenant l'un de ces éléments de configuration qui ne peut pas être défini au-delà du niveau de l'application.

Source: 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 (même méthode d’authentification), ajoutez les paramètres <authentication> et tous les autres éléments devant être définis globalement dans le haut web.config.

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

196
benni_mac_b

Comme RY4N le dit ci-dessus, le problème ne réside pas nécessairement dans le fichier web.config de votre dossier Projet. Dans certains cas, j'ai constaté que l'exécution d'une construction sous le profil Debug laisserait des détritus dans le dossier Debug du projet en question. Il y a souvent un fichier web.config ici qui conduit à l'erreur ci-dessus lorsque vous exécutez par la suite une construction sous le profil Release.

La solution qui me convient ici consiste à supprimer tout le dossier Debug créé par la ou les versions précédentes dans le répertoire du projet.

56
Matthew Brown

Pour ce que cela vaut, j'avais reçu l'erreur suivante: "Utiliser une section enregistrée avec allowDefinition = 'MachineToApplication" au-delà du niveau de l'application est une erreur. et a fini par le résoudre en effaçant les répertoires\myWebApp\obj\Debug et\myWebApp\obj\Release. Je devais aussi définir une page de démarrage par défaut. Mais l'application a ensuite démarré correctement. HTH.

53
Aaronius

Cela se produisait également sur mon ordinateur personnel, mais UNIQUEMENT lorsque j’ai activé Construire les vues sur la configuration de la version ET créé une configuration de version. Sinon, ce n'est pas arrivé.

Bien que l'option Construire les vues soit très agréable, j'ai fini par la désactiver, car cette "erreur" apparaîtrait toujours et me laisserait incapable d'exécuter l'application.

21
Lord of Scripts

Juste pour dire

Si vous mettez à niveau (par exemple 2008 -> 2010) Un projet Visual studio créera une sauvegarde (si vous le permettez) dans la solution de projet ajoutée à la nouvelle solution. L'ancien Webconfig est celui où L’erreur indiquée ci-dessus peut alors émaner de.

"Le fichier Web.config situé dans l'un des sous-dossiers du site Web contient l'un de ces éléments de configuration qui ne peut pas être défini au-delà du niveau de l'application." @ Benni_mac_b

Pour résoudre ce problème: Supprimez simplement le dossier de sauvegarde du projet et de la solution, dans ce scénario.

12
RY4N

J'ai trouvé une autre raison possible pour que cela se produise.

J'avais une application web plus ancienne construite en 2.0. Je l'ai migré vers une solution 4.5.

L’application construite et mise au point parfaitement à l’intérieur de Visual Studio, mais lorsque j’ai tenté de publier l’application Web, cette erreur s’est produite maintes fois.

J'ai finalement découvert que le problème était que l'action de génération pour le fichier web.config était une "ressource incorporée" plutôt que "un contenu". En outre, le répertoire de copie dans le répertoire de sortie a été défini sur "Toujours copier" plutôt que sur "Ne pas copier". Je ne sais pas quand ces paramètres ont été définis, mais je crois que c'était dans la version 2.0 de l'application. 

La modification des paramètres du fichier web.config a permis à l'action Publier dans la publication Visual Studio 2012 de fonctionner parfaitement. 

11
Tim C

J'ai eu le même problème dans un projet MVC. L'erreur s'est produite lorsque j'ai essayé de publier. Le dossier obj doit être vide (ou du moins ne contenir aucun web.config).

Courir Clean n'a pas fait l'affaire pour moi.

J'ai résolu le problème en nettoyant le dossier obj avant toute construction (la construction du projet ne prendra pas aussi longtemps dans mon cas).

J'ai déchargé le projet et ajouté les éléments suivants à la cible BeforeBuild

<Target Name="BeforeBuild">
    <Delete Files="$(SolutionDir)\$(ProjectDir)\bin\**\*.*" />
    <Delete Files="$(SolutionDir)\$(ProjectDir)\obj\**\*.*" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\bin" />
    <RemoveDir Directories="$(SolutionDir)\$(ProjectDir)\obj" />
    <Message Text="Clean obj/bin from web project" />
</Target>

J'espère que cela t'aides

9
Rik

"Utiliser une section enregistrée comme allowDefinition =" MachineToApplication "au-delà du niveau de l'application est une erreur. Cette erreur peut être due au fait qu'un répertoire virtuel n'est pas configuré en tant qu'application dans IIS."

J'ai eu ce problème dans VS.NET. Il s'est avéré que lors de la configuration de certaines transformations de configuration, j'avais défini par erreur la propriété "Copier toujours" du fichier Web.config. Je règle généralement mes fichiers de transformation sur "Copier toujours" mais je laisse le fichier racine web.config sur "Ne pas copier".

Attention, car la modification des propriétés de web.config modifie également toutes les transformations imbriquées.

Donc, pour réparer:

1) Changez web.config en "Ne pas copier"

2) Facultativement, si vous utilisez des transformations de configuration, définissez-les sur "Copier toujours".

3) Supprimez les dossiers obj et bin de la solution (ceux-ci pouvant ne pas être visibles, sélectionnez le nœud du projet dans l'Explorateur de solutions et cliquez sur le bouton "Afficher tous les fichiers" de la barre d'outils.

4) publier

Travaillé pour moi.

6
ben

J'ai rencontré cette erreur uniquement lors de la publication de l'application.

Les propriétés des fichiers web.config (et transformations) ont été définies comme suit:

  • Build Action - None 
  • Copy to Output - Always

La solution consistait à modifier les paramètres pour:

  • Build Action - Content 
  • Copy to Output - Do not Copy
5
Hugo

Supprimez et créez le répertoire virtuel à nouveau . Faites un clic droit et convertissez le répertoire virtuel en " Application "

4
sudhAnsu63

J'ai également eu ce problème et il est survenu après avoir utilisé le Wizard de publication pour publier mon site sur le Web.

Après avoir beaucoup fouillé, je suis tombé sur ce rapport de bogue sur le site Web de Connect, https://connect.Microsoft.com/VisualStudio/feedback/details/779737/error-allowdefinition-machinetoapplication-beyond-application-level

Un représentant de l'État membre a répondu et a expliqué pourquoi il s'agissait d'un problème survenu lors de la publication. Il a également inclus une solution temporaire permettant de résoudre le problème pour moi. 

Cliquez sur le fichier Web.config dans l'Explorateur de solutions et modifiez-le. 

Copier dans le répertoire de sortie = Ne pas copier

2
nPcomp

Voici une autre raison. Si vous copiez l'intégralité de votre application Web dans l'un de ses propres sous-dossiers, vous obtiendrez cette erreur. J'ai réussi à faire cela sur un ancien site lors de la copie d'une machine à une autre. Cela a pris un peu de temps, car je n'avais pas plusieurs fichiers de configuration. 

1
Martin Smellworse

Windows Démarrer -> Ouvrir des sites -> IIS -> Faites un clic droit sur votre site -> Gérer le site Web -> Paramètres avancés -> Parcourir le chemin physique -> essayez de sélectionner le sous-dossier de la sélection en cours.

la logique est que le fichier de configuration Web à l'intérieur du sous-dossier tente d'apporter des modifications, ce qui n'est pas autorisé. Le dossier sélectionné doit être: http://scottonwriting.net/sowblog/archive/2010/02/17/163375 .aspx

1
Subodh Pradhan

Pour moi, la raison était que le dossier obj se trouvait sous le dossier du site Web et que plusieurs web.config étaient apparus après la construction de différentes configurations. J'ai résolu le problème sous vs2012 en déplaçant le dossier obj sur le site Web. Pour ce faire, j'ai ajouté manuellement (dans le bloc-notes) $ (SolutionDir)\Obj\$ (Configuration) À chaque configuration du fichier de projet du site Web.

1
Mikhail.Gorbulsky

J'ai eu ce problème et résolu en nettoyant ma solution d'anciens assemblages, etc.

de vs: Construire> Solution propre

puis reconstruire.

1
kennydust

J'avais le même problème lorsque je publiais le site. Si je construisais le site, je n'aurais aucun problème, mais lors de la publication j'aurais cette terrible erreur:

"L'utilisation d'une section enregistrée sous le nom .__ est une erreur. Elle dépasse le niveau de l'application."

J'ai essayé tout ce qui a été dit ici dans ce post, sans recours. Ce qui a fonctionné pour moi a été de créer un nouveau profil de publication avec exactement le même profil que celui que j'ai utilisé et qui fonctionne bien, ne recevez pas l'erreur. avec le nouveau profil mais fais avec l'ancien. Je ne sais pas quelle est la différence, mais au moins je peux publier mon projet MVC.

J'espère que ça aide quelqu'un !!

1
FabianVal

C'était correct sur localhost mais quand j'ai publié une version sur le serveur, j'ai commencé la même erreur pour quelques pages ..__ Ensuite, j'ai nettoyé la solution et reconstruit et publié, les problèmes ont été corrigés. 

0
Baqer Naqvi

Je reçois également cette erreur lorsque vous essayez de déployer un site Web secondaire sur un site Web.

La solution est:

  1. Vous devez supprimer certains onglets de configuration tels que: profile , membership , roleManager , sessionState dans le sous-Web.config
  2. Définissez Authentification sur Aucune comme suit: <authentication mode="None" />
  3. Et cliquez sur IIS avec le bouton droit de la souris sur le sous-dossier - > Ajouter une application.
  4. Réinitialisez IIS pour résoudre ce problème.

SI obtenir un autre problème, n'hésitez pas à me contacter, peut-être que je trouverai de l'aide.

0
Trung

mon erreur était de copier accidentellement coller un web.config dans un autre dossier sur le serveur web 

0
krilovich

Assurez-vous de ne pas tomber dans le piège d'accéder à votre site local faux via localchost/mysite.test qui devrait être mysite.test qui vous donnera cette erreur.

Lorsque vous accédez à votre site comme localhost/rép_nom, dans ce cas, votre fichier Web.conf tombe en dessous du niveau racine et par conséquent de cette erreur.

0
Hammad Khan

J'étais en train de migrer des applications et l'application contenait plusieurs applications (plusieurs web.configs). Ce que j'ai fait est d'aller dans IIS, puis cliquer avec le bouton droit de la souris sur les sous-dossiers, puis sur "Convertir en application".

0
sojim2

Parfois, la réponse simple est la meilleure. J'ai eu deux fichiers web.config dans mon projet. Celui du niveau principal est celui où je devais apporter le changement pour traiter le délai d'expiration de ma session (qui a déclenché ce problème). J'avais un fichier de configuration séparé dans mon répertoire Razor Views, qui contenait des paramètres pour Razor et ses vues. J'y ajoutais une section (pas au niveau de l'application!). Sans me rendre compte que j'avais deux fichiers web.config distincts, j'ai tout essayé sauf la recherche de l'évident.

0
Guy Schalnat

J'ai eu cette erreur différemment des autres:

J'étais en train de migrer de vs2010 avec le projet de déploiement Web vers vs2012 et un nouveau profil de publication Web.

J'ai créé un nouveau projet de publication Web dans vs2012 pour publier dans le système de fichiers (nous avons un constructeur d'installation séparé, il s'agit d'une application commerciale) et je publiais dans un dossier qui se trouvait dans le projet Web existant et qui était lié à IIS. 

Cela a provoqué l'erreur lors de la publication qui m'a mystifiée au début parce que je publiais dans un système de fichiers, pas IIS (pensais-je).

La solution consistait à changer le dossier Publier dans en dehors du projet Web.

0
JohnC

J'ai reçu cette erreur sur localhost dans Visual Studio 2017 et un simple redémarrage de Visual Studio a effacé le problème.

Je me rends compte que ce problème peut également être causé par plusieurs Web.config; un dans un sous-dossier par exemple. si vous avez volontairement plusieurs fichiers web.config pour une autre application: assurez-vous que le répertoire n'est pas vu comme un répertoire virtuel.

0
Josh Harris