无法在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

回到顶部