【问题标题】:Cannot add a MVC controller VS2012 gives "object reference not set to an instance of an object"无法添加 MVC 控制器 VS2012 给出“对象引用未设置为对象的实例”
【发布时间】:2013-04-15 11:04:29
【问题描述】:

我进行了广泛的搜索,但在这个星球上找不到其他人有这个问题...
症状是:
在 Visual Studio 2012 中,在从 VS2010 升级并配置为从 VS2012 和 VS2010 进行双版本编辑的 MVC 4.0 项目上。当我右键单击控制器文件夹并从上下文菜单中选择添加->控制器...时,我从 Visual Studio 收到“对象引用未设置为对象的实例”错误。

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: asp.net-mvc visual-studio-2010 asp.net-mvc-4 visual-studio-2012


    【解决方案1】:

    我正在运行 VS 2019 Enterprise,ASP.NET Core 3.1.3。

    我试图在数据库优先方法中使用实体框架 (EF) 添加带有视图的 MVC 控制器

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

    该表已连接到我尝试通过另一个具有主键的表为其生成 MVC 控制器的表,因此我最初没有注意到该错误。

    【讨论】:

      【解决方案2】:

      这个问题出现在使用 VS2017 的目标 MVC5 项目上。

      像原来的操作一样,一个新项目试图通过 EF 脚手架对 ApplicationUser 执行添加控制器。错误确实最初出现,直到注册了一个用户强制创建数据库。之后,添加脚手架工作顺利。我认为这是有道理的,因为该实体在第一次注册之前并不真正存在,尽管如果比我知识渊博的人有更准确的解释,我会得到纠正。但是因为Add Controller是在一个新项目上工作的,正如原op确定的那样,似乎不是VS2017的安装问题。这表明 taret 项目有问题。

      此时,在目标项目中,执行团队资源管理器中的 Undo All 以使项目恢复到之前的工作点。虽然这可以通过获取特定版本来完成,但对于这个目标项目,所需要的只是全部撤消。 注意事项:在此特定项目的情况下,在撤消之前,包管理器用于将数据库回滚到与 Undo All 匹配的起点。如果执行获取特定版本,请务必检查数据库是否需要回滚到正确的配置。重置所有项目更改后,在添加控制器操作期间不再出现object reference not set to an instance of an object 错误,修复了目标项目中的错误。

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

      【讨论】:

        【解决方案3】:

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

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

        根本不需要重新启动 VS2012。

        【讨论】:

          【解决方案4】:

          我有同样的问题,我首先使用数据库,这是因为我更改了 .edmx contex.tt 以生成连接名称设置为自定义方法的 contex.cs,

          : 基础(sqlHelper.getMainConnectionString())

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

          : base("name=YourWebconfigConnectionstringName")

          重建项目并再次运行

          答案:

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

          【讨论】:

            【解决方案5】:

            安装 Windows Management Framework 3.0 的首选答案不起作用。下载“Windows6.1-KB2506143-x86.msu”在我的 Windows 7 32 位系统上不起作用。它失败并出现错误“更新不适用于您的计算机”。

            使用 Manage Nuget Packages 重新安装 MVCscaffolding 不起作用。

            我的 ProjectType GUID 是正确的。

            Microsoft Web Developer Tools 已安装。

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

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

            【讨论】:

              【解决方案6】:

              更新 Windows6.1-KB2506143-x64.msu 对我有用。该问题是在完整的 SpyWare 软件扫描后开始的。我认为它比平时删除了更多的东西。所以,恢复正常生活吧。

              【讨论】:

                【解决方案7】:

                该问题似乎是由 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和项目,查看Package Manager Console。如果错误消失了,那么控制器问题也消失了。

                【讨论】:

                • 谢谢!正是我需要的。
                【解决方案8】:

                安装“Microsoft Web Developer Tools”为我解决了这个问题。相关:

                How do I open a csproj with 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 开发工具的目的)

                【讨论】:

                  【解决方案9】:

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

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

                  【讨论】:

                  • 我有 3 个项目类型 guid:{E3E379DF-F4C6-4180-9B81-6769533ABE47}; {349c5851-65df-11da-9384-00065b846f21};和 {fae04ec0-301f-11d3-bf4b-00c04f79efbc}
                  • 嗨 - 我遇到了完全相同的问题 - 你找到答案了吗?
                  • 我有。我只是在写答案,几分钟后会发布。
                  猜你喜欢
                  • 2012-01-22
                  • 2013-03-21
                  • 2013-07-26
                  • 2021-09-14
                  • 2020-04-13
                  • 2013-03-21
                  • 2015-09-27
                  • 2012-09-13
                  • 1970-01-01
                  相关资源
                  最近更新 更多