升级到.Net 4.5后,MVC4Beta项目编译失败。
发生这种情况的原因是System.ComponentModel.DataAnnotations.CompareAttribute和System.Web.Mvc.CompareAttribute之间存在冲突
System.ComponentModel.DataAnnotations.CompareAttribute MSDN documentation说:
提供了一个比较两个属性的属性。
而System.Web.Mvc.CompareAttribute MSDN documentation说:
提供了一个属性,用于比较模型的两个属性。
这两者之间的区别是什么,什么时候使用它们会更“聪明”?
10倍。
发布于 2012-08-15 05:55:19
因此,查看MSDN文档并对这两个类进行文字比较时,我注意到这两个类都是从System.ComponentModel.DataAnnotations.ValidationAttribute.派生的事实上,这些类几乎是完全相同的。唯一值得注意的区别是,MVC版本还实现了IClientValidatable,它添加了以下属性:
至于应该使用哪个类,如果模型将直接绑定到视图,请使用MVC版本,以便您可以利用客户端验证。但是,如果您使用的是ViewModels,则可以坚持使用ComponentModel类,从而避免额外属性带来的不必要的开销。你说了算!
发布于 2012-06-27 22:02:51
Microsoft Connect解决方法是:
GavK于2012年6月17日凌晨5:13发布的
我添加了对System.Web.Mvc.Compare的完整引用(...)而不是仅仅使用比较(...)
在VS 2012中对我有效...
发布于 2013-08-29 05:29:06
Vinney解决了大部分问题,除了你应该使用哪一个...
将目标框架更改为4.5后出现冲突的原因是因为在.NET 4.5之前,there was no CompareAttribute class in the System.ComponentModel.DataAnnotations namespace和在System.Web.Mvc下定义的类填补了这一空白。因此,举个例子,如果您在更新目标框架之前在模型类中使用了[Compare]和[Required]属性,那么在升级时就会出现冲突。
假设您没有在模型类的System.Web.Mvc名称空间中使用任何其他内容,则应该删除该using语句,并让它依赖于System.ComponentModel.DataAnnotations名称空间。不显眼的客户端验证将继续像以前一样工作,就像它对来自相同名称空间(例如Required)的用来装饰模型属性的其他属性所做的那样。
https://stackoverflow.com/questions/10668948
复制相似问题