派生类型必须与基本类型的安全可访问性匹配,或者不太容易访问

时间:2013-11-22 16:48:30

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

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

我该如何解决这个问题?

  

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

1 个答案:

答案 0 :(得分:5)

终于解决了这个问题。原来我需要对 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 文件中删除以下字符串的所有实例。

    [assembly:AllowPartiallyTrustedCallers]

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

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

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