【问题标题】:Derived types must either match the security accessibility of the base type or be less accessible派生类型必须与基类型的安全可访问性匹配,或者难以访问
【发布时间】:2013-11-22 16:48:29
【问题描述】:

几天前,我按照instructions 将我的 MVC 4 应用程序升级到 MVC 5,现在我收到以下错误。我使用 Nuget (v4.3.3.13295) 将 DotNetOpenAuth 更新为最新的位,但它仍然抛出此错误。

我该如何解决这个问题?

类型违反了继承安全规则: 'DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult'。衍生的 类型必须与基类型的安全可访问性匹配,或者 不易接近。

【问题讨论】:

    标签: asp.net-mvc-4 upgrade dotnetopenauth asp.net-mvc-5


    【解决方案1】:

    终于解决了。原来我需要对 DotNetOpenAuth 的源代码进行一些更改并重新编译它。这一点都不容易,因为从 github 下载源代码后无法编译。我不得不花大约 3 天的时间尝试各种事情并学习构建系统融入 DotNetOpenAuth 的项目文件,直到我最终编译它。似乎这个项目的作者已经放弃了它。查看更多关于此问题的信息here

    1. 使用此命令行下载 4.3 代码库:git clone -b v4.3 https://github.com/DotNetOpenAuth/DotNetOpenAuth.git
    2. 编辑 /src/version.txt 并将其更改为 4.4.0。这使得该版本高于官方 Nuget 版本,因此安装 Nuget 包时不会尝试从其存储库安装旧版本的 DotNetOpenAuth 程序集。
    3. /src/ 目录下的所有 AssemblyInfo.cs 文件中删除以下字符串的所有实例。

      [程序集:AllowPartiallyTrustedCallers]

    4. 我不得不在两个项目中弄乱 Microsoft.Contracts 引用并将其指向 /tools/Contracts/PublicAssemblies/v3.5/Microsoft.Contracts.dll 然后使用 using alias 从该程序集中获取类以正确解析。一些 Requires.NotNull() 行拒绝编译,所以我只是将它们注释掉...... c'est la vie..

    5. 运行以下命令跳过对这些程序集的验证:sn.exe -Vr *,2780ccd10d57b246

    构建程序集后,我引用了这些程序集,从 Nuget 重新添加了 Microsoft.AspNet.WebPages.OAuth 3.0,重建了我的解决方案,最后我的应用程序在 MVC 5 上启动并运行。

    【讨论】:

    • 非常感谢您分享这个,让我免于大量问题。我不得不使用以下方法跳过强名称验证:sn.exe -Vr "*,2780ccd10d57b246"
    • 不幸的是,我也不得不运行它。将其添加到我上面的答案中。强命名密钥文件使用密码加密,因此您无法重新编译并将输出作为真实交易传递。有道理,但是如果该项目被放弃,如果作者能够取消加密密钥以便有人可以拿起火炬,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2014-09-18
    • 2018-07-14
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多