首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 4:不兼容的版本DotNetOpenAuth和System.Web.Mvc会导致继承安全规则被类型违反。

MVC 4:不兼容的版本DotNetOpenAuth和System.Web.Mvc会导致继承安全规则被类型违反。
EN

Stack Overflow用户
提问于 2015-12-14 08:06:23
回答 1查看 1.9K关注 0票数 0

我正在制作一个使用MEF在运行时加载插件的CMS MVC 4应用程序。但每当程序调用:

代码语言:javascript
复制
DirectoryCatalog dirCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"));

它会导致dirCatalog.Parts上出现此错误:

按类型违反的继承安全规则:'DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult'.派生类型必须与基本类型的安全可访问性相匹配,或者不可访问。

我的DotNetOpenAuth.Core版本是4.3.0.0,DotNetOpenAuth.AspNet版本是4.3.0.0,这是我们在Visual中创建新的MVC 4项目时的默认版本。

我的System.Web.Mvc版本是5.2.3.0。

如果我将System.Web.Mvc版本更改为Web.config中的4.0.0.0,则dirCatalog.Parts不会产生错误,但是当代码试图调用控制器时,它会产生以下错误:

违反继承安全规则的类型为:“System.Web.Mvc.MvcWebRazorHostFactory”。派生类型必须与基本类型的安全可访问性相匹配,或者不可访问。

我想DotNetOpenAuth版本与我的MVC版本不兼容。有合适的解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-12-15 06:58:48

我必须卸载System.web.mvc (v5.2.3.0),然后安装

代码语言:javascript
复制
Install-Package DotNetOpenAuth.Mvc5

这个包将迫使系统重新安装System.web.mvc 5.0.0.0,因此最后我将mvc降级为v5.0.0.0。

之后,我在root/web.config中更改了这段代码:

代码语言:javascript
复制
<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>

转入:

代码语言:javascript
复制
<dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>

以及我的root/view/web.config:

代码语言:javascript
复制
  <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

转入:

代码语言:javascript
复制
  <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

代码语言:javascript
复制
<controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>

转入:

代码语言:javascript
复制
<controls>
    <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>

我们需要将root/view/web.config更改为版本5,因为参考包文件夹中没有实际的System.Web.Mvc版本4.0.0.0文件。这就是为什么我们需要将版本匹配到v5实际的System.web.mvc文件中。

总的来说,我不认为这是一个很好的解决办法,但就目前而言,这是可行的。DotNetOpenAuth造成的问题没有更新到版本5,但我们的mvc版本是5++。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34262208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档