MvcBuildViews true с Entity Framework в ASP.NET MVC 2

В VS 2010 изменение <MvcBuildViews>true</MvcBuildViews> в файле .csproj проекта MVC2 вызывает ошибку, если вы используете Entity Framework.

Не удалось загрузить тип System.Data.Entity.Design.AspNet.EntityDesignerBuildProvider. C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \ web.config 129

Я хочу создавать представления во время отладки, а также хочу, чтобы мой проект компилировался!


person Alper    schedule 04.05.2010    source источник


Ответы (6)


Вы можете решить эту проблему компиляции MVC, добавив следующий элемент в свой файл web.config:

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

Это сообщит компилятору, где найти отсутствующий тип.

person a7drew    schedule 11.05.2010
comment
Очевидное и логичное решение. Спасибо. Но почему он так себя ведет? Зачем мне добавлять пространство имен System.Data.Entity.Design в мою сборку, это не имеет отношения к моему коду. Я занимаюсь Visual Studio, его не следует добавлять в мое приложение. - person Alper; 13.05.2010
comment
кто-нибудь знает, почему это произошло? - person BrianFinkel; 04.10.2012
comment
Идет в <system.web><compilation><assemblies> - чтобы избавить кого-либо от проблемы с выяснением этого. Ссылка stackoverflow.com/a/10078384/10245 - person Tim Abell; 30.10.2014

У меня тоже была эта проблема, и я понял, что создал несколько файлов сущностей (edmx и т.п.), но удалил их.

эта проблема началась только после того, как я создал эти файлы. при проверке папок приложений я обнаружил, что Visual Studio на самом деле не «удалила» их с диска, а просто «удалила» их из проекта. поэтому, когда проект компилировался, он увидел этот файл edmx и решил, что он будет включать его. отсюда и ошибка.

Простое исправление - безвозвратно удалить файлы сущностей с диска!

person benpage    schedule 13.07.2010
comment
Это стало моей проблемой, что-то случайно перетащили не в ту папку. - person Falkayn; 05.08.2010
comment
только что понял это в моем. старый замененный edmx был выбран компилятором по какой-то причине @ # $ @ # $. - person Brady Moritz; 08.08.2010
comment
Думаю, я бы вернулся на несколько шагов назад, если бы просто удалил свой файл .edmx. Это центральное место в моем проекте. - person ProfK; 14.02.2012
comment
Я использую linq для sql, а не linq для объектов. файлы edmx были созданы, когда я пытался создать файл linq to entity. - person benpage; 04.03.2012

В качестве альтернативы вы можете удалить поставщика сборки.

<system.web>
  <compilation debug="true" targetFramework="4.0">
    <buildProviders>
      <remove extension=".edmx"/>
    </buildProviders>
  </compilation>
</system.web>
person roufamatic    schedule 11.04.2012
comment
Сбой с ошибкой: использование раздела, зарегистрированного как allowDefinition = 'MachineToApplication' за пределами уровня приложения, является ошибкой. - person Philipp Munin; 10.06.2014
comment
@PhilippMunin, эта ошибка означает, что файл конфигурации, который вы редактируете, не находится в корневой папке приложения IIS, что обычно либо означает, что вы редактируете неправильный (подпапки иногда тоже получают файлы конфигурации), либо вы не настроили iis для служить вашему проекту в качестве приложения. Дополнительная информация о приложениях: technet.microsoft.com/ ru-us / library / cc771654 (v = ws.10) .aspx - person Tim Abell; 30.10.2014
comment
Просто хотел сказать, что иногда это также связано с файлом веб-конфигурации в вашем каталоге / obj. Просто удалите каталог / obj, и он должен работать. - person Denny Ferrassoli; 19.03.2020

Это полный пример 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>
person Mark    schedule 16.05.2010

У меня была аналогичная ошибка при установке MvcBuildViews="true", которая была связана с тем, что сборка обнаружила несколько web.configs из-за создания временных файлов и просто не понравилась.

Это совершенно другая ошибка, но у меня есть скрытое подозрение, что они могут быть связаны ...

Вы можете найти исходный вопрос, который у меня был здесь, а затем решение, описанное здесь.

Решение в основном позволяет вам изменить путь вывода для ваших сборок ... поэтому вам нужно добавить <BaseIntermediateOutputPath> в файл csproj вашего веб-сайта.

E.g.

<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,
Чарльз

person Charlino    schedule 04.05.2010

Недостаточно репутации, чтобы добавить комментарий. Хотел упомянуть, что вам нужно добавить ссылку на сборку System.Data.Entity.Design в корневой файл Web.config. Я случайно пытался добавить его в Web.config в моем каталоге Views. Остерегайтесь этой ловушки.

person Kyle s    schedule 03.05.2017
comment
Это комментарий или ответ? Если ваше предложение устраняет проблему, с которой столкнулся OP, пожалуйста, отредактируйте это, чтобы он был сформулирован как нормальный ответ, а не попытка обойти правила, требующие от 50 представителей для комментариев. Если это просто комментарий, выдаваемый за ответ, удалите его. Этот ответ в настоящее время находится в очереди на рассмотрение и может быть удален за нарушение правил сайта. - person BSMP; 03.05.2017
comment
Это нарушает правила, требующие от 50 представителей для комментариев. Если бы кто-то мог добавить этот ответ к выбранному ответу в качестве комментария, это было бы очень полезно. Спасибо. - person Kyle s; 03.05.2017