.net 4.0 DataAnnotations:Visual Studio不允许重写RequiresValidationContext属性

.net 4.0 DataAnnotations:Visual Studio不允许重写RequiresValidationContext属性,.net-4.0,data-annotations,visual-studio-2012,.net-4.5,.net 4.0,Data Annotations,Visual Studio 2012,.net 4.5,我试图通过继承ValidationAttribute实现自定义验证属性,但发现了一个奇怪的东西。 我的自定义属性需要验证上下文,因此我查看了ValidationAttribute的R#反编译源,发现我需要在自定义属性类中重写它: public virtual bool RequiresValidationContext { get { return false; } } 现在有趣的部分——Visual Studio 2012不允许我这样做,它告诉我没有此类重写属性,尽管在运

我试图通过继承
ValidationAttribute
实现自定义验证属性,但发现了一个奇怪的东西。
我的自定义属性需要验证上下文,因此我查看了ValidationAttribute的R#反编译源,发现我需要在自定义属性类中重写它:

public virtual bool RequiresValidationContext
{
  get
  {
    return false;
  }
}
现在有趣的部分——Visual Studio 2012不允许我这样做,它告诉我没有此类重写属性,尽管在运行project时,在调试视图中我可以看到该属性

有趣的是,在参考路径中我看到:

C:\Program Files(x86)\Reference Assembly\Microsoft\Framework.NETFramework\v4.0\System.ComponentModel.DataAnnotations.dll

但在R#中,反编译文件是不同的路径:

程序集位置:C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.ComponentModel.DataAnnotations.dll

所以,编译器使用不同于运行时的dll。 因此,我尝试将引用dll切换到一个R#反编译,但看起来VS2012正在用它的版本替换它,在项目文件中,它看起来像:

<Reference Include="System.ComponentModel.DataAnnotations" />

所以,项目中不保存任何路径。 如果不手动编辑项目,是否有解决方案

顺便说一句,在4.5NET中,它工作得很好,我的意思是它认为RequiresValidationContext属性是假定的

更新:正如他们所说,这张图片胜过千言万语:


解决方案很简单,属性RequiresValidationContext已添加到中的ValidationAttribute。由于您正在使用C#4.0进行编码/使用/开发,我怀疑您的目标是.NET Framework 4.0,而在该版本中,该属性确实如此


因此,您无法覆盖该属性,因为它不存在。

解决方案很简单,属性RequiresValidationContext已添加到中的ValidationAttribute。由于您正在使用C#4.0进行编码/使用/开发,我怀疑您的目标是.NET Framework 4.0,而在该版本中,该属性确实如此


所以你不能覆盖这个属性,因为它不存在。

我已经用屏幕截图更新了这个问题,在那里可以看到,目标框架是4.0,调试视图仍然可以看到RequiresValidationContext属性。此外,我在问题中提到的dll的两个路径都直接指向framework的4.0文件夹?对我来说,调试器/QuickWatch窗口似乎使用了错误的framework版本来显示值。如果我反编译C:\Windows\Microsoft.NET\framework\v4.0.30319\System.ComponentModel.DataAnnotations.dll,我会发现有RequiresValidationContext属性,反编译器还说这个文件版本是4.0.0,所以我不确定调试器是否错误。另外,当我使用dotPeek反编译程序集时,我可以使用attribute.GetType().GetProperty(“RequiresValidationContext”)通过反射访问属性。ValidationAttribute上没有定义属性。我将Visual Studio 2010与最新的.NET Framework 4.0一起使用。我用屏幕截图更新了问题,在屏幕截图中可以看到,目标框架是4.0,调试视图仍然可以看到RequiresValidationContext属性。此外,我在问题中提到的dll的两个路径都直接指向framework的4.0文件夹?对我来说,调试器/QuickWatch窗口似乎使用了错误的framework版本来显示值。如果我反编译C:\Windows\Microsoft.NET\framework\v4.0.30319\System.ComponentModel.DataAnnotations.dll,我会发现有RequiresValidationContext属性,反编译器还说这个文件版本是4.0.0,所以我不确定调试器是否错误。另外,当我使用dotPeek反编译程序集时,我可以使用attribute.GetType().GetProperty(“RequiresValidationContext”)通过反射访问属性。ValidationAttribute上没有定义属性。我正在使用Visual Studio 2010和最新的.NET Framework 4.0。