Приоритет бина развернутых библиотек DLL над библиотеками GAC для веб-приложений? - PullRequest
4 голосов
/ 07 марта 2012

У меня проблема с использованием старой сборки GAC вместо новой версии сборки в корзине.

Сервер:

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) находится в каталоге bin приложения. Тем не менее, приложение использует тот, что находится в GAC, вместо локального бункера. Мой опыт работы с приложениями Windows заключается в том, что развернутая локальная библиотека DLL всегда имеет приоритет, потому что GAC проверяется, только если DLL не найдена в том же каталоге, что и приложение. Это соглашение не относится к веб-приложению.

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

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

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

Я пробовал несколько вариантов старой версии, например 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.

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Отвечено SO Dll как в корзине, так и в gac, какой из них используется? Обратите внимание, вы должны запустить угон строгого имени , иначе он будет использовать версию GAC.Я бы повторил это, это не специфично для MVC.

0 голосов
/ 07 марта 2012

Вы можете изменить файлы .config для использования перенаправления привязки сборки для этого и заставить во время выполнения загружать разные версии по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...