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

193

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 / a ce message d'erreur, et je sais que c'est un message courant. J'ai googlé 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 plus de messages me disant que j'ai imbriqué web.configs (mais aucune des publications n'offre de conseils pour trouver une solution).

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

Ma ligne 50 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 ... donc ma page domain.com/portal/default.aspx ne se chargera pas.

Quelle est la vraie solution à cela? Est-ce que je trouve un moyen de fusionner mon web.config racine avec mon répertoire / portal / web.config, ou suis-je loin de la base ici?

Toute orientation serait grandement appréciée!

Jason Weber
la source
1
Si vous vous attendez à ce que / portal / soit une application distincte sous votre site Web principal (ce que vous êtes si vous y déposez un web.config), vous devez le configurer en tant que répertoire virtuel. Quelle version d'IIS utilisez-vous? Vous pouvez généralement faire un clic droit 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". Faites-moi savoir votre version IIS.
tiret du
Salut Dash. J'utilise IIS7, et le / portal / est juste censé être un annuaire d'employés pour notre entreprise où les gens peuvent stocker des documents, garder un calendrier, et des choses comme ça. Je pense que Benni a 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 comprendre cela. Merci pour le temps que vous avez consacré à la lecture de ce Dash et à m'aider. Une fois que je vois cette option "créer", je saurai que je suis en route! Merci encore!
Jason Weber
1
J'ai eu ce problème, après avoir défini le profil de publication à précompiler avant la publication. donc le dossier obj était un web.config qui cassait le projet, après avoir tout supprimé dans le dossier obj, cela a fonctionné à nouveau.
Rumplin

Réponses:

219

Juste pour des informations générales; 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 énonce les informations de configuration de base pour tous les sites Web sur le serveur Web; ce fichier vit dans le%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 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 du dossier racine du site Web. L' <authentication>élément 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 qui contient 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 (c'est-à-dire la même méthode d'authentification) - ajoutez les <authentication>paramètres et tous les autres éléments qui devraient ê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 contenues dans ce lien lien archivé ci-dessous. Le lien d'origine ne fonctionne plus. (voir archivé ) J'espère que cela aide.

benni_mac_b
la source
8
Oui, Benni, absolument cela a aidé et éclairci les choses - beaucoup de choses. J'apprécie vraiment votre temps pour répondre à cette question; J'ai appris une tonne rien qu'en lisant ta 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 d'authentification - et si cela ne fonctionne pas, je vais examiner les différentes options IIS7. Merci encore pour votre temps et les informations, Benni!
Jason Weber
13
Lorsque je crée un package de déploiement Web, cela pose ce problème la prochaine fois que je crée. Il a une copie de Web.config dans MyWebSiteProject / obj / Debug / ...
Curtis Yallop
4
Après presque une journée à essayer de comprendre celui-ci, enfin une réponse descriptive approfondie qui expliquait réellement le problème, au lieu de dire ... nettoyez simplement votre solution et reconstruisez-la. Merci pour cela!
Dr Paul Jarvis
2
J'ai trouvé que le plus gros problème ici était qu'une version initiale fonctionnait, mais une version ultérieure a échoué car les paramètres autorisés dans le web.config de niveau supérieur n'étaient pas légaux dans le fichier web.config qui était maintenant copié dans le dossier obj. L'astuce consistait à supprimer les attributs incriminés au niveau supérieur et à supprimer le dossier obj pour obtenir un web.config légal dans un sous-dossier. Il s'agit évidemment d'un bogue dans Visual Studio, mais la solution de contournement est simple si vous n'avez pas besoin d'utiliser des attributs dans le web.config de niveau supérieur qui sont illégaux dans le web.config de sous-niveau.
csells
2
Dans Visual Studio 2012 et 2013, lorsque le fichier de configuration a Copier dans le répertoire de sortie = Toujours copier, le processus de publication semble déposer des copies du fichier de configuration dans les dossiers bin et obj, ce qui déclenche ensuite cette exception. La solution à ce problème de publication, identifié par Tim C., consiste à définir la propriété du fichier de configuration sur Ne pas copier.
criticalfix
68

Pour ce que ça vaut, j'avais reçu l'erreur, "C'est une erreur d'utiliser une section enregistrée comme allowDefinition = 'MachineToApplication' au-delà du niveau de l'application." et a fini par le résoudre en effaçant les répertoires \ myWebApp \ obj \ Debug et \ myWebApp \ obj \ Release. J'avais également besoin de définir une page de démarrage par défaut. Mais, ensuite, l'application a bien démarré. HTH.

Aaronius
la source
24
+1 La suppression du dossier OBJ semble être une solution courante ... stackoverflow.com/a/5175074/188926
Dunc
1
La suppression du contenu du dossier OBJ a également corrigé ce problème pour moi. Il semble y avoir de nombreuses autres causes potentielles à cette erreur. La phrase qui m'a aidé à trouver la bonne réponse était "lors de la publication".
Jim Neff
1
Si j'avais un dossier OBJ, j'essaierais ça.
B. Clay Shannon
La configuration de la page de démarrage par défaut a fait l'affaire pour moi après la suppression du dossier Debug ne suffisait pas (assurez-vous donc de faire les deux).
LoJo
J'ai essayé cela et cela n'a pas fonctionné. Ensuite, j'ai réalisé que j'avais oublié de convertir mes fichiers publiés en une application dans IIS.
eaglei22
60

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

La solution qui fonctionne pour moi ici est de supprimer tout le dossier de débogage que la ou les versions précédentes ont créé sous le répertoire du projet.

Matthew Brown
la source
1
Merci Matthew; J'ai finalement compris il y a quelque temps, mais oui, je devais compiler en release, pas en débogage. Je vous remercie de prendre le temps de répondre!
Jason Weber
3
Merci pour le conseil! Je viens de supprimer les dossiers bin et obj dans mon projet de site Web et cela a résolu le problème lors de la reconstruction.
Paul Stegler
22

Cela se produisait également sur mon ordinateur personnel, mais UNIQUEMENT lorsque j'ai activé Build Views sur la configuration de la version ET créé une configuration de version. Sinon, cela ne s'est pas produit.

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

Seigneur des scripts
la source
2
Merci Seigneur ... cela semblait faire l'affaire, avec quelques autres suggestions. J'apprécie que vous preniez le temps de répondre!
Jason Weber
1
Cela m'arrivait aussi. Pas certain de pourquoi. Cela rend le paramètre "MvcBuildViews" beaucoup moins utile.
Ken Smith
Existe-t-il un moyen de définir MvcBuildViews uniquement pour les paramètres utilisateur? LIke dans le fichier webproject.csproj.user?
C.Tewalt
J'ai commencé à recevoir cette erreur après l'installation de la mise à jour 2 pour VS 2013. J'ai un projet qui a un niveau supérieur et un site Web enfant imbriqué, tous deux configurés en tant qu'applications IIS. La désactivation de MvcBuildViews a également résolu le problème pour moi.
Greg Enslow
13

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 de projet qui est ajoutée à la nouvelle solution, L'ancienne Webconfig est l'endroit où l'erreur indiquée ci-dessus peut alors émaner .

" Fichier Web.config dans l'un des sous-dossiers du site Web contenant l'un de ces éléments de configuration qui ne peuvent pas être définis au-delà du niveau de l'application. " @Benni_mac_b

Pour y remédier: supprimez simplement le dossier de sauvegarde du projet et de la solution, dans ce scénario.

RY4N
la source
Merci pour cette information, Ryan .... Je n'ai que VS 2010. Je ne suis pas tout à fait sûr de ce que vous voulez dire quand vous dites 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/…
Jason Weber
12

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

J'avais une ancienne application Web intégrée à 2.0. Je l'ai migré vers une solution 4.5.

L'application a été créée et déboguée très bien à l'intérieur de Visual Studio, mais lorsque j'ai tenté de publier l'application Web, cette erreur s'est produite à plusieurs reprises.

J'ai finalement découvert que le problème était que Build Action pour le fichier web.config était "Embedded Resource" plutôt que "Content". 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 réglages ont été effectués, mais je crois que c'était de retour dans la version 2.0 de l'application.

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

Tim C
la source
avait essayé toutes les autres solutions là-bas. celui-ci a aidé. Mon projet a été migré au fil du temps de Visual Studio 2010 à 2015, alors peut-être que "Toujours copier" était la valeur par défaut en 2010
Andreas Rathmayr
Les propriétés de mon web.config sont limitées à deux: FileName et FullPath; sinon, je vérifierais quelle était l'action de construction.
B. Clay Shannon
11

J'ai eu le même problème dans un projet MVC. L'erreur s'est produite lorsque j'ai essayé de publier. Il s'est avéré que le dossier obj devrait être vide (ou du moins ne pas en contenir web.config).

Courir Cleann'a pas fait l'affaire pour moi.

J'ai résolu le problème en nettoyant le objdossier avant toute construction (la construction du projet ne prendra pas si longtemps de toute façon dans mon cas).

J'ai déchargé le projet et ajouté ce qui suit à 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

Rik
la source
7

"C'est une erreur d'utiliser une section enregistrée comme allowDefinition = 'MachineToApplication' au-delà du niveau de l'application. Cette erreur peut être causée par un répertoire virtuel qui 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 lorsque je configurais certaines transformations de configuration, j'avais défini par erreur la propriété du fichier Web.config "Copier toujours". Je règle généralement mes fichiers de transformation sur "Copier toujours" mais laisse le fichier racine web.config sur "Ne pas copier".

Attention, 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 peuvent ne pas être visibles, alors sélectionnez le nœud du projet dans l'Explorateur de solutions et cliquez sur le bouton de la barre d'outils "Afficher tous les fichiers".

4) Publier

A travaillé pour moi.

ben
la source
5

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 était de modifier les paramètres pour:

  • Build Action - Content
  • Copy to Output - Do not Copy
Hugo
la source
4

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

Après de longues recherches, 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 MS a répondu et en plus d'expliquer pourquoi c'était un problème survenu lors de la publication, il a également inclus une solution de contournement temporaire qui a résolu le problème pour moi.

Pat Long - Munkii Yebee
la source
4

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

sudhAnsu63
la source
3

Cliquez sur le Web.configfichier de l'explorateur de solutions et faites un clic droit sur "Propriétés" et passez à "Copier dans le répertoire de sortie: ne pas copier".

entrez la description de l'image ici

nPcomp
la source
1

Pour moi, la raison était que le dossier obj était sous le dossier du site Web et plusieurs web.config sont 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 hors du site Web. Pour ce faire, j'ai ajouté manuellement (dans le bloc-notes) $ (SolutionDir) \ Obj \ $ (Configuration) à chaque configuration dans le fichier de projet du site Web.

Mikhail.Gorbulsky
la source
1

J'avais le même problème lorsque je publierais le site, si je construis le site, je n'obtiens aucun problème, mais lors de la publication, j'obtiendrais cette terrible erreur:

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

J'ai essayé tout ce qui a été dit ici dans cet article sans recours, ce qui a fonctionné pour moi était simplement de créer un nouveau profil de publication avec exactement le même que celui que j'utilisais et qui fonctionne bien, n'obtenez pas l'erreur avec le nouveau profil mais 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 cela aide quelqu'un !!

FabianVal
la source
1

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 - on m'a juste demandé de regarder le site après un intervalle d'environ 2 ans et l'erreur s'est produite. J'ai pris un peu de temps pour comprendre - car je n'avais pas plusieurs fichiers de configuration.

Martin Smellworse
la source
1

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

à partir de vs: Build> Clean Solution

puis Rebuild.

kennydust
la source
1

Démarrer Windows -> ouvrir Sites -> IIS -> cliquer avec le bouton droit sur votre site -> Gérer le site Web -> Paramètres avancés -> parcourir le chemin physique -> essayer de sélectionner le sous-dossier de la fois que vous êtes actuellement sélectionné.

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

Subodh Pradhan
la source
1

J'obtiens également cette erreur lorsque j'essaie de déployer un sous-site Web dans 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. Remplacez l'authentification par Aucune comme: <authentication mode="None" />
  3. Et allez dans IIS, faites un clic droit sur le sous-dossier - > Ajouter une application.
  4. Réinitialisez IIS pour résoudre ce problème.

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

Trung
la source
1

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

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

Josh Harris
la source
0

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

Lorsque vous accédez à votre site comme localhost / dir_name, dans ce cas, votre web.conf tombe en dessous du niveau racine et donc cette erreur.

Hammad Khan
la source
0

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

sojim2
la source
0

J'ai eu cette erreur différemment de tout le monde:

J'étais en train de migrer de vs2010 avec un 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 distinct, il s'agit d'une application commerciale) et je publiais dans un dossier qui se trouvait à l'intérieur du projet Web existant lié à IIS.

Cela a provoqué une erreur lors de la publication qui m'a déconcerté au début parce que je publiais sur le système de fichiers, pas sur IIS (je pensais).

La solution consistait à modifier la publication dans le dossier en dehors du projet Web.

JohnC
la source
0

Tout allait bien localhostmais lorsque 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 choses ont été corrigées.

Baqer Naqvi
la source
0

Parfois, la réponse simple est la meilleure. J'avais deux fichiers web.config dans mon projet. Celui au niveau principal est celui où je devais effectuer le changement pour gérer le délai d'expiration de ma session (ce qui a déclenché ce problème). J'avais un fichier de configuration séparé dans mon répertoire Razor Views, qui avait 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 séparés, j'ai tout essayé sauf à la recherche de l'évidence.

Guy Schalnat
la source
0

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

Krilovitch
la source
0

J'ai eu cette erreur lorsque j'ai oublié de convertir le projet publié en une application dans IIS.

eaglei22
la source