Невозможно добавить MVC-контроллер VS2012 дает ссылку на объект, не установленную на экземпляр объекта "

Я искал экстенсивно и не могу найти другого человека на планете с этой проблемой...
Симптомы:
В Visual Studio 2012, в проекте MVC 4.0, который был обновлен с VS2010 и настроен для редактирования двух версий из VS2012 и VS2010. Когда я нажимаю правой кнопкой мыши на папке Controllers и выбираю Add- > Controller... из контекстного меню, я получаю ошибку" Object reference not set to the instance of the object "из Visual Studio.

Существующий код в проекте выполняется нормально, и если я использую опцию Add- > New Item вместо этого и выбираю Controller из диалогового окна, тогда я могу добавить пустой контроллер. Я просто не могу добавить типизированный контроллер, используя вышеописанный метод.

Однако, если я создаю новый проект MVC4, я могу снова добавить типизированные контроллеры с использованием того же меню, поэтому проблема не существует в установке Visual Studio, она должна существовать в файле проекта.
Я также проверил ссылки между моим проектом и новым проектом MVC, и все новые ссылки на проекты включены в мой проект.
Кто-нибудь испытал что-то подобное?

Как сделать Я исправить это?

Ответы

Ответ 1

Проблема, похоже, была вызвана неполной установкой/регистрацией пакета MvcScaffolder. Следующий процесс разрешил мою проблему для меня.

Запустите Visual Studio и откройте проект. Откройте консоль диспетчера пакетов. (Это был "трюк" или недостающая часть информации, которая привела к решению...)

Здесь я увидел следующую ошибку, вызванную PowerShell script, используемую для регистрации:

New-Object : Could not load file or assembly 'System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
At <ProjectPath...>\packages\MvcScaffolding.1.0.9\tools\registerWithMvcTooling.ps1:163 char:27
+     $newProvider = New-Object <<<<  $powerShellScaffolderProviderType($mvcScaffoldingProvider)
    + CategoryInfo          : NotSpecified: (:) [New-Object], FileNotFoundException
    + FullyQualifiedErrorId : System.IO.FileNotFoundException, Microsoft.PowerShell.Commands.NewObjectCommand

Когда я проверил зарегистрированные леса из консоли диспетчера пакетов, я получил:

PM> get-defaultscaffolder

DefaultName          ScaffolderName
Action               MvcScaffolding.Action
Controller           MvcScaffolding.Controller
CustomScaffolder     T4Scaffolding.CustomScaffolder
CustomTemplate       T4Scaffolding.CustomTemplate
DbContext            T4Scaffolding.EFDbContext
Mailer               Mailer.Razor
Repository           T4Scaffolding.EFRepository
UnitTest             MvcScaffolding.ActionUnitTest
View                 MvcScaffolding.RazorView
Views                MvcScaffolding.Views 

Так ясно, что в scaffolders настроено использование пакета MvcScaffolding, но у пакета была ошибка регистрации.

Быстрый поиск ошибки при условии, что эта ссылка http://mvcscaffolding.codeplex.com/discussions/437692, которая ссылается на https://visioautomation.codeplex.com/discussions/397034, который предлагает установить PowerShell 3, который фактически является частью Windows Management Framework 3.0, доступный из http://www.microsoft.com/en-us/download/details.aspx?id=34595, Я выбрал файл Windows6.1-KB2506143-x64.msu при появлении запроса, потому что Im работает с Win 7-64-бит.

Перезагрузите компьютер после установки, заново откройте Visual Studio и проект и посмотрите консоль диспетчера пакетов. Если ошибка исчезла, значит, проблема с контроллером.

Ответ 2

У меня была эта проблема на VS2012 на Win8, мы, где работа над проектом, который мы начали разрабатывать на VS2010 и i, не смогли создать новые контроллеры с помощью сочетания CTRL + M, CTRL + C.

Открытие любого проекта и повторная установка MvcScaffolder и его зависимостей в пакете Manage Nuget исправили это для меня.

Не нужно было перезапускать VS2012 вообще.

Ответ 3

Возможно, ваш существующий проект имеет неправильный элемент ProjectTypeGuids в файле .csproj? Правым для MVC4 является {E3E379DF-F4C6-4180-9B81-6769533ABE47}.

Попробуйте сравнить, какой тип проекта у вас есть в новом проекте и в вашем существующем проекте.

Ответ 4

Установка "Microsoft Web Developer Tools" исправила это для меня. Связанный:

Как открыть csproj с помощью ProjectTypeGuids 349c5851-65df-11da-9384-00065b846f21?

  • {E3E379DF-F4C6-4180-9B81-6769533ABE47} - Проект MVC4
  • {fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Проект CSharp
  • {349c5851-65df-11da-9384-00065b846f21} - Проект веб-приложений (для этого вам нужны инструменты веб-разработки)

Ответ 5

Обновление для Windows6.1-KB2506143-x64.msu работало для меня. Проблема началась после полного сканирования программного обеспечения SpyWare. Я думаю, что он удаляет больше вещей, чем обычно. Итак, вернемся к нормальной жизни.

Ответ 6

Рекомендуемый ответ на установку Windows Management Framework 3.0 не помог. Загрузка "Windows6.1-KB2506143-x86.msu" не работала на моей 32-разрядной системе Windows 7. Ошибка с ошибкой "Обновление не применимо к вашему компьютеру".

Повторная установка MVC-панелей с помощью пакетов управления пакетами не работает.

Мой идентификатор GUID ProjectType был правильным.

Microsoft Web Developer Tools уже установлен.

Удаление и повторное создание решения не сработало.

Для исправления этой проблемы необходимо было отремонтировать установку Visual Studio 2012 с установочного диска.

Ответ 7

У меня была та же проблема: сначала я использовал базу данных, а потому, что я изменил .edmx contex.tt, чтобы сгенерировать contex.cs с именем соединения, настроенным на собственный метод,

: base (sqlHelper.getMainConnectionString())

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

: base ( "name = YourWebconfigConnectionstringName" )

перестроить проект, и он снова работает

Ответ:

Проверьте параметры строки подключения и поставщика на веб-сервере, затем удалите и заново создайте .edmx, это заставит генератор перестроить все объекты базы данных, включенные метаданные ИЛИ удалить все таблицы в конструкторе, изменить contex.cs на имя создания по умолчанию, перестроить проект, добавить таблицы, перестроить проект, снова залить его.

Ответ 8

Эта проблема проявляется в целевом проекте MVC5 с использованием VS2017.

Как и исходный op, в новом проекте была предпринята попытка выполнить добавление контроллера с EF-лесами против ApplicationUser. Ошибка сделана изначально манифеста, пока не был зарегистрирован один пользователь, заставляющий базу данных быть создан. После этого добавьте строительные леса без инцидентов. Я думаю, что это имеет смысл, потому что сущность еще не существовала до первой регистрации, хотя я буду исправлена, если у кого-то более осведомленного, чем у меня, есть более точное объяснение. Но поскольку Add Controller работал с новым проектом, так же, как и определил оригинальный op, это, похоже, не проблема установки VS2017. Это указывало на что-то неладное с проектом тарет.

На этом этапе целевого проекта было выполнено Отменить все в Team Explorer, чтобы вернуть проект к предыдущей рабочей точке. Хотя это может быть достигнуто путем получения конкретной версии, для этого целевого проекта все, что требовалось, было Отменить все. Предупреждение: в случае этого конкретного проекта, прежде чем отменить, Диспетчер пакетов был использован для отката базы данных в исходную точку, которая соответствовала бы Отменить все. Если вы выполняете определенную версию, обязательно проверьте, нужно ли возвращать базу данных в нужную конфигурацию. После сброса всех изменений проекта ошибка object reference not set to an instance of an object больше не присутствовала во время операции Add Controller, исправляя ошибку в целевом проекте.

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