allowDefinition = Erreur msbuild de ‘MachineToApplication’

Nous avons un ASP.NET MVC avec 4-5 configurations de construction différentes. Chaque fois que nous modifions la configuration de la construction, nous devons supprimer le dossier obj du projet Web, car nous obtenons l’erreur ‘allowDefinition =’ MachineToApplication ‘. Une douleur, mais nous avons réussi en supprimant le dossier dans les événements pré / post-build. Maintenant, je dois 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 comstack par exemple avec les parameters msbuild suivants

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

Je reçois l’erreur:

web.config (123): erreur ASPCONFIG: L’utilisation d’une section enregistrée comme allowDefinition = ‘MachineToApplication’ au-delà du niveau de l’application est une erreur. Cette erreur peut être provoquée par un répertoire virtuel qui n’est pas configuré en tant qu’application dans IIS.

Pour autant que je sache, le problème est qu’il y a plusieurs fichiers .config dans le projet – Dans notre cas, il n’y en a pas. Je pourrais vraiment utiliser de l’aide pour trouver une explication et trouver un correctif permanent (non piraté).

Edit: Cette question est marquée en double, mais les réponses et les causes correspondantes dans les 2 threads sont clairement différentes. Je ne suis pas sûr de ce qui est prévu avec cette balise – J’ai lu cet article en particulier avant de poster cette question, car elle ne répondait pas à ma question. Il existe plusieurs causes à ce message d’erreur. C’est “similaire”, mais certainement pas en double!

Moi aussi, je supprimais le dossier obj jusqu’à ce que j’aie un conflit avec un script de compilation qui le nécessitait. Catch-22, j’ai utilisé la réponse acceptée sur le lien SO suivant pour déplacer l’emplacement du dossier Obj vers C:\Temp\BUILD . Vous devez le faire par fichier csproj, mais c’est une excellente solution.

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

Notez que j’utilise une variable pour le nom du projet. R: \ Temp \ Build \ Debug \ $ (MSBuildProjectName)

J’ai la ligne ci-dessus dans les deux sections de débogage et de publication pour tous mes projets, y compris les projets de classe. Mon chemin de construction est un lecteur RAM pour la vitesse. Voir ce SO pour plus d’informations: Comment accéder aux variables macro dans le fichier csproj?

Il y a une question similaire sur SO avec quelques bonnes solutions pour ce problème.

Le problème est que la création d’un package de déploiement crée une copie du fichier web.config dans un sous-dossier de / obj. Ce sera normalement être effacé si vous faites une reconstruction ou un nettoyage. Toutefois, si vous créez un package de déploiement dans une configuration (par exemple, Debug), puis passez à une autre configuration (par exemple, Release), le dossier obj / Debug n’est pas effacé et le fichier web.config pose problème.

La solution rapide consiste à nettoyer toutes les configurations, puis à effectuer une (re) construction. Vous pouvez également supprimer le dossier / obj de votre projet. Pour résoudre définitivement le problème, vous pouvez déplacer la sortie intermédiaire (/ obj) de votre dossier de projet ou modifier le projet pour forcer le nettoyage de toutes les configurations lors de la reconstruction.

Je viens de répondre à une question similaire ici . Pour récapituler, j’ai rencontré ce problème dans l’un de nos projets MVC, et c’était dû à la propriété MvcBuildViews du fichier de projet définie sur true . Définir la propriété sur false résolu le problème.

 false 

J’ai également trouvé cette réponse qui décrit une alternative qui ne nécessite pas de désactiver la création de vues.

Je ne sais pas qu’il existe un correctif “officiel”, car il semblait juste démarrer sur plusieurs de mes projets sans aucune raison que je puisse trouver dans Visual Studio Premium 2012 (jamais arrivé dans les versions précédentes de VS).

Comme travail pour automatiser la suppression du répertoire obj comme d’autres l’ont dit, similaire à une réponse de l’utilisateur Casual dans cet article VisualStudio: Comment sauvegarder le dossier obj ailleurs , où malheureusement il suffit de déplacer l’emplacement du dossier obj t semble toujours fonctionner.

Au lieu de cela, j’ai ajouté quelques commandes sous Construire des événements dans la ligne de commande des événements de pré-génération:

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

Vous pouvez modifier / append / supprimer des sous-dossiers pour qu’ils correspondent à vos configurations de génération personnalisées en utilisant la ligne où buildConfigName correspond au nom de la configuration de génération que vous utilisez:

 md "$(ProjectDir)obj\buildConfigName" 

J’espère que cela t’aides!

Cette erreur indique que vous essayez quelque chose de spécifique à une application au niveau de l’arborescence IIS qui n’est pas défini en tant qu’application. Par exemple, si vous essayez d’effectuer des fonctions au niveau de l’application dans un fichier web.config dans un répertoire virtuel, vous obtiendrez cette erreur. Vous devez rechercher le chemin sur lequel vous déployez et assurez-vous qu’il est défini dans IIS en tant qu’application par rapport à un dossier ou à un vdir.

Nettoyer la solution (clic droit Solution in VS, clean), a fonctionné pour moi.

J’ai eu la même erreur mais avec une page déployée .. Puis j’ai réalisé que l’horloge de mon serveur web avait été remise à 2010 pour une raison quelconque. régler à la date correcte corriger mon problème

Ce n’est pas forcément le même problème, et pour être honnête, probablement par manque de connaissance de ma part, mais j’ai eu la même erreur lorsque:

  1. J’ai mis en place un nouveau projet standard asp.net, utilisé juste pour les éléments HTML5, rien d’autre que la structure de projet habituelle
  2. J’ai alors (pas pensé peut-être!) Ajouté un nouveau projet WCF REST (qui n’était en fait qu’un autre projet de base asp.net utilisant de très bons exemples de http://www.codeproject.com/Articles/128478/Consuming-WCF-REST- Services-Using-jQuery-AJAX-Call? Fid = 1597004 & df = 90 & mpp = 25 & noise = 3 & prof = False & sort = Position & view = Rapide & fr = 26 # xx0xx et http://geekswithblogs.net/michelotti/archive/2010/08/21/restful- wcf-services-avec-no-svc-file-et-no-config.aspx

Le problème était que j’ai ajouté le projet WCF REST (# 2) en tant que sous-répertoire du projet principal (# 1), puis j’ai essayé de construire! même si j’ai bien sûr nettoyé le projet. J’ai également fait utiliser les deux projets IISexpress car je pensais qu’il y avait un problème avec le même port ou quelque chose.

Bien sûr, le processus de compilation a vu le fichier web.config de # 1, puis un sous-répertoire avec un autre fichier web.config # 2.

Je me rends compte que cela devrait probablement être un truc de base très compris et ça m’a surpris il y a un certain temps, mais parfois c’est la plus simple des erreurs qui fait vraiment mal!

Peut-être aider les autres … qui n’ont peut-être pas pris leur café du matin ..

Astuce 1: nettoyer et ensuite reconstruire.

Conseil 2: fermez VS et ouvrez-le à nouveau.

Astuce 3: le projet téléchargé peut être dans un autre sous-dossier … ouvrez le dossier contenant vos fichiers .net.

c: / demo1 / demo / (tous les fichiers)

Vous devriez avoir à ouvrir la démo de vs … pas de démo1.

Nettoyez votre projet Supprimez le dossier / obj (probablement en utilisant publish et deploy? – il y a un bogue)

J’ai un problème un peu similaire, j’avais la configuration principale sous le nom de Copy Always afin de copier la configuration dans le répertoire bin. Lorsque j’ai republié le projet principal, j’ai eu l’erreur MachineToApplication. Donc, ma solution consistait à remplacer la configuration par Ne pas copier et à supprimer la configuration supplémentaire dans le dossier bin.

Bien que le problème soit expliqué et résolu d’une manière dans la réponse acceptée, je voulais montrer une solution qui peut être meilleure pour d’autres cas. Cette solution a été incluse dans certaines versions de VS, mais je peux seulement dire que j’avais le problème dans VS 2013 Update 5. (Voir “Attention” ci-dessous, elle pourrait être corrigée dans cette version, mais ne fonctionne pas uniquement dans mon cas Cas).

J’ai emprunté la solution à Error: allowDefinition = ‘MachineToApplication’ au-delà du niveau de l’application sur Visual Studio Connect.

La solution consiste à inclure ces lignes dans le projet d’application Web (fichier .csproj ) qui gère la suppression des fichiers intermédiaires offensants (ce qui n’était pas une solution pour la réponse acceptée, car il avait besoin de ces fichiers intermédiaires):

   <_enablecleanonbuildformvcviews Condition=" '$(_EnableCleanOnBuildForMvcViews)'=='' ">true    <_publishtempfoldernamestocleanup Include="Database;TransformWebConfig;CSAutoParameterize;InsertAdditionalCS;ProfileTransformWebConfig;Package;AspnetCompileMerge">        

Attention: pour une raison quelconque, probablement parce que je l’ai inclus moi-même dans le projet, ma cible de compilation pour la construction des vues a été nommée "BuildViews" , au lieu de "MvcBuildViews" .