Произошла ошибка при запуске выбранного генератора кода в скаффолдинге VS 2013.

Я создаю новый вид модели.
Я получаю сообщение об ошибке

Ошибка
Произошла ошибка при запуске выбранного генератора кода:
'Доступ к пути
'C:\Users\XXXXXXX\AppData\Local\Temp\SOMEGUID\EntityFramework.dll' запрещен '.

Я запускаю VS 2013 от имени администратора.

Я посмотрел на Совместим ли MvcScaffolding с VS 2013 RC по команде line? но это, похоже, не решило проблему.

VS2013 C#5 MVC5 Совершенно новый проект, запущенный в VS 2013.


person Brian Webb    schedule 12.11.2013    source источник
comment
Обратите внимание, что ответ на этот вопрос был дан несколько раз ниже. Включая то, что я обнаружил в качестве решения для моей конкретной проблемы, которую я пометил как ответ. Но спасибо за постоянную обратную связь, так как похоже, что это помогает и другим разработчикам.   -  person Brian Webb    schedule 03.04.2015
comment
Кстати, я получил эту ошибку в VS2017, потому что мой класс использовал свойства с телом выражения (т.е. public string FirstName => "Name"; против public string FirstName { get { return "Name"; }; })   -  person KyleMit    schedule 01.11.2017
comment
Эта проблема была исправлена ​​в VS 2019 16.0.3 (docs.microsoft.com/en-gb/visualstudio/releases/2019/)   -  person Mariusz    schedule 01.05.2019
comment
Отвечает ли это на ваш вопрос? Ошибка: сбой восстановления пакета   -  person Sayyed Dawood    schedule 28.04.2021


Ответы (25)


Ошибка VS2013: произошла ошибка при запуске выбранного генератора кода: «Конфигурация для типа «SolutionName.Model.SalesOrder» уже добавлена...»

У меня возникла эта проблема во время работы над курсом Pluralsight «Родительско-дочерние данные с EF, MVC, Knockout, Ajax и проверкой». Я пытался добавить Новый шаблонный элемент, используя шаблон Контроллер MVC 5 с представлениями, используя Entity Framework.

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

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

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

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

person Bill B    schedule 16.08.2014
comment
Если возможно, вы можете перейти на EF 6. Очевидно, в процесс OnModelCreating были внесены некоторые изменения, которые делают кодирование для него более надежным. Я заметил, что в моих новых библиотеках моделей у меня нет проблем с процессом OnModelCreating. - person Brian Webb; 18.08.2014
comment
Я следую тому же курсу, что и выше, но использую EF 6 (и VS 2013). И я получаю ту же ошибку. В приведенном выше шаге 1 не забудьте перестроить решение после комментирования OnModelCreating, иначе он не создаст новый шаблонный элемент. - person olf; 13.09.2014
comment
Этот конкретный ответ и особенно комментарий olf выше разблокировали меня в том же учебнике. Спасибо за добавление комментариев здесь. - person etechpartner; 05.09.2015

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

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

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

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

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

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

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

person Brian Webb    schedule 22.01.2014
comment
Убедитесь, что у вас все проверено, и если ваше решение состоит из нескольких проектов, то каждый проект также должен будет обновить свои зависимости. Затем повторите попытку. Подавляющее большинство людей, которые пробовали это, работает, поэтому есть вероятность, что у вас есть файл или что-то, что все еще заблокировано и мешает этому исправлению работать. - person Brian Webb; 06.11.2015
comment
Удаление пакетов также помогло мне. Ни одно из других решений, перечисленных здесь или в других ответах на тот же вопрос, не сработало. - person jimboweb; 08.12.2016

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

На моем уровне доступа к данным была установлена ​​Entity Framework v6.0.2 с использованием NuGet, в веб-проекте не была установлена ​​Entity Framework. При попытке создать контроллер веб-API с шаблоном Entity Framework Entity Framework устанавливается автоматически, но это одна из более старых версий 6.0.0. Я был удивлен, увидев две установленные версии Entity Framework: более новую в моем проекте уровня данных и более старую в моем веб-проекте. Однажды я удалил старую версию и установил новую версию в веб-проекте, и проблема исчезла.

person isingh    schedule 07.03.2014
comment
Ну у меня в солюшене только один проект. - person Stack0verflow; 05.11.2015
comment
Я проверил версии, и в любом случае они были точно такими же, в проекте веб-API я удалил ссылку на EntityFramework и EntityFramework.SqlServer и снова добавил их, после чего все заработало нормально. - person Saeedouv; 14.02.2016

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

Решение:

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

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

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

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

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

Вуаля! (для меня)

person erikrunia    schedule 13.05.2015

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

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

person Moslem Ben Dhaou    schedule 25.05.2014
comment
Не в моем случае. Если вы посмотрите на то, что было помечено как ответ, это было несоответствие зависимостей. Это было решено путем очистки кеша nuget и загрузки только последней версии каждой библиотеки для сборок. Хотя я вижу, где в вашем случае может быть поврежден файл web.config. - person Brian Webb; 26.05.2014
comment
это был ответ для меня. Мой configSections не был первым дочерним узлом узла конфигурации (я втиснул туда узел connectionStrings). Конечно, VS2015 не помог с неоднозначным сообщением об ошибке. Я не понял этого, пока не отменил изменения web.config. - person Tom McDonald; 07.12.2016

У меня точно такая же проблема. Впервые столкнулся с этим, следуя курсу Pluralsight «Родительско-дочерние данные с EF, MVC, Knockout, Ajax и проверкой».

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

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

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

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

//To
public IDbSet SalesOrders { get; set; }
person scyu    schedule 14.11.2014

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

person Gerrie Pretorius    schedule 06.03.2014

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

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

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

person Jim Taliadoros    schedule 12.08.2014
comment
Это не ошибка. OnModelCreating описывает вашу модель в среде EF, поэтому он знает, как с ней работать. Даже если вы не используете эту функцию, она все равно упоминается под капотом. Вот почему DbModelBuilder передается как часть вызова функции. Затем вы можете использовать modelBuilder для расширения различных сущностей, с которыми вы работаете. Эти описания охватывают такие вещи, как каскадные обновления и необязательные ссылки, определенные в вашей схеме. - person Brian Webb; 12.08.2014
comment
То, что вы описали, было не проблемой формирования шаблонов, а проблемой пост-скаффолдинга, когда вы вводили свою собственную ошибку в код, переопределяя метод OnModelCreating. Тем не менее, я надеюсь, что это поможет другим людям предупредить об этом риске. Так что спасибо за публикацию. - person Brian Webb; 12.08.2014

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

person Lindsey    schedule 21.11.2013

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

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

Что сработало для нас (используя VS 2013 Express для Интернета в 64-битной Windows 7):

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

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

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

person DWright    schedule 07.03.2015

Произошла ошибка при запуске выбранного генератора кода:
'Не удалось обновить информацию о зависимостях для проекта. Пожалуйста, восстановите проект и повторите попытку».

Шаги:

  1. Перейдите в свой проект и обновите все пакеты NuGet до последней версии.
  2. Создайте свое приложение до успеха сборки.
  3. Закройте решение и снова откройте его.
  4. И попробуйте добавить файл, такой как контроллер, класс и т. Д.

картинка с ошибкой

person Manjunath K    schedule 02.08.2019

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

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

Как только я избавился от объявления IndexAttribute, я смог добавить контроллер API для модели, которая содержала оскорбительное свойство (NumTrainingPasses).

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

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

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

person Robert Oschler    schedule 15.07.2015

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

Перестройте решение и выполните поиск в разделе «Ошибки», вкладка «Сообщения». Если у вас есть какие-либо проблемы с форматом в файле web.config, вы увидите его там. Исправьте это и повторите попытку.

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

person Marko    schedule 12.12.2016

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

Я обнаружил, что построитель моделей MVC 5 и EF 6 не являются хорошими друзьями:

Мое решение:

  1. Закомментируйте modelBuilder в вашем классе Context.
  2. Чистое решение, восстановление решения.
  3. Добавить представление и контроллер через строительные леса
  4. Раскомментируйте построитель моделей.
person freddy    schedule 15.05.2016

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

person Adam Marshall    schedule 03.02.2014

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

person John S    schedule 06.12.2014

У меня также возникла эта проблема с 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).

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

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

person jmcm    schedule 25.02.2015

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

  • Моя область
    | - File.cs (пытался создать здесь новый скаффолд. Ошибка.)

Я просто повторно выбрал свою область, и проблема исчезла:

  • AyArea (Добавить => новый элемент лесов)

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

person P.Brian.Mackey    schedule 20.04.2015

  • vs2013 обновление 4
  • ef 5.0.0
  • ibm db2connector 10.5 fp 5

измените файл web.config как таковой: удалили провайдеров из тега ef:

<entityFramework>
</entityFramework>

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

</configSections>
<connectionStrings>
<add name=".." connectionString="..." providerName="System.Data.EntityClient" />
</connectionStrings>
person gummylick    schedule 28.06.2015

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

person Iwona Kubowicz    schedule 15.11.2015

В моем случае я пытался создать элементы Identity, и ничего из вышеперечисленного не сработало. Решение состояло в том, чтобы просто открыть Visual Studio с правами администратора.

person Hugo Nava Kopp    schedule 08.01.2020
comment
В вопросе говорится, что OP уже использует VS в качестве администратора. - person TylerH; 23.11.2020

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

person simon9k    schedule 10.09.2014
comment
Просто добавление перестроения по какой-то причине дважды решило это для меня. Похоже, что ошибка очень универсальна, так как многие разные ответы, похоже, решают ее, в чем заключается ошибка. - person Phil3992; 07.04.2017

У меня была эта проблема в VS 2017. У меня была цель платформы (в свойствах проекта > Сборка > Общие), установленная на «x64». Скаффолдинг начал работать после изменения его на «Любой процессор».

person billw    schedule 27.03.2019

Это может быть связано с различиями в версиях пакетов nuget. Посмотрите, есть ли это у вас, перейдя в папку dependencies->nuget packages в вашем решении. Попробуйте установить их все одной версии и перезапустите визуальную студию после очистки папки componentmodelcache, как указано выше. Это должно сделать работу за вас.

person shashi kumar    schedule 30.05.2020
comment
Это было решено и закрыто несколько лет назад. Это было вызвано блокировкой файла из системы контроля версий. - person Brian Webb; 17.06.2020