2015-02-23 63 views
5

更新:当然,我试图添加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类库。为什么?

+1

为什么倒票?这对我来说似乎是一个合理的问题。 – 2015-02-24 05:07:20

+0

@downvoter,好心地张贴原因也。 – 2015-02-24 06:05:37

回答

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-β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/

+0

我的问题是为什么它与Microsoft.DataAnnotations而不是System.ComponentModel.Annotations一起使用? – 2015-02-24 06:06:39

+0

非常感谢。我会在晚上在家尝试(我是格林威治标准时间3小时,并没有VS 2015的工作)。 – colotiline 2015-02-24 06:08:38

+1

好吧,我扩大了答案,解释为什么System.ComponentModel.Annotations不工作,但Microsoft.DataAnnotations呢。 – 2015-02-24 06:50:44