MVC 4:DotNetOpenAuth版本与System.Web.MVC不兼容导致类型违反了继承安全规则
本文关键字:MVC 类型 规则 安全 继承 不兼容 DotNetOpenAuth 版本 Web System | 更新日期: 2023-09-27 18:26:37
我正在制作一个CMS MVC 4应用程序,该应用程序在运行时使用MEF加载插件。但每当程序调用:
DirectoryCatalog dirCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin"));
它导致dirCatalog上出现此错误。部件:
类型"DotNetOpenAuth.Messageing.OutgoingWebResponseActionResult"违反了继承安全规则。派生类型必须与基类型的安全可访问性匹配,或者不太可访问。
我的DotNetOpenAuth.Core版本是4.3.0.0DotNetOpenAuth.AspNet版本为4.3.0.0,这是我们在Visual Studio中创建新的MVC 4项目时的默认版本。
我的System.Web.Mvc版本是5.2.3.0。
如果我在Web.config中将System.Web.vc版本更改为4.0.0.0,dirCatalog.Parts不会产生错误,但不知何故,当代码试图调用控制器时,它会产生以下错误:
类型"System.Web.Mvc.MvcWebRazorHostFactory"违反了继承安全规则。派生类型必须与基类型的安全可访问性匹配,或者不太可访问。
我猜DotNetOpenAuth版本与我的MVC版本不兼容。有没有一个变通办法来匹配这一点?
我不得不卸载System.web.mvc(v.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>
进入:
<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/views/web.config:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
进入:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
和
<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>
我们需要将root/views/web.config更改为版本5,因为在引用包文件夹中没有实际的System.web.Mvc版本4.0.0.0文件。这就是为什么我们需要将版本匹配到v5实际的System.web.mvc文件中。
总的来说,我认为这不是一个好的解决方案,但目前这是可行的。由DotNetOpenAuth引起的问题,它没有更新到版本5,但我们的mvc版本是5++。