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

问题描述 投票:0回答:2

建立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上的普通单元测试组件
c# .net-4.0 cas code-access-security
2个回答
3
投票

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

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


2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.