2015-12-14 5 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 это по умолчанию, когда мы создали новые проекты MVC 4 в Visual Studio.

My System.Web.Mvc версия - 5.2.3.0.

Если я изменил версию System.Web.Mvc на 4.0.0.0 в моем Web.config, 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 поэтому в конец i понизил мой mvc до версии 5.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> 

Нам нужно изменить корневой/Views/web.config в 5-й версии, потому что нет никакой фактической System.Web.Mvc версии 4.0.0.0 файл в папке справочного пакета. Вот почему нам нужно сопоставить версию с фактическим файлом System.web.mvc v5.

В целом я не думаю, что это хорошее решение, но пока это работает. Проблема, вызванная DotNetOpenAuth, которая не обновлена ​​до версии 5, но наша версия mvc - 5 ++.