无法在asp.net vnext类库中使用必需属性
更新:当然,我试图添加using System.ComponentModel.DataAnnotations
。它不起作用。无法在asp.net vnext类库中使用必需属性
问题:我不能在asp.net vnext类库项目中使用Required
属性。
案例:
1.添加默认设置的asp.net vnext类库项目。
2.创建带有字符串属性Name
的类Human
。
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类库。为什么?
回答:
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-β1与任何当前版本号。 Visual studio会自动为你完成它。
为什么Microsoft.DataAnnotations
工作,而不是System.ComponentModel.Annotations
?
从一个小调查System.ComponentModel.Annotations
包含两个目标
aspnetcore50\System.ComponentModel.Annotations.dll
contract\System.ComponentModel.Annotations.dll
的aspnetcore50
总成是新核心CLR。它包含Required
属性,适用于Core CLR。
contract
程序集包含所有类型,但方法为空。这就像是一个虚拟的依赖关系,必须由框架来完成。此虚拟程序集在.NET 4.5上使用,这就是为什么您的项目同时针对.NET 4.5和Core CLR无法找到Required
属性。
另一方面,Microsoft.DataAnnotations
包取决于System.ComponentModel.Annotations
,但也引用框架程序集System.ComponentModel.DataAnnotations
,它实际上提供了在.NET 4上运行时的类型。5
我觉得这篇文章有趣。它解释了这些合约集合在帖子末尾的含义。 http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/
以上是 无法在asp.net vnext类库中使用必需属性 的全部内容, 来源链接: utcz.com/qa/257336.html