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

LOS*_*OST 0 c# cas .net-4.0 code-access-security

构建示例代码并运行任何测试。(我试过abs。)

每次我这样做,我都会得到TypeLoadException

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

附加信息:类型违反了继承安全规则:“Jurassic.Compiler.WhiteSpaceToken”。派生类型必须与基类型的安全可访问性相匹配,或者难以访问。

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

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

有什么想法为什么会发生这种情况吗?

PS 按照评论中的要求添加一些有关代码结构的快速信息

  1. Token 类是面向 .NET 4、Silverlight 5、Windows 8 和 Windows Phone 8 的可移植库中的公共抽象类。它仅适用于mscorlib.
  2. WhiteSpaceToken位于普通程序集中,面向 .NET 4。它继承自Token. 也仅适用于intstring
  3. 这两个类的代码中都没有任何属性。
  4. 该单元测试程序集是 MSTest 目标 4.0 上的正常单元测试程序集

LOS*_*OST 5

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

希望这些信息更加具体。