当前位置:  开发笔记 > 后端 > 正文

如何从DataAnnotations.ValidationAttribute继承(它在.NET 4中的Visual Studio调试主机下显示为SecureCritical!)

如何解决《如何从DataAnnotations.ValidationAttribute继承(它在.NET4中的VisualStudio调试主机下显示为SecureCritical!)》经验,为你挑选了0个好方法。

我有一个[AllowPartiallyTrustedCallers]类库,包含System.DataAnnotations.ValidationAttribute的子类型.该库用于WCF服务的合同类型.

在.NET 2/3.5中,这很好用.但是,从.NET 4.0开始,在Visual Studio调试器中运行服务的客户端会导致异常" 类型的违反继承安全规则:'(我的ValidationAttribute的子类型)'.派生类型必须与基类型的安全可访问性匹配或者不太容易访问. "(System.TypeLoadException)

仅当满足以下所有条件时,才会出现错误:

    ValidationAttribute的子类位于AllowPartiallyTrustedCallers程序集中

    反射用于检查属性

    Visual Studio托管过程已启用(项目属性,调试选项卡上的复选框)

基本上,在Visual Studio.NET 2010中:

创建一个新的Console项目,

添加对"System.ComponentModel.DataAnnotations"4.0.0.0的引用,

写下面的代码:

.

using System;

[assembly: System.Security.AllowPartiallyTrustedCallers()]

namespace TestingVaidationAttributeSecurity
{
    public class MyValidationAttribute : System.ComponentModel.DataAnnotations.ValidationAttribute
    { }

    [MyValidation]
    public class FooBar
    { }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("ValidationAttribute IsCritical: {0}",
                typeof(System.ComponentModel.DataAnnotations.ValidationAttribute).IsSecurityCritical);

            FooBar fb = new FooBar();
            fb.GetType().GetCustomAttributes(true);

            Console.WriteLine("Press enter to end.");
            Console.ReadLine();
        }
    }
}

按F5即可获得异常!

按Ctrl-F5(无需调试即可启动),一切正常,无异常...

奇怪的是,根据您运行程序的方式(F5或Ctrl + F5),ValidationAttribute将是或将不是安全关键.如上面代码中的Console.WriteLine所示.但话说回来,这似乎与其他属性(和类型?)一起发生.

现在问题......

为什么在从ValidationAttribute继承时会出现此行为,但在从System.Attribute继承时却没有?(使用Reflector我在ValidationAttribute类或它的程序集中找不到特殊设置)

我该怎么做才能解决这个问题?如何保持MyValidationAttribute继承自AllowPartiallyTrustedCallers程序集中的ValidationAttribute而不将其标记为SecurityCritical,仍然使用新的.NET 4级别2安全模型仍使用VS.NET调试主机(或其他主机)?

非常感谢!鲁迪

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有