C# MVC 4:与System.Web.MVC不兼容的版本DotNetOpenAuth导致类型违反继承安全规则

C# MVC 4:与System.Web.MVC不兼容的版本DotNetOpenAuth导致类型违反继承安全规则,c#,asp.net-mvc,asp.net-mvc-4,mef,C#,Asp.net Mvc,Asp.net Mvc 4,Mef,我正在制作一个CMS MVC 4应用程序,使用MEF在运行时加载插件。但只要程序调用: DirectoryCatalog dirCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")); 它在目录上导致此错误。零件: 类型“DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult”违反了继承安全规则。派生类型必须与基

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

DirectoryCatalog dirCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"));
它在目录上导致此错误。零件:

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

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

我的System.Web.Mvc版本是5.2.3.0

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

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


我猜DotNetOpenAuth版本与我的MVC版本不兼容。是否有与此匹配的解决方法?

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

Install-Package DotNetOpenAuth.Mvc5
该软件包将强制系统重新安装system.web.mvc 5.0.0.0,因此最终我将mvc降级为v5.0.0.0

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

<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>
  <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

进入:


和我的根目录/views/web.config:

<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>
  <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

进入:



进入:


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

总的来说,我不认为这是一个很好的解决办法,但现在这是可行的。DotNetOpenAuth导致的问题没有更新到版本5,但是我们的mvc版本是5++

<controls>
    <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>
<controls>
    <add assembly="System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
  </controls>