gpt4 book ai didi

.net - 创建自定义 CodeAccessSecurityAttribute 会导致编译异常

转载 作者:行者123 更新时间:2023-12-02 19:43:20 27 4
gpt4 key购买 nike

我正在构建自定义 CodeAccessSecurityAttribute 来处理 WCF 服务的授权。我这样构建了 A 类:

public class A : CodeAccessSecurityAttribute
{
public A() : base(SecurityAction.Demand)
{
// Constructor Code
}

public override IPermission CreatePermission()
{
// Permission Creation Code
}

}

编译时会产生此错误。

Error emitting 'A' attribute -- 'Serialized security custom attribute is 
truncated or incorrectly formed.'

稍微玩了一下后,我想出了下一个编译没有错误的示例:

public class B : CodeAccessSecurityAttribute
{
public B(SecurityAction Action) : base(Action)
{
// Constructor Code
}

public override IPermission CreatePermission()
{
// Permission Creation Code
}

}

我知道这是因为 SecurityAction 枚举没有直接引用 A 类的公共(public)端,但我不知道如何制作它,以便我可以使用 A 类方法而不是 B 类方法来执行此操作.

最佳答案

我不知道该要求的确切原因,但MSDN documentation on CodeAccessSecurityAttribute明确指出

Notes to Inheritors

All permission attributes derived from this class must have only a single constructor that takes a SecurityAction as its only parameter.

修改:此要求的原因是,从低级 View 来看,CodeAccessSecurityAttribute 与其他自定义属性有很大不同。通常,自定义属性存储在 CustomAttribute 表中的已编译元数据中。但派生自 SecurityAttribute 的安全属性单独存储在 DeclSecurity 表中。而且该表并不像 CustomAttribute 表那样包含一般数据,该表包含 Action 的值、属性类型的名称以及自定义属性中的一组属性(命名参数)属性案例。因此,编译器需要将通用自定义属性语法转换为该元数据表中的条目,因此需要它遵循上述固定形式。 (另请参阅 this blog post 或第 II 部分,公共(public)语言基础设施 (CLI) 标准的 22.11 DeclSecurity : 0x0E 部分。)

关于.net - 创建自定义 CodeAccessSecurityAttribute 会导致编译异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4995687/

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