gpt4 book ai didi

c# - 无法在 asp.net vnext 类库中使用必需的属性

转载 作者:太空狗 更新时间:2023-10-29 23:14:14 27 4
gpt4 key购买 nike

更新:当然,我尝试添加 using System.ComponentModel.DataAnnotations。它不起作用。

问题:我无法在 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 网络项目依赖于 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,但也引用框架程序集 System.ComponentModel.DataAnnotations 当您在 .NET 4.5 上运行时,它实际上提供了类型

我发现这篇文章很有趣。它在文章末尾解释了这些合约组件是什么。 http://alxandr.me/2014/07/20/the-problems-with-portable-class-libraries-and-the-road-to-solving-them/

关于c# - 无法在 asp.net vnext 类库中使用必需的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com