我进行了广泛的搜索,但在这个星球上找不到另一个人有这个问题......
症状是:
在 Visual Studio 2012 中,在从 VS2010 升级并配置为从 VS2012 和 VS2010 进行双版本编辑的 MVC 4.0 项目上。当我右键单击控制器文件夹并从上下文菜单中选择添加->控制器...时,我从 Visual Studio 收到“对象引用未设置为对象的实例”错误。
项目中的现有代码运行良好,如果我改用 Add->New Item 选项,并从对话框中选择 Controller,那么我可以添加一个空白控制器。我只是无法使用上述方法添加类型控制器。
但是,如果我创建一个新的 MVC4 项目,那么我可以使用相同的菜单再次添加类型控制器,因此 Visual Studio 的安装中不存在问题,它必须存在于项目文件中。
我还检查了我的项目和新 MVC 项目之间的引用,并且所有新项目引用都包含在我的项目中。
有没有人经历过类似的事情?
我该如何解决?
9 回答
该问题似乎是由 MvcScaffolder 包的安装/注册不完整引起的。以下过程为我解决了我的问题。
启动 Visual Studio 并打开项目。打开包管理器控制台。(这是导致解决方案的“技巧”或缺失的信息......)
在这里,我看到了由用于注册的 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...>\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
很明显,脚手架配置为使用 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 文件,因为我运行的是 Win 7-64 位。
安装后重启电脑,重新打开 Visual Studio 和项目,查看包管理器控制台。如果错误消失了,那么控制器问题也消失了。
我在 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 位系统上不起作用。它失败并显示错误“更新不适用于您的计算机”。
使用 Manage Nuget Packages 重新安装 MVCscaffolding 不起作用。
我的 ProjectType GUID 是正确的。
Microsoft Web 开发人员工具已安装。
删除并重新创建解决方案不起作用。
有必要从安装磁盘修复 Visual Studio 2012 安装以解决此问题。
安装“Microsoft Web Developer Tools”为我解决了这个问题。有关的:
如何使用 ProjectTypeGuids 349c5851-65df-11da-9384-00065b846f21 打开 csproj?
- {E3E379DF-F4C6-4180-9B81-6769533ABE47} - MVC4 项目
- {fae04ec0-301f-11d3-bf4b-00c04f79efbc} - CSharp 项目
- {349c5851-65df-11da-9384-00065b846f21} - Web 应用程序项目(这是您需要 Web 开发工具的目的)
更新 Windows6.1-KB2506143-x64.msu 对我有用。该问题是在完整的 SpyWare 软件扫描后开始的。我认为它比平时删除了更多的东西。于是,回归正常生活。
我有同样的问题,我首先使用数据库,这是因为我更改了 .edmx contex.tt 以生成连接名称设置为自定义方法的 contex.cs,
: 基础(sqlHelper.getMainConnectionString())
每次,在我更改/更新 .edmx 之前,我需要将连接名称更改为它的创建默认值:
: base("name=YourWebconfigConnectionstringName")
重建项目,它再次工作
回答:
在 webconfig 检查您的连接字符串字符串和提供程序参数,然后删除并重新创建 .edmx 这将强制生成器重建所有数据库对象,包括元数据或删除设计器中的所有表,将 contex.cs 更改为默认创建名称,重建项目,添加表,重建项目,它应该再次工作。
此问题在使用 VS2017 的目标 MVC5 项目中表现出来。
与原始操作一样,尝试了一个新项目对 ApplicationUser 执行带有 EF 脚手架的添加控制器。该错误最初确实出现了,直到注册了一个用户,强制创建了数据库。之后,添加脚手架工作顺利。我认为这是有道理的,因为该实体在第一次注册之前并不真正存在,尽管如果比我知识渊博的人有更准确的解释,我会得到纠正。但是因为Add Controller是在一个新的项目上工作的,正如原op确定的那样,似乎不是VS2017的安装问题。这表明 taret 项目有问题。
此时,在目标项目中,执行 Team Explorer 中的 Undo All 以使项目恢复到之前的工作点。虽然这可以通过获取特定版本来完成,但对于这个目标项目,所需要的只是全部撤消。 提醒一句:在这个特定项目的情况下,在撤消之前,包管理器用于将数据库回滚到与 Undo All 匹配的起点。如果执行获取特定版本,请务必检查数据库是否需要回滚到正确的配置。重置所有项目更改后,object reference not set to an instance of an object
在添加控制器操作期间不再存在错误,修复了目标项目中的错误。
我有点不情愿地发布了这个回复,因为我无法复制错误,而且我不确定到底是什么导致了这个问题,但如果一个人在项目中间并且添加控制器开始,这是一个特别讨厌的错误失败。我想如果有人遇到这个问题并回滚当前的更改集可能会为他们解决这个问题,像我一样他们会很感激。如果我稍后确定导致问题出现的活动模式,我肯定会在这篇文章中添加更多内容。
我正在运行 VS 2019 Enterprise,ASP.NET Core 3.1.3。
在使用数据库优先方法搭建脚手架之后,我试图使用实体框架 (EF) 添加带有视图的 MVC 控制器。
我在这个问题上运行是因为我的 ER 模型中的一个表缺少主键。
该表已连接到我尝试通过另一个具有主键的表为其生成 MVC 控制器的表,因此我最初没有注意到该错误。