Невозможно добавить 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, исправляя ошибку в целевом проекте.
Я откладываю этот ответ несколько неохотно, потому что я не могу повторить ошибку, и я не уверен, что на самом деле вызвало проблему в первую очередь, но это особенно неприятная ошибка, если вы находитесь в середине проекта и Ошибка добавления контроллера. Я решил, что если у кого-то есть эта проблема и откат текущего набора изменений может исправить это для них, как и я, они будут благодарны. Если позже я определяю структуру деятельности, которая вызвала возникновение проблемы в первую очередь, я обязательно добавлю к этому сообщению больше.