【问题标题】:Derived types must either match the security accessibility of the base type or be less accessible in very basic case派生类型必须与基类型的安全可访问性相匹配,或者在非常基本的情况下难以访问
【发布时间】:2013-12-24 22:03:40
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • 怀疑人们会下载、构建和运行您通过 url 提供的东西。这个网站运行了小而完整的问题示例。也许改写您的问题将有助于获得答案。
  • 我更多的是寻找洞察力,而不是寻找真正去调试的人,并找出可能是什么原因。但是感谢您的建议,我将添加一些快速信息

标签: c# .net-4.0 cas code-access-security


【解决方案1】:

我找到了问题的根源:它是在包含 WhiteSpaceToken 的非便携式程序集上设置的 System.Security.AllowPartiallyTrustedCallers。我删除它后,问题就消失了。貌似可移植代码有透明模型,导致WhiteSpaceToken在安全感上比Token更松散,进而导致异常信息中描述的问题。

希望这些信息更具体。

【讨论】:

    【解决方案2】:

    你的问题和回答对我很有帮助,谢谢!!!

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

    【讨论】:

    • 哇。这个问题出现在许多不同的地方。我在互联网上到处寻找它,但这个简单的东西对我有帮助。谢谢!
    • 安全标签在哪里?项目属性我试过了,VS2017中没有
    • 它不在我认为的网络项目中,因为我也看不到它
    【解决方案3】:

    在我的情况下 system.net.HTTP 导致错误。我将其更新到最新版本并修复了问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多