45 votes

allowDefinition='MachineToApplication' msbuild erreur

Nous avons un ASP.NET MVC avec 4-5 différentes configurations de génération. Chaque fois que nous modifier la configuration de la compilation, nous avons besoin de supprimer le dossier obj pour le projet web, puisque nous faire la " allowDefinition='MachineToApplication' erreur. Une douleur, mais nous avons réussi en supprimant le dossier de pré/post-construire des événements. Maintenant, j'ai besoin de configurer notre CI pour construire des packages de déploiement. Cela signifie que je ne peux pas supprimer le dossier obj. Chaque fois que je compile par exemple, à la suite de msbuild paramètres

/p:CreatePackageOnPublish=true /p:DeployOnBuild=true

J'obtiens l'erreur:

web.config(123): erreur ASPCONFIG: C'est une erreur d'utiliser une section enregistré comme allowDefinition='MachineToApplication" au-delà du niveau de l'application. Cette erreur peut être causée par un répertoire virtuel de ne pas être configuré comme une application dans IIS.

Comme je le comprends, le problème est qu'il y a de multiples .les fichiers de configuration dans le projet - Dans notre cas, il n'y a pas. J'ai vraiment pu utiliser un peu d'aide pour trouver une explication et trouver un permanent (sans bidouille) fix.

Edit: Cette question est marqué comme un doublon, mais les réponses correspondantes et cause(s) dans les 2 threads, sont clairement différents les uns des autres. Pas sûr de ce qui est prévu avec cette balise - j'ai lu ce post avant de poster cette question, comme il n'a pas répondu à ma question. Il y a plusieurs causes pour ce message d'erreur. Il est "similaires", mais certainement pas un doublon!

23voto

Marnix van Valen Points 6197

Il est également question ici DONC, avec quelques bonnes solutions pour ce problème.

Le problème est que la construction d'un package de déploiement crée une copie du site web.config dans un sous-dossier de /obj. Qui sera normalement être désactivée si vous n'avez pas une reconstruction ou d'un chiffon propre. Toutefois, si vous créez un package de déploiement dans une configuration (par exemple, Debug) et ensuite passer à une autre confguration (par exemple, la Libération) obj/Debug dossier n'est pas vidé et le web.fichier de config, il provoque des problèmes.

La solution rapide est de nettoyer toutes les configurations et puis faire un (re)construire. Alternativement, vous pouvez supprimer le /obj dossier de votre projet. Pour résoudre définitivement le problème, vous pouvez soit déplacer l'intermédiaire de la sortie (/obj) de votre dossier de projet ou de modifier le projet de la force propre de toutes les configurations à la reconstruction.

21voto

Valamas - AUS Points 8359

Aussi, j'ai supprimer le dossier obj jusqu'à ce que j'ai eu un conflit avec un script de compilation qui en ont besoin. Catch-22, j'ai utilisé la accepté de réponse sur la suite DONC, le lien pour déplacer l'emplacement du dossier Obj à C:\Temp\BUILD. Vous devez le faire par fichier csproj, mais c'est une bonne solution.

Voici le lien: VisualStudio: Comment faire pour enregistrer le dossier obj ailleurs

Notez que je suis en utilisant une variable pour le nom du projet. R:\Temp\Build\Debug\$(MSBuildProjectName)

J'ai la ligne ci-dessus en debug et release sections pour tous mes projets, y compris les projets de classe. Mon build path est un disque ram pour la vitesse. Voir ce DONC, pour plus d'info: Comment accéder à des macro-variables au sein de fichier csproj?

12voto

arcain Points 7152

J'ai simplement répondu à une question similaire ici. Pour résumer, je suis tombé sur ce problème dans l'un de nos projets MVC, et c'était dû à la présence de l' MvcBuildViews propriété dans le fichier de projet mis à l' true. Définition de la propriété à false a résolu le problème.

<MvcBuildViews>false</MvcBuildViews>

J'ai aussi trouvé cette réponse qui décrit une alternative qui ne nécessite pas d'éteindre point de vue construction.

2voto

Geoff Gunter Points 101

Je ne sais pas qu'il est un "officiel" fix comme il semblait juste de commencer sur de multiples projets de la mine, pour aucune raison que je peux trouver dans Visual Studio Premium 2012 (jamais arrivé dans les versions précédentes de VS).

Comme pour automatiser la suppression de l'obj répertoire comme d'autres l'ont dit, semblable à une réponse par l'utilisateur Occasionnel dans ce post, VisualStudio: Comment faire pour enregistrer le dossier obj ailleurs, où, malheureusement, le simple fait de déplacer l'emplacement du dossier obj n'ai pas toujours l'impression de travailler.

Au lieu de cela, j'ai ajouté quelques commandes sous créer des Événements dans le Pré-événement de construction de la ligne de commande:

rd "$(ProjectDir)obj" /S /Q
md "$(ProjectDir)obj"
md "$(ProjectDir)obj\Debug"
md "$(ProjectDir)obj\Release"

Vous pouvez modifier/ajouter/supprimer des sous-dossiers pour correspondre à votre personnalisé créer des configurations à l'aide de la ligne où buildConfigName correspond au nom de la configuration de build que vous utilisez:

md "$(ProjectDir)obj\buildConfigName"

Espérons que cette aide!

1voto

Taylor Bird Points 4613

Cette erreur indique que vous essayez quelque chose de spécifique à une application à un IIS niveau d'arborescence qui n'est pas défini comme une application. Par exemple, si vous essayez de faire application au niveau des fonctions dans un site web.config dans un répertoire virtuel, vous obtiendrez cette erreur. Vous devez trouver le chemin d'accès que vous déployez et assurez-vous qu'il est défini dans IIS comme une application vs un dossier ou vdir.

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