網頁

ASP.NET MVC 3-4無法新增Controller

問題的來龍去脈

Visual Studio 2012在安裝【Web Tools 2012.2】正式版更新之後,ASP.NET MVC 3與ASP.NET MVC 4(C#與VB.NET)專案,如果使用【Database first + Entity Framework】會無法新增MVC Controller與API Controller。

Database first示意圖

  1. 新增範例資料庫
    新增Northwind範例資料庫
  2. 新增Entity Framework實體資料模型(EDMX)
    新增Entity Framework實體資料模型(EDMX)

新增MVC / API Controller之英文版錯誤訊息:

新增MVC / API Controller之英文版錯誤訊息
'ProjectName.ClassName' is not part of the specified 'ProjectName.???Entities' class, and the 'ProjectName.???Entities' class could not be modifed to add a 'DbSet<ProjectName.ClassName>' property to it.(For example, the 'ProjectName.???Entities' class might be in a compiled assembly.)

新增MVC / API Controller之中文版錯誤訊息:

新增MVC / API Controller之中文版錯誤訊息
'ProjectName.ClassName'不是指定之'ProjectName.???Entities'類別的一部分,而且無法修改'ProjectName.???Entities'類別以新增'DbSet<ProjectName.ClassName>'屬性(例如,'ProjectName.???Entities'類別可能位於已編訪的組件中)

問題發生的原因

這是因為【Web Tools 2012.2】正式版更新與擴充功能套件【VsCommands for Visual Studio 2012】(版本11.2.4.3)衝突造成。

問題的解決方法

在已經安裝【Web Tools 2012.2】正式版更新的主機上,先行停用或移除【VsCommands for Visual Studio 2012】(版本11.2.4.3)擴充功能套件。

停用或移除VsCommands for Visual Studio 2012(版本11.2.4.3)擴充功能套件

問題追追追

這個問題我追了6個多小時,最近只有更新了【Web Tools 2012.2】正式版,中文錯誤訊息,謝謝再連絡,因為用中文訊息找不到任何資料,沒辦法,我又安裝了Visual Studio 2012英文語系,利用英文錯誤訊息在網路上有找到一篇【ASP.NET MVC4– How to use a Database First EF in a MVC controller】的文章,文章雖然可以解決無法新增Controller的問題,但作者也不知道原因,而且從日期來看,也是最近才發生的事,但此法不可行,不可能未來每個經過你主機的專案都要這樣設定,這誰會接受。矛頭原本是指向【Web Tools 2012.2】此一更新身上,重點是,要如何證明是【Web Tools 2012.2】呢?

這時,請出Hyper-V虛擬機中的Visual Studio 2012,設定好快照,一樣安裝【Web Tools 2012.2】正式版更新,然後建立資料庫、新增EDMX、新增Controller…一切正常。這時重覆幾次,心中大概已經確定,人不是【Web Tools 2012.2】殺的,兇手另有他人。

案情陷入膠著,本來已經走到想還原備份系統,但想想實在不甘願,就在最後一刻回想起,之前也有碰過一次類似的MVC Controller無法新增的問題,是由擴充功能套件引起。仔細比對本機與虛擬機之間的Visual Studio,兩者安裝的擴充功能套件並不相同,虛擬機裡的Visual Studio少了許多。接下來的流程為:「停用套件→重開Visual Studio→新增Controller」重覆數次之後,終於找出兇手是VsCommands for Visual Studio 2012,VsCommands for Visual Studio 2012只會與Web Tools 2012.2正式版有衝突,那裡衝突,為什麼衝突,我已經無力再追下去了。@_@

2 則留言:

  1. 找到一篇,之前貼在G+專頁的訊息:https://plus.google.com/u/0/b/101452786734770973491/101452786734770973491/posts/6hWDFZWxZtM

    回覆刪除
  2. 作者已經移除這則留言。

    回覆刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。