54 votes

MVCBuildViews ne fonctionne pas correctement

J'ai donc édité mon .csproj fichier sur un MVC 3 RTM de l'application pour définir la propriété suivante:

<MvcBuildViews>true</MvcBuildViews>

Cela devrait provoquer mon point de vue à être respectées lors de la construction et de la force d'une erreur de build si mon point de vue est cassé. C'est le seul changement que j'ai fait, cependant, quand j'essaie de compiler l'application, j'obtiens l'erreur suivante:

Erreur 94 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.

Le projet se compile et s'exécute correctement si je les changer pour <MvcBuildViews>false</MvcBuildViews>

Les éléments suivants sont les construire les tâches configurées dans le .fichier csproj (ceux-ci n'ont jamais été modifiés manuellement, ils ont été ajoutés par Visual Studio 2010)

<Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target> -->
  <Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
    <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
  </Target>

Suis-je manqué quelque chose? Comment puis-je obtenir MVC 3 / Visual Studio 2010 est correctement configuré pour valider mon point de vue au moment de la construction?

55voto

Nick Canzoneri Points 1574

J'ai eu ce problème il y a quelques jours et je l'ai corrigé en supprimant obj/Debug dossier.

Edit: Voir Joe Cartano de réponse pour une solution plus permanente.

38voto

Chris Hynes Points 5110

Ce problème se produit lorsqu'il y a projet web de sortie (basé sur un modèle web.config ou temporaire de publier des fichiers) dans le dossier obj. L'ASP.NET compilateur utilisé n'est pas suffisamment intelligent pour ignorer les choses dans le dossier obj, de sorte qu'il jette les erreurs au lieu.

Une autre solution est de nuke l'publier la sortie à droite avant d'appeler <AspNetCompiler>. Ouvrez votre .csproj et modifiez ce qui suit:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

pour cela:

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <ItemGroup>
    <ExtraWebConfigs Include="$(BaseIntermediateOutputPath)\**\web.config" />
    <ExtraPackageTmp Include="$([System.IO.Directory]::GetDirectories(&quot;$(BaseIntermediateOutputPath)&quot;, &quot;PackageTmp&quot;, System.IO.SearchOption.AllDirectories))" />
  </ItemGroup>
  <Delete Files="@(ExtraWebConfigs)" />
  <RemoveDir Directories="@(ExtraPackageTmp)" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

Qui va supprimer toutes web.les configs sous \obj, ainsi que tous les PackageTmp dossiers sous \obj.

22voto

Joe Cartano Points 1660

Lorsque vous obtenez cette erreur avez-vous un autre site web.fichier de configuration dans votre dossier obj? Si vous utilisez MSDeploy, ce qui pourrait aider: http://blogs.msdn.com/b/webdevtools/archive/2010/05/14/the-aspnet-compiler-build-task-in-visual-studio-2010-asp-net-mvc-2-projects.aspxsi non, peut-être un autre site web.la config est généré par un outil vous sont en cours d'exécution.

4voto

arni Points 188

C'est ce qui a fonctionné pour moi. En option, vous pouvez spécifier une condition avec la configuration.

<Target Name="MvcBuildViews" AfterTargets="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
<Target Name="AfterBuild" Condition="'$(Configuration)'!='Debug'">
  <RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>

0voto

amurra Points 8822

Essayez de modifier que l' AspNetCompiler ligne à ceci:

<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />

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