无法添加 MVC 控制器 VS2012 给出"object reference not set to an instance of an object"



我已经广泛搜索过了,在这个星球上找不到另一个有这个问题的人…
症状如下:
在Visual Studio 2012中,在从VS2010升级并配置为从VS2012和VS2010进行双版本编辑的MVC 4.0项目中。当我右键单击Controllers Folder并选择Add->Controller…从上下文菜单中,我从Visual Studio中得到一个"对象引用未设置为对象的实例"错误。

项目中的现有代码运行良好,如果我使用Add->New Item选项,并从对话框中选择Controller,那么我可以添加一个空白控制器。我只是不能使用上面的方法添加一个类型控制器。

但是,如果我创建一个新的MVC4项目,那么我可以使用相同的菜单再次添加类型控制器,因此问题不存在于Visual Studio的安装中,它必须存在于项目文件中。
我还检查了我的项目和新MVC项目之间的引用,所有新项目引用都包含在我的项目中。
有人经历过类似的事情吗?

如何解决这个问题?

这个问题似乎是由MvcScaffolder包的安装/注册不完整引起的。下面的步骤为我解决了问题。

启动Visual Studio并打开项目。打开Package Manager Console。(这是导致解决方案的"技巧"或缺失的信息…)


在这里,我看到了以下由PowerShell脚本引起的错误:
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...>packagesMvcScaffolding.1.0.9toolsregisterWithMvcTooling.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 

所以很明显脚手架被配置为使用mvc脚手架包,但是包有一个注册错误。

快速搜索错误提供了这个链接http://mvcscaffolding.codeplex.com/discussions/437692,该链接指向https://visioautomation.codeplex.com/discussions/397034,建议安装PowerShell 3,它实际上是Windows管理框架3.0的一部分,可从http://www.microsoft.com/en-us/download/details.aspx?id=34595获得。我选择了Windows6.1-KB2506143-x64。因为我运行的是Win 7-64位。

安装完成后重新启动PC,重新打开Visual Studio和项目,查看Package Manager Console。如果错误消失了,那么控制器问题也就消失了。

我在Win8的VS2012上遇到了这个问题,我们在VS2010上开始开发一个项目,我无法用CTRL+M, CTRL+C快捷键创建新的控制器。

打开任何项目并在Manage Nuget包下重新安装MvcScaffolder及其依赖项已经为我修复了这个问题。

根本不需要重启VS2012。

也许你现有的项目在.csproj文件中有错误的ProjectTypeGuids元素?MVC4的右边是{E3E379DF-F4C6-4180-9B81-6769533ABE47}。

尝试比较新项目和现有项目中的项目类型。

安装Windows Management Framework 3.0的首选答案不工作。下载"Windows6.1-KB2506143-x86"。msu在我的Windows 7 32位系统上不起作用。错误提示"此更新不适用于您的计算机"。

重新安装mvc脚手架与管理Nuget包没有工作。

我的ProjectType GUID是正确的。

Microsoft Web Developer Tools已经安装。

删除和重新创建解决方案不起作用。

必须从安装盘修复Visual Studio 2012安装以修复此问题。

安装"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} - Web应用程序项目(这是你需要的Web开发工具)

更新Windows6.1-KB2506143-x64。Msu为我工作。这个问题是在一个完整的间谍软件扫描后开始的。我认为它比平常去掉了更多的东西。所以,回归正常生活。

我有同样的问题,我首先使用数据库,这是因为我已经改变了。edmx上下文。生成context .cs,并将连接名称设置为自定义方法

:基地(sqlHelper.getMainConnectionString ())

每次,在我更改/更新.edmx之前,我需要将连接名称更改为它的创建默认值:

:基地(name = YourWebconfigConnectionstringName)

重建项目,它再次工作

答:

检查webconfig中的connectionstring字符串和provider参数,然后删除并重新创建.edmx。这将强制生成器重新构建所有数据库对象,包括元数据或删除设计器中的所有表,将context .cs更改为默认创建名称,重新构建项目,添加表,重新构建项目,它应该再次工作。

此问题在使用VS2017的目标MVC5项目上表现出来。

像最初的op一样,一个新项目试图用EF脚手架对ApplicationUser执行一个添加控制器。错误最初显示,直到注册单个用户强制创建数据库。之后,添加脚手架工作没有事故。我认为这是有道理的,因为实体在第一次注册之前并不真正存在,尽管如果有比我更有知识的人有更准确的解释,我会纠正的。但是,由于添加控制器与新项目一起工作,就像最初的op确定的那样,它似乎不是VS2017的安装问题。这表明目标项目出了问题。

在目标项目的这一点上,在Team Explorer中执行了撤消所有操作,以使项目恢复到以前的工作点。虽然这可以通过获取特定版本来完成,但对于这个目标项目,所需要的只是撤消全部。一个警告:在这个特定项目的情况下,在撤消之前,使用包管理器将数据库回滚到与撤消全部匹配的起始点。如果执行get特定版本,一定要检查数据库是否需要回滚到正确的配置。重置所有项目更改后,在Add Controller操作期间不再出现object reference not set to an instance of an object错误,将错误固定在目标项目中。

我发布这个响应有点不情愿,因为我无法复制错误,我不确定到底是什么导致了问题放在第一位,但这是一个特别讨厌的错误,如果一个是在一个项目的中间,添加控制器开始失败。我想如果有人有这个问题,回滚当前的更改集可能会为他们解决这个问题,他们会像我一样感激。如果我后来确定了导致问题首先出现的活动模式,我肯定会在这篇文章中添加更多内容。

我运行的是VS 2019 Enterprise, ASP。. NET Core 3.1.3.

我试图添加MVC控制器与视图使用实体框架(EF)在数据库第一方法脚手架后

我运行这个问题,因为我的ER模型中的一个表缺少主键。

该表连接到表,我试图通过另一个表生成MVC控制器,有主键,所以我没有注意到最初的错误。

相关内容

最新更新