更新:当然我尝试添加using System.ComponentModel.DataAnnotations
。它没有用。
问题:我无法在asp.net vnext类库项目中使用Required
属性。
案例:
1.使用默认设置添加asp.net vnext类库项目
2.使用字符串属性Human
创建类Name
3.将Required
属性添加到Name
4.获取编译错误:
Error CS0246 The type or namespace name 'Required' could not be found (are you missing a using directive or an assembly reference?)
下面是我的project.json:
{
"version": "1.0.0-*",
"dependencies": {
"System.ComponentModel.Annotations": ""
},
"frameworks": {
"aspnet50": {
},
"aspnetcore50": {
"dependencies": {
"System.Runtime": ""
}
}
}
}
我也可以在asp.net vnext中使用DataAnnotations
,但不能在vnext类库中使用{{1}}。为什么呢?
答案 0 :(得分:5)
vNext Web项目依赖于Microsoft.AspNet.Mvc
。这会引入一个很大的依赖树,数据注释位于包Microsoft.DataAnnotations
为 Microsoft.DataAnnotations 添加依赖项以使用数据协定属性。
在project.json
文件更改
"dependencies": {
"System.ComponentModel.Annotations": ""
},
到
"dependencies": {
"Microsoft.DataAnnotations": "1.0.0-beta1"
},
将1.0.0-beta1替换为当前版本号。 Visual Studio将为您自动完成它。
为什么Microsoft.DataAnnotations
有效而不是System.ComponentModel.Annotations
?
从一点点调查System.ComponentModel.Annotations
包含两个目标
aspnetcore50\System.ComponentModel.Annotations.dll
contract\System.ComponentModel.Annotations.dll
aspnetcore50
程序集用于新的Core CLR。它包含Required
属性,适用于Core CLR。
contract
程序集包含所有类型,但方法为空。这就像一个必须由框架实现的虚拟依赖。这个虚拟程序集用于.NET 4.5,这就是针对.NET 4.5和Core CLR的项目无法找到Required
属性的原因。
另一方面,Microsoft.DataAnnotations
包依赖于System.ComponentModel.Annotations
,但也引用了在.NET 4.5上运行时实际提供类型的框架程序集System.ComponentModel.DataAnnotations
我觉得这篇文章很有意思。它解释了这些合同组件在帖子结尾处的内容。 http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/