34 votes

MvcBuildViews true avec Entity Framework en ASP.NET MVC 2

Dans VS 2010, la modification de <MvcBuildViews>true</MvcBuildViews> dans le fichier .csproj d'un projet MVC2 provoque une erreur si vous utilisez Entity Framework.

Impossible de charger le type 'System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider'. C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config 129

Je veux construire des vues pendant que je débogue, et je veux aussi que mon projet se compile !

60voto

a7drew Points 4005

Vous pouvez résoudre ce problème de compilation MVC en ajoutant l'élément suivant à votre fichier web.config :

<add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

Cela indique au compilateur où trouver le type manquant.

5 votes

Solution évidente et logique. Merci. Mais pourquoi cela se comporte-t-il ainsi ? Pourquoi ai-je besoin d'ajouter l'espace de nom System.Data.Entity.Design à mon assemblage, cela n'a rien à voir avec mon code. C'est le travail de Visual Studio, il ne devrait pas être ajouté à mon application.

1 votes

Quelqu'un sait-il pourquoi cela se produit ?

8 votes

Entre <system.web><compilation><assemblies> - pour épargner à quelqu'un d'autre la peine de le découvrir. Réf. stackoverflow.com/a/10078384/10245

5voto

benpage Points 1500

J'ai eu ce problème aussi, et j'ai découvert que j'avais créé des fichiers d'entités (edmx et autres) mais que je les avais supprimés.

ce problème n'a commencé à se produire qu'après que j'ai créé ces fichiers. en inspectant les dossiers d'application, j'ai découvert que visual studio ne les avait pas réellement "supprimés" du disque, il les avait juste "supprimés" du projet. par conséquent, lorsque le projet a été compilé, il a vu ce fichier edmx et a décidé de l'inclure. d'où l'erreur.

solution facile - supprimer définitivement les fichiers de l'entité du disque !

1 votes

C'était finalement mon problème, quelque chose avait été accidentellement glissé et déposé dans le mauvais dossier.

0 votes

Je viens juste de comprendre cela dans le mien. L'ancien edmx remplacé était choisi par le compilateur pour une raison quelconque @#$@#$.

0 votes

Je pense que je reviendrais en arrière si je supprimais mon fichier .edmx. C'est un élément central de mon projet.

3voto

roufamatic Points 6773

Vous pouvez également supprimer le fournisseur de services de construction.

<system.web>
  <compilation debug="true" targetFramework="4.0">
    <buildProviders>
      <remove extension=".edmx"/>
    </buildProviders>
  </compilation>
</system.web>

0 votes

Échoue avec une erreur : "C'est une erreur d'utiliser une section enregistrée comme allowDefinition='MachineToApplication' au-delà du niveau de l'application."

0 votes

@PhilippMunin cette erreur signifie que le fichier de configuration que vous éditez n'est pas dans le dossier racine de l'application IIS, cela signifie généralement que vous éditez le mauvais dossier (les sous-dossiers ont parfois des fichiers de configuration aussi) ou que vous n'avez pas configuré iis pour servir votre projet comme une application. Plus d'informations sur les applications : technet.microsoft.com/fr/us/library/cc771654(v=ws.10).aspx

0 votes

Je voulais juste ajouter que parfois, ce problème est également dû à un fichier de configuration Web dans votre répertoire /obj. Supprimez simplement le répertoire /obj et cela devrait fonctionner.

2voto

Mark Points 11

Voici un exemple complet de web.config

<configuration>
<system.web>
    <customErrors mode="Off"/>
        <compilation debug="true" targetFramework="4.0">
 <assemblies>
    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />       
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <add assembly="System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </assemblies>
</compilation>
</system.web>
</configuration>

0voto

Charlino Points 11217

J'ai eu une erreur similaire lors de la mise en place de MvcBuildViews="true" qui avait à faire avec la construction de trouver plusieurs web.configs en raison de fichiers temporaires de construction et tout simplement pas l'aimer.

C'est une erreur totalement différente, mais je soupçonne qu'elles pourraient être liées...

Vous pouvez trouver la question originale que j'avais aquí et ensuite la solution décrite aquí .

La solution consiste essentiellement à modifier le chemin de sortie de vos constructions... il faut donc ajouter <BaseIntermediateOutputPath> dans le fichier csproj de votre site web.

Par exemple

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    ...BLAH...
    <BaseIntermediateOutputPath>..\TempBuildOutput</BaseIntermediateOutputPath>
  </PropertyGroup>
  ...A WHOLE LOTTA BLAH...
</Project>

HTHs,
Charles

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