派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问相关的知识,希望对你有一定的参考价值。
建立the sample code,并进行任何测试。 (我试过abs
。)
每次我这样做,我得到TypeLoadException
:
Jurassic.dll中发生了'System.TypeLoadException'类型的异常,但未在用户代码中处理
附加信息:类型违反的继承安全规则:'Jurassic.Compiler.WhiteSpaceToken'。派生类型必须与基本类型的安全可访问性匹配,或者不太容易访问。
问题是WhiteSpaceToken
是一个简单的类,Token
,它的基础也是如此。所以看起来异常实际上并没有提供关于类名的准确信息,并且错误可能是由其他一些代码引起的。
在这种情况下,我的理解几乎为0。我可以想象的唯一解释是你不能从可移植库中继承一个抽象类,但我从来没有听说过这种限制。
任何想法为什么会发生这种情况?
附:根据评论中的要求添加一些有关代码结构的快速信息
- 令牌类是可移植库中的公共抽象类,适用于.NET 4,Silverlight 5,Windows 8和Windows Phone 8.它仅适用于
mscorlib
的字符串类。 WhiteSpaceToken
处于正常程序集中,针对.NET 4.它继承自Token
。也适用于int
和string
。- 这两个类在其代码中都没有任何属性。
- 单元测试组件是MSTest目标4.0上的普通单元测试组件
你的问题和答案对我帮助很大,谢谢!
我通过打开项目属性解决了我的问题,在安全选项卡中我取消选中了“启用ClieckOnce安全设置”。
我找到了问题的根源:它是在非可移植程序集上设置的System.Security.AllowPartiallyTrustedCallers,它包含WhiteSpaceToken。删除后,问题就消失了。看起来便携式代码具有透明模型,这导致WhiteSpaceToken在安全性方面比Token更松散,后者反过来导致异常消息中描述的问题。
希望我这些信息更加具体。
以上是关于派生类型必须与基本类型的安全可访问性匹配,或者在非常基本的情况下不易访问的主要内容,如果未能解决你的问题,请参考以下文章
mysql.data.entity.mysqlconnectionfactory.createconnection(System.String):覆盖方法必须匹配安全可访问性