为什么我在新的MVC4项目中遇到编译错误?

时间:2012-09-30 21:20:05

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

我一直无法找到答案并且整个周末都在网上搜索,所以我希望也许你可以帮我解决这个问题。

使用Visual Studio 2012时,我创建了一个新的MVC4 Web应用程序项目并获得了一些编译错误。

这是我的问题:

  1. 我使用Visual Studio 2012创建了一个新的MVC4 Web应用程序,我选择了Internet Application并将其设置为使用RAZOR Engine。

  2. 我转到应用程序属性,在“应用程序”选项卡下,我将目标框架从.NET Framework 4.5更改为.NET Framework 4。

  3. 构建会产生以下错误:

      

    错误1找不到类型名称“TableAttribute”。此类型已转发到程序集'System.ComponentModel.DataAnnotations,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'。考虑添加对该程序集的引用。 c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 21 6 MvcApplication1

         

    错误2找不到类型或命名空间名称“Table”(您是否缺少using指令或程序集引用?)c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 21 6 MvcApplication1

         

    错误3找不到类型或命名空间名称“DatabaseGeneratedAttributeAttribute”(您是否缺少using指令或程序集引用?)c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 25 10 MvcApplication1

         

    错误4找不到类型名称“DatabaseGeneratedAttribute”。此类型已转发到程序集'System.ComponentModel.DataAnnotations,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'。考虑添加对该程序集的引用。 c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 25 10 MvcApplication1

         

    错误5找不到类型或命名空间名称'CompareAttribute'(您是否缺少using指令或程序集引用?)c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 54 10 MvcApplication1

         

    错误6找不到类型或命名空间名称“比较”(您是否缺少using指令或程序集引用?)c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 54 10 MvcApplication1

         

    错误7找不到类型或命名空间名称'CompareAttribute'(您是否缺少using指令或程序集引用?)c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 87 10 MvcApplication1

         

    错误8找不到类型或命名空间名称'Compare'(您是否缺少using指令或程序集引用?)c:\ users \ saad \ documents \ visual studio 2012 \ Projects \ MvcApplication1 \ MvcApplication1 \ Models \ AccountModels.cs 87 10 MvcApplication1

3 个答案:

答案 0 :(得分:26)

只需重新安装EntityFramework:

  1. 转到程序包管理器控制台
  2. 卸载 - 包实体框架
  3. Install-Package entityframework
  4. 这就是错误应该消失!

答案 1 :(得分:7)

实际上,这不是MVC4模板项目的问题,而是改变目标.Net Framework。

在VS2012中创建新的MVC4项目时,它(默认情况下)将引用.Net 4.5。所有文件都是基于此版本生成的。 AccountModel使用System.ComponentModel.DataAnnotationsTableAttributeDatabaseGeneratedAttribute,...

中的新属性

重新定位框架版本只会更改引用,不会影响源代码:4.5框架中的属性不会被删除。

如果你想要一台带有.Net 4.0的MVC4项目,你可以:

  • 从AccountModel
  • 中删除了.net 4.5属性
  • 如果不需要,请删除帐户模式
  • 在“创建新项目向导”中选择“.NET 4.0”。

答案 2 :(得分:1)

Uninstall-Package entityframework / Install-Package实体框架解决方案对我来说并不起作用。相反,我必须在记事本中打开.csproj文件并执行查找并替换" net40"到" net45"强制它加载所有软件包的.net 4.5版本。这也使得EntityFramework加载的版本正确。