2012-03-06 8 views
4

У меня возникла проблема, когда вместо сборки более новой версии в корзине используется более старая сборка GAC'd.Bin развернул приоритет DLL для GAC'd DLL для веб-приложения?

Сервер: машина

Assembly version: ASP.NET MVC 3 RC 1 (3.0.11029.0) 
Full name: System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
Code base: file:///C:/WINDOWS/Microsoft.Net/assembly/GAC_MSIL/System.Web.Mvc/v4.0_3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll 
Deployment: GAC-deployed 

развития:

Assembly version: Unknown version (3.0.20105.0) 
Full name: System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
Code base: file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Web.Mvc/v4.0_3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll 
Deployment: GAC-deployed 

Новая версия RTM (3.0.20105.0) находится в каталоге бен приложения. Тем не менее, приложение использует тот, что находится в GAC вместо локального bin. Мой опыт работы с приложениями Windows - локальная библиотека, развернутая в DLL, всегда имеет приоритет, поскольку GAC проверяется только в том случае, если DLL не найдена в том же каталоге, что и приложение. Это соглашение не относится к веб-приложению.

Как я могу заставить его использовать мою новую версию bin, развернутую DLL (3.0.20105.0)?

Edit: Я на самом деле попробовать связывание перенаправлять так:

<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
<bindingRedirect oldVersion="3.0.11029.0" newVersion="3.0.20105.0" /> 

Я попытался несколько вариаций на oldversion, таких как 0.0.0.0-4.0.0.0. Во всех моих попыток, как правило, это либо загрузили старую версию, или дал мне это сообщение об исключении:

Could not load file or assembly 'System.Web.Mvc' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference. 

Связывание журнала не имеет каких-либо ошибок, кроме этого был две последние строки:

WRN: Comparing the assembly name resulted in the mismatch: Build Number 
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated. 

ответ

0

You может изменить ваши файлы .config, чтобы использовать для этого assembly binding redirection и заставить среду выполнения загружать разные версии по мере необходимости.

+0

Обновленный вопрос с информацией о том, что я пробовал по этому поводу. – AaronLS

1

Ответ: SO Dll in both the bin and the gac, which one gets used? Примечание. Вы должны запустить strong name hijack или использовать версию GAC. Я бы переделал это, это не MVC конкретный.

+0

Я в замешательстве. В связанном вопросе он указывает, компилирую ли я более новую версию, чем в GAC, и bin разворачивает ту же самую более новую версию, тогда она должна иметь приоритет над GAC. Это описывает мой сценарий, за исключением, к сожалению, поведение не так, как они описывают, поскольку оно игнорирует мою версию new/compiled против bin в пользу версии GAC. – AaronLS

+0

Что такое сильный захват имени? Я знаком с использованием инструмента sn на своих собственных сборках, но не уверен, что вы подразумеваете, что я делаю с сборкой MS? – AaronLS