2015-12-14 93 views
0

我正在CMS MVC 4應用程序使用MEF加載插件在運行時。但每當程序調用:MVC 4:不兼容的版本DotNetOpenAuth與System.Web.Mvc導致繼承安全規則違反類型

DirectoryCatalog dirCatalog = new DirectoryCatalog(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")); 

它會導致dirCatalog.Parts此錯誤:

Inheritance security rules violated by type: 'DotNetOpenAuth.Messaging.OutgoingWebResponseActionResult'. Derived types must either match the security accessibility of the base type or be less accessible.

我DotNetOpenAuth.Core版本是4.3.0.0 和DotNetOpenAuth.AspNet版本是4.3.0.0是當我們在Visual Studio中創建新的MVC 4項目時的默認版本。

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

如果我在我的Web.config中將我的System.Web.Mvc版本更改爲4.0.0.0,則dirCatalog.Parts不會產生錯誤,但是在代碼嘗試調用控制器時會產生此錯誤:

Inheritance security rules violated by type: 'System.Web.Mvc.MvcWebRazorHostFactory'. Derived types must either match the security accessibility of the base type or be less accessible.

我猜DotNetOpenAuth版本與我的MVC版本不兼容。有沒有一種解決方法來匹配這個?

+0

有'OutgoingWebResponseActionResult'類似的問題,這裏是做什麼http://idevexplorer.com/2014/12/dotnetopenauth-usage-and-implementation-in-mvc-5/(看第8步的他們的教程)。不幸的是,如果您直接使用操作結果,如何解決此問題,您必須找到一種方法在您的方案中應用此解決方法。 –

回答

0

我不得不卸載System.web.mvc(v5.2.3.0),然後我安裝

Install-Package DotNetOpenAuth.Mvc5 

這個包將強制系統重新安裝System.web.mvc 5.0.0.0所以在最後我把我的mvc降級到v5.0.0.0。

之後,我改變了代碼根/ 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> 

和我的根/視圖/ 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> 

我們需要改變根/視圖/ web.config中成5的版本,因爲沒有實際System.Web.Mvc版本4.0.0.0文件在參考包文件夾中。這就是爲什麼我們需要將版本匹配到v5實際System.web.mvc文件中。

總體而言,我不認爲這是一個很好的解決辦法,但現在這工作。 DotNetOpenAuth導致的問題未更新至版本5,但我們的mvc版本爲5 ++。

相關問題