無法添加 MVC 控制器 VS2012 給出“對象引用未設置為對象的實例”
我進行了廣泛的搜尋,但在這個星球上找不到另一個人有這個問題……
症狀是:
在 Visual Studio 2012 中,在從 VS2010 升級並配置為從 VS2012 和 VS2010 進行雙版本編輯的 MVC 4.0 項目上。當我右鍵點擊控制器文件夾並從上下文菜單中選擇添加->控制器…時,我從 Visual Studio 收到“對象引用未設置為對象的實例”錯誤。項目中的現有程式碼執行良好,如果我改用 Add->New Item 選項,並從對話框中選擇 Controller,那麼我可以添加一個空白控制器。我只是無法使用上述方法添加類型控制器。
但是,如果我創建一個新的 MVC4 項目,那麼我可以使用相同的菜單再次添加類型控制器,因此 Visual Studio 的安裝中不存在問題,它必須存在於項目文件中。
我還檢查了我的項目和新 MVC 項目之間的引用,並且所有新項目引用都包含在我的項目中。
有沒有人經歷過類似的事情?我該如何解決?
該問題似乎是由 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 和項目,查看包管理器控制台。如果錯誤消失了,那麼控制器問題也消失了。