32

Я создаю новый вид модели.
Сообщение об ошибке я получаю«Произошла ошибка при работе с генератором выделенного кода» в лесах VS 2013

Error
There was an error running the selected code generator:
'Access to the path
'C:\Users\XXXXXXX\AppData\Local\Temp\SOMEGUID\EntityFramework.dll' is denied'.

Я бегу VS 2013 в качестве администратора.

Я посмотрел на Is MvcScaffolding compatible with VS 2013 RC by command line?, но это, похоже, не решило проблему.

VS2013 C# 5 MVC5 Новый проект стартовал в VS 2013.

+0

Обратите внимание, что это был дан ответ ниже в несколько раз. Включая то, что я обнаружил как решение для моей конкретной проблемы, которое я отметил как ответ. Но для постоянной обратной связи, так как это похоже на то, что это помогает и другим разработчикам. – Brian

+0

BTW, я получил эту ошибку в VS2017, потому что мой класс использовал ** свойства с выражением ** (т.е. 'public string FirstName =>" Name ";' vs 'public string FirstName {get {return" Name ";}; } ') – KyleMit

ответ

15

Проблема была с поврежденным web.config и каталогом пакетов.

Я создал новый проект и скопировал свои файлы кода в новый рабочий проект, позже я вернулся и выполнил разницу между конфигурационными файлами и папкой diff на самом проекте.

Проблема заключалась в том, что обновления сильно загрузили мой файл конфигурации с множеством артефактов обновления, которые я закончил очищать.

Вторая проблема заключалась в том, что старый проект также продолжал висеть на более старых DLL, которые должны были быть уничтожены приложением пакета Nuget. Поэтому я уничтожил папки obj и bin, а затем папку пакета. После этого я смог восстановить старый проект и построить его чисто.

Я не изучал, почему конфигурационный файл или папка пакета были настолько оборваны, но я предполагаю, что это одна из двух вещей.

  1. Возможно NuGet пакет имеет недостаток
  2. управления источником TFS заблокирован NuGet от правильно обновления различных зависимостей.

С тех пор, прежде чем применять какие-либо обновления, я проверю все. Однако, поскольку я не обновлял EF через некоторое время, я не подтверждаю, что это разрешило проблему EF или леса.

+2

Я удалил пакеты, и он снова работает! Большое спасибо! – JDeuker

+0

Я пробовал, но это не помогает. – Stack0verflow

+0

Убедитесь, что у вас все проверено, и если ваше решение составлено из нескольких проектов, то каждый проект также должен будет обновить его зависимости. Затем повторите попытку. Подавляющее большинство людей, которые пробовали это, работают, поэтому есть вероятность, что у вас есть файл или что-то еще заблокированное, и предотвращение этой коррекции. – Brian

1

Я видел эту ошибку с новым проектом MVC5 при ссылке на модель из другого проекта. Проверка пути, EntityFramework.dll действительно существует. Это было только для чтения. Монитор процесса показал, что произошла ошибка при попытке удалить файл. Установка EntityFramework.dll в папке моих пакетов (копия, хранящаяся в исходном элементе управления) для записи, обходилась вокруг этой ошибки, но привела еще одну, заявив, что она не может загрузить сборку EntityFramework, потому что она не соответствует той, на которую ссылаются. Мой класс модели был определен в другом проекте, который использовал более старую версию инфраструктуры сущности. Проект MVC5 ссылался на EF 6, в то время как модель была из проектных ссылок EF 4.4. Модернизация до EF 6 в проекте модели исправила его для меня.

0

В случае, если это кому-то поможет, я переименовал пространство имен, в котором находилась модель, а затем перестроил проект, затем переименовал его обратно и перестроил, а затем он сработал.

1

То, что сработало для меня, чтобы решить эту: Закрыть решение, и открыть проект, щелкнув файл проекта, а не файл решения, добавьте контроллер, и качается твой дядя

+2

Не работал для меня. –

12

Я был в состоянии решить эту проблему и иметь немного лучше понимая, что происходит. Самое приятное то, что я могу воссоздать проблему и исправить ее, чтобы быть уверенным в моем объяснении здесь. Решением было установить точно такую ​​же версию Entity Framework как для проекта Data Access Layer, так и для Web Project.

На моем уровне доступа к данным был установлен Entity Framework v6.0.2 с использованием NuGet, в веб-проекте не было установлено Entity Framework. При попытке создать контроллер веб-API с шаблоном Entity Framework Entity Framework устанавливается автоматически, но его старая версия 6.0.0. Я был удивлен, увидев, что две версии Entity Framework установлены, новее в моем проекте Data Layer и старше в моем веб-проекте. Однажды я удалил старую версию и установил новую версию в Web Project, проблема исчезла.

+0

это правильный ответ для меня – lawphotog

+0

Ну, у меня есть только один проект в решении. – Stack0verflow

+0

Я проверил версии, и все было точно так же, во всяком случае, в проекте web api я удалил ссылку на EntityFramework и EntityFramework.SqlServer и повторно добавил их, тогда все сработало нормально – Saeedouv

9

Я проверил все свои проекты, и каждый из них имел ту же версию Entity Framework. В моем случае проблема заключалась в том, что один из моих проектов был нацелен на .Net 4.0, в то время как остальные были .Net 4.5.

Решение:

  1. Для каждого проекта в решении Проект-> свойства-> Application: Set Target Framework для .Net 4.5 (или все, что нужно).
  2. Инструменты-> Управление пакетом NuGet для решения. Найти установленную «Entity Framework». Нажмите «Управление». Снимите отметку со всех проектов (обратите внимание на проекты, требующие EF). Теперь переустановите EF и проверьте, какие проекты вам нужны.
  3. Очистка и восстановление решения.
+0

это сработало для меня, спасибо – Xoundboy

4

Это обычно вызвано недопустимым Web.config файлом. У меня была та же проблема, и оказалось, что я случайно поменял блок комментариев HTML <!-- --> на блок комментариев на стороне сервера @* *@ (посредством действия «Заменить все»).

И в случае, если вы разрабатываете приложение WinForms, попробуйте посмотреть на App.config.

+0

Не в моем случае. Если вы посмотрите на то, что было помечено как ответ, это было несоответствие зависимостей. Он был решен путем очистки кеша nuget и загрузки только последней из каждой библиотеки для сборок. Хотя я могу видеть, где ваш случай может быть поврежденным файлом web.config. – Brian

+0

Это был ответ для меня. Спасибо :-) –

+0

Это был ответ для меня. Мои конфигурации не были первым дочерним узлом узла конфигурации (я сжал узел connectionStrings там). Конечно, VS2015 не оказал никакой помощи в неоднозначном сообщении об ошибке. Я не понял это, пока не отключу изменения web.config. –

2

Ничто из перечисленного не помогло мне.

Я обнаружил, что причиной моей проблемы было переопределение OnModelCreating в моем классе контекста, на который зависел элемент эшафота. Прокомментировав этот метод, затем строительные леса.

Я действительно хочу, чтобы Microsoft выпустила меньше багги кода.

+0

Это не ошибка. OnModelCreating описывает вашу модель в структуре EF, поэтому она знает, как с ней работать. Даже если вы не используете эту функцию, она по-прежнему ссылается под капотом. Вот почему DbModelBuilder передается как часть вызова функции. Затем вы можете использовать modelBuilder для расширения различных объектов, с которыми вы работаете. Эти описания охватывают такие вещи, как каскадные обновления и необязательные ссылки, как определено в вашей схеме. – Brian

+0

То, что вы описали, не было проблемой для строительных лесов, но проблема с эстафетами, когда вы ввели свою ошибку в код, переопределив OnModelCreating. Хотя, надеюсь, это даст другим людям возможность справиться с этим риском. Так спасибо за публикацию. – Brian

+0

Это была проблема для меня. Я бы никогда не нашел его, так что спасибо. – Joel

23

VS2013 Error: There was an error running the selected code generator: ' A configuration for type 'SolutionName.Model.SalesOrder' has already been added ...'

Я имел эту проблему при работе через Pluralsight курс "родитель-потомок данных с EF, MVC, Нокаут, Ajax и проверка". Я пытался добавить Новый элемент подкласса с помощью шаблона MVC 5 Controller с представлениями, используя Entity Framework.

Класс контекста данных, который я использовал, включая переопределение метода OnModelCreating. Для переопределения требовалось добавить некоторые явные конфигурации столбцов базы данных, где значения по умолчанию EF были недостаточными. Это переопределение было простым, обработанным и отсутствием ошибок, но (как отмечено выше) оно мешало генерации кода подсистемы Controller.

Решение, которое работало для меня:

1 - я удалил (закомментирована) мой OnModelCreating переопределение и шаблон подмости завершен без каких-либо сообщений об ошибках - мой код контроллера был создан, как и ожидалось.

2 - Однако попытка создания проекта задохнулась, потому что «Модель изменилась». Поскольку мой код контроллера был теперь правильно сгенерирован, я восстановил (не комментировал) переопределение OnModelCreating и проект был построен и успешно запущен.

+0

Если возможно, вы можете переключиться на EF 6. По-видимому, в процесс OnModelCreating произошли некоторые изменения, которые делают его более надежным. Я заметил, что на моей новой модели libs у меня нет проблем с процессом OnModelCreating. – Brian

+4

Я следую тому же курсу, что и выше, но с использованием EF 6 (и VS 2013). И я получаю ту же ошибку. На вышеприведенном шаге 1 не забудьте перестроить решение после комментирования OnModelCreating или он не создаст новый элемент подкладок. – olf

+0

Этот конкретный ответ и особенно комментарий olf выше разблокировали меня в том же учебнике. Спасибо, что добавили комментарии здесь. – etechpartner

0

Реконструкция решения работает для меня. перед восстановлением я нахожу ссылки на номер моего «ApplicationDbContext» равным нулю, что невозможно, поэтому переустановите решение, теперь все в порядке.

+0

Просто чтобы добавить перестройку, почему-то дважды разрешили это для меня.Похоже, что ошибка очень интересна, так как многие разные ответы, похоже, разрешают ее, что apprenelty является ошибкой. – Phil3992

4

У меня такая же проблема. Сначала столкнулся с этим, следуя по курсу Pluralsight «Данные родительского ребенка с EF, MVC, Knockout, Ajax и Validation».

Я использую MVC 5, EF 6.1.1 и фреймворк 4.5.2.

Даже после обновления моего VS2013 до обновления 4 эта ошибка по-прежнему сохраняется.

Удалось устранить эту неприятную проблему, изменив DbSet на IDbSet внутри класса DbContext. Отправлено: here.

//From 
public DbSet SalesOrders { get; set; } 

//To 
public IDbSet SalesOrders { get; set; } 
0

Я часто впадать в эту ошибку работы с MVC5 и EF, когда я создаю модели и контекст в виде отдельного проекта (мой уровень доступа к данным), и я забыл добавить строку контекста подключения к веб-проекта MVC в. Config.

0

Я также имею этот вопрос с MSVS2013 Update 4 и EF 6.0 Сообщение, которое я получал был:

there was an error running the selected code generator. 
A configuration for type XXXX has already been added ...[] 

я модель с около 10 классов. Я без каких-либо проблем набросал элементы в начале проекта.

Через несколько дней, добавив функциональность, я попытался выставить еще один класс из модели, но ошибка не позволяла мне это делать.

Я попытался обновить MSVS от обновления 2 до обновления 4, прокомментировать мой метод OnModelCreating и другие идеи, предложенные без везения.

Как временный путь для продолжения проекта, я создал другой проект asp.net, вставил туда свои классы моделей (я использую свободно api, поэтому на них мало комментариев) и успешно создал мой контроллер и просмотры ,

После этого я вставил созданные классы в исходный проект и исправил некоторые ошибки (в основном имена dbset).

Кажется, что работает, хотя я полагаю, что все равно найду ошибки, связанные с отношениями между классами (из-за отсутствия свободной конфигурации при создании).

Я надеюсь, что это поможет другим пользователям.

2

Для нас это имеет какое-то отношение к сборке конфигураций, где у нас есть конфигурация сборки Debug | x64, которую мы недавно переключили на использование, которая, казалось, выглядела, когда строительные леса перестали работать.

(Я подозреваю, что есть по меньшей мере 10 различных вещей, которые могут вызвать это, о чем свидетельствуют различные ответы на SO, которые некоторые люди находят для них, но которые не работают для других, m, не предполагая, что мое решение будет работать для всех).

То, что сработало для нас (с помощью VS 2013 Express, для Web на 64-битной ОС Windows 7):

It (подмостей) был НЕ работать в Debug | конфигурации x64 сборки. Но делать следующее (и кажется, что каждый шаг необходим - не мог бы понять, как это сделать более оптимизированным образом), похоже, работает на нас.

  1. Сначала переключитесь на Debug | x86 - используйте Solution (щелкните правой кнопкой мыши) Configuration Manager для всех проектов вашего решения. (Отладка | Любой процессор также может работать).
  2. Очистите ваше решение.
  3. Завершить работу Visual Studio. (не могу заставить его работать, если я пропущу это).
  4. Открыть Visual Studio.
  5. Откройте свое решение.
  6. Постройте свое решение.
  7. Теперь попробуйте добавить элементы леса; для нас это сработало на этом этапе, мы больше не получили сообщение об ошибке, говорящее о «Произошла ошибка при работе с генератором выбранного кода».

Если вам нужно переключиться на конфигурацию нерабочей сборки, вы можете сделать это, после того, как вы поднимете все, что вам нужно на данный момент. Мы вернулись к нашему Debug | x64 после строительных лесов, что нам нужно.

+0

Спустя 9 месяцев мне просто пришлось попробовать это снова, и это сработало снова. Поэтому, не говоря о том, что это решает все проблемы, но это определенно стоит попробовать. – DWright

0

Это случилось со мной, когда я попытался создать новый эшафот за пределами папки верхнего уровня для заданного Area.

  • MyArea
    | - File.cs (.. Попытался создать новый эшафот здесь Failure)

Я просто повторно выбрал мой район и проблема ушла:

  • AyArea (Add => новый элемент строительных лесов)

Обратите внимание, что после создания эшафотов вы попадаете в место, где вы не сможете создать новый эшафот без предварительного выбора области сначала (в VS 2013 как минимум).

6

Я пробовал каждый ответ на каждом сайте, который я нашел, и ничего не работало ... до этого. Проводка в конце, если кто-то, как я, приходит и имеет тот же самый неприятный опыт, что и у меня.

Моя проблема была похожа на многие здесь, общее сообщение об ошибке при попытке использовать строительные леса, чтобы попытаться добавить новый контроллер (ef6, webapi). Сначала я смог использовать строительные леса примерно для 15 контроллеров, после чего он просто прекратил работать один день.

Окончательное решение:

  1. Откройте рабочую папку на жестком диске для вашего решения.
  2. Удалить все в папке BIN
  3. Удалить все внутри папки OBJ
  4. Очистить решение, Rebuild Solution, добавить контроллер с помощью строительных лесов

Voila! (Для меня)

+0

К сожалению, это не решение для меня. –

+1

есть около 20 различных возможных причин для этой проблемы, которые я прошел, прежде чем найти это. это всего лишь один, который я поставил там, чтобы помочь в поисках других людей в этой яме отчаяния. У вас может быть больше удачи с одним из других 19. Счастливая охота и удача :-) – erikrunia

0
  • обновление vs2013 4
  • эф 5.0.0
  • db2connector 10.5 IBM FP 5

изменения файла web.config как таковой: удаляется поставщик/с от эф тег:

<entityFramework> 
</entityFramework> 

добавил строковые теги подключения в разделах конфигурации:

</configSections> 
<connectionStrings> 
<add name=".." connectionString="..." providerName="System.Data.EntityClient" /> 
</connectionStrings> 
1

У меня была эта проблема при попытке добавить Api-контроллер в мое веб-приложение MVC ASP.NET по совершенно другой причине, чем другие ответы. Я случайно включил StringLength атрибут с IndexAttribute декларации для целого свойства из-за копирования и вставки операции:

[Index] 
[IndexAttribute("NumTrainingPasses", 0), StringLength(50)] 
public int NumTrainingPasses { get; set; } 

После того, как я избавилась от IndexAttribute декларации я был в состоянии добавить Api Controller для модели, которая содержит оскорбительное свойство (NumTrainingPasses).

Чтобы помочь поисковым системам, здесь полное сообщение об ошибке я получил, прежде чем я исправил проблему:

Была ошибка запуска выбранного генератора кода:

Невозможно получить метаданные 'Owner.Models.MainRecord. Свойство
«NumTrainingPasses» не является массивом String или Byte. Длина может быть только , настроенная для свойств массива String или Byte.

0

У меня была такая же проблема, когда в моем MVC приложении EF reference property (в окне свойств) «Конкретная версия» была отмечена как False и в моем другом проекте (содержащем DBContext и models), который был опечатан с помощью приложения MVC, которое EF ссылочное свойство было отмечено как True. Когда я обозначил это как ложь, все было в порядке.

0

Я знаю, что я поздно, но это было так неприятно, поэтому я надеюсь, что это может помочь немного ...

Моего вопроса был похож на многий опыт здесь, общее сообщение об ошибке при попытке добавить новый вид или использовать строительные леса для добавления нового контроллера.
я узнал, что 5 и MVC эф 6 ModelBuilder не являются хорошими друзьями:

Мое решение:
1.Comment из MODELBUILDER в классе Context.
2.Clean решение, перестроить решение.
3.Add view and Controller через строительные леса
4.Uncomment modelbuilder.

Может быть, немного нетрадиционным - но это сработало! (Для меня)

1

Это обычно связано с форматом вашего Web.config

Перестроить решение и поиск по ошибок, вкладка Messages. Если у вас есть какие-либо проблемы с форматом с помощью web.config, вы увидите его там. Исправьте его и повторите попытку.

Пример: У меня был connectionstring вместо connectionString