2009-06-15 4 views
0

У меня есть веб-приложение с несколькими различными суб-веб-приложениями, использующими MVC. Проблема, с которой я сталкиваюсь, заключается в том, что два суб-веб-сервера используют разные версии MVC. Один из них недавно был обновлен, чтобы использовать версию 1.0, и один застрял в более ранней версии предварительного просмотра.ASP.NET MVC Versioning Issue

После модернизации одного из суб-тканей до 1,0, другой сеть, которая использует версию предварительного просмотра не может со следующей ошибкой:

Could not load type 'System.Web.HttpContextWrapper2' from assembly 'System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 

Я подозреваю, что проблема связана с тем, что оба 1.0 и предварительные версии DLL System.Web.Abstractions помечены как версия 3.5.0.0, но на самом деле содержат разные классы. Итак, когда приложение предварительного просмотра ссылается на System.Web.Abstractions, оно получает уже загруженную версию MVC 1.0 вместо версии предварительного просмотра, которая находится в каталоге bin.

Есть ли способ заставить среду выполнения загрузить сборку в два раза, как если бы они были двумя разными версиями, хотя на самом деле они помечены тем же номером версии? Я искал использование тега в моей веб-конфигурации, но не мог точно понять, как я буду использовать это для этого, или если он даже достигнет того, что мне нужно сделать здесь.

+0

Вам действительно нужны две версии, работающие бок о бок, не будет ли предыдущая версия заботиться о проблеме yoru? –

+0

Мне действительно нужны обе версии, работающие бок о бок - в версии 1.0 есть изменения, которые приводят к тому, что код, написанный против версии предварительного просмотра, больше не работает. Я мог бы конвертировать приложение, используя версию предварительного просмотра, чтобы использовать 1.0, но я бы предпочел не делать этого прямо сейчас, если это возможно. –

+0

В итоге я просто конвертировал приложение в MVC 1.0. Это должно было быть сделано в любом случае, но мне все равно было бы интересно узнать, есть ли способ сделать это. –

ответ

0

Вы можете поместить System.Web.Abstractions.dll, System.Web.Mvc.dll и System.Web.Routing.dll сборок с соответствующими версиями (от MVC просмотра и от MVC 1.0) в ~/bin каждой из ваших суб-веб-страниц.

ОБНОВЛЕНО:

Попробуйте удалить это из web.config вашего приложения с помощью ASP.NET MVC Preview версии:

<system.web> 
    <assemblies> 
     <!--<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />--> 
    </assemblies> 
+0

Не уверен, что вы имеете в виду здесь. 3.5 SP1 установлен на серверах, поэтому MVC 1.0 уже доступен для всех приложений. Приложение, которое нуждается в версии предварительного просмотра, имеет предварительные ячейки в своей папке/bin, но кажется, что они игнорируются, потому что SP1 помещает 1.0 бункеров в GAC (а в ящиках предварительного просмотра одинаковый номер версии) –

+0

Вы попытались удалить < добавить сборку .. /> для абстракций/Mvc/Маршрутизация из раздела web.config/system.web/компиляции/сборки для приложения с использованием ASP.NET MVC Preview? –

+0

@ eu-ge-ne - да, просто попробовал, и это не имело никакого эффекта. По-прежнему появляется такое же сообщение об ошибке, что и раньше. –

1

Мы столкнулись с подобной проблемой. В большинстве наших приложений используется MVC 3.0. Мы используем систему управления контентом, которая использует MVC 1.0. У нас была проблема совместимости, потому что мы пытались ссылаться на один из компонентов приложения в системе управления контентом. Когда мы поставили обе версии MVC в GAC, это решило проблему.