无法在 asp.net vnext class 库中使用必需的属性
Can't use required attribute in the asp.net vnext class library
更新:当然我尝试添加using System.ComponentModel.DataAnnotations
。没用。
问题:我无法在 asp.net vnext class 库项目中使用 Required
属性。
案例:
1. 添加asp.net vnext class 库工程,默认设置
2. 用字符串 属性 Name
.
创建 class 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 class 库中使用。为什么?
vNext 网络项目依赖于 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
程序集用于新的核心 CLR。它包含 Required
属性并适用于核心 CLR。
contract
程序集包含所有类型,但方法是空的。它就像一个必须由框架实现的虚拟依赖。此虚拟程序集用于 .NET 4.5,这就是为什么同时针对 .NET 4.5 和 Core CLR 的项目找不到 Required
属性的原因。
另一方面,Microsoft.DataAnnotations
包依赖于 System.ComponentModel.Annotations
,但也引用了框架程序集 System.ComponentModel.DataAnnotations
,当您在 .NET 4.5 上 运行 时,它实际上提供了类型
我发现这个 post 很有趣。它在 post 末尾解释了这些合约程序集是什么。 http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/
更新:当然我尝试添加using System.ComponentModel.DataAnnotations
。没用。
问题:我无法在 asp.net vnext class 库项目中使用 Required
属性。
案例:
1. 添加asp.net vnext class 库工程,默认设置
2. 用字符串 属性 Name
.
创建 class 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 class 库中使用。为什么?
vNext 网络项目依赖于 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
程序集用于新的核心 CLR。它包含 Required
属性并适用于核心 CLR。
contract
程序集包含所有类型,但方法是空的。它就像一个必须由框架实现的虚拟依赖。此虚拟程序集用于 .NET 4.5,这就是为什么同时针对 .NET 4.5 和 Core CLR 的项目找不到 Required
属性的原因。
另一方面,Microsoft.DataAnnotations
包依赖于 System.ComponentModel.Annotations
,但也引用了框架程序集 System.ComponentModel.DataAnnotations
,当您在 .NET 4.5 上 运行 时,它实际上提供了类型
我发现这个 post 很有趣。它在 post 末尾解释了这些合约程序集是什么。 http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/