派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问相关的知识,希望对你有一定的参考价值。

建立the sample code,并进行任何测试。 (我试过abs。)

每次我这样做,我得到TypeLoadException

Jurassic.dll中发生了'System.TypeLoadException'类型的异常,但未在用户代码中处理

附加信息:类型违反的继承安全规则:'Jurassic.Compiler.WhiteSpaceToken'。派生类型必须与基本类型的安全可访问性匹配,或者不太容易访问。

问题是WhiteSpaceToken是一个简单的类,Token,它的基础也是如此。所以看起来异常实际上并没有提供关于类名的准确信息,并且错误可能是由其他一些代码引起的。

在这种情况下,我的理解几乎为0。我可以想象的唯一解释是你不能从可移植库中继承一个抽象类,但我从来没有听说过这种限制。

任何想法为什么会发生这种情况?

附:根据评论中的要求添加一些有关代码结构的快速信息

  1. 令牌类是可移植库中的公共抽象类,适用于.NET 4,Silverlight 5,Windows 8和Windows Phone 8.它仅适用于mscorlib的字符串类。
  2. WhiteSpaceToken处于正常程序集中,针对.NET 4.它继承自Token。也适用于intstring
  3. 这两个类在其代码中都没有任何属性。
  4. 单元测试组件是MSTest目标4.0上的普通单元测试组件
答案

你的问题和答案对我帮助很大,谢谢!

我通过打开项目属性解决了我的问题,在安全选项卡中我取消选中了“启用ClieckOnce安全设置”。

另一答案

我找到了问题的根源:它是在非可移植程序集上设置的System.Security.AllowPartiallyTrustedCallers,它包含WhiteSpaceToken。删除后,问题就消失了。看起来便携式代码具有透明模型,这导致WhiteSpaceToken在安全性方面比Token更松散,后者反过来导致异常消息中描述的问题。

希望我这些信息更加具体。

以上是关于派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问的主要内容,如果未能解决你的问题,请参考以下文章

mysql.data.entity.mysqlconnectionfactory.createconnection(System.String):覆盖方法必须匹配安全可访问性

访问修饰符,命名空间

C#访问修饰符

忽略 iOS 中的动态类型:可访问性

多态父派生类型

Fortran 派生类型包含可从 C 访问的指针