Как устранить неоднозначность между библиотекой DLL моего проекта и библиотекой DLL в GAC?

В настоящее время я работаю над еще одна проблема в моем проекте ASP.NET MVC. Чтобы лучше понять, что происходит в кодовой базе, я решил сослаться на проект исходного кода ASP.NET MVC в своем собственном проекте, добавив файл решения в свои ссылки.

Когда я сделал это, я начал получать ошибки HTTP 404.

Так получилось, что у меня была установлена ​​точка останова на методе OnException() метода HandleErrorAttribute, иначе поиск реальной проблемы мог бы занять много времени. Когда я навожу курсор на параметр filterContext в вызове метода OnException, я получаю это Exception описание:

    The type 'System.Web.Mvc.ViewMasterPage' is ambiguous: 
        it could come from assembly [path to assembly in GAC] 
        or from assembly [path to assembly in my project] 

Сборка в GAC есть, потому что я установил Выпуск ASP.NET MVC 2.0 RC2.

Как мне лучше разрешить эту двусмысленность?


person Robert Harvey    schedule 24.02.2010    source источник


Ответы (2)


System.Web.Mvc упоминается в Web.Config в разделе <Compilation><Assemblies>. В моем приложении эта запись имеет атрибут маркера открытого ключа.

Я решил проблему, удалив атрибут PublicKeyToken.

Итак, это:

<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral,
     PublicKeyToken=31BF3856AD364E35"/> 

становится таким:

<add assembly="System.Web.Mvc, Version=2.0.0.0, Culture=neutral"/> 

Очевидно, Visual Studio не может найти подписанную сборку в GAC, когда отсутствует PublicKeyToken, поэтому она вынуждена использовать локальную сборку проекта.

person Robert Harvey    schedule 24.02.2010

Я не уверен, но, возможно, ваш ответ заключается в теге AssemblyBinding вашей конфигурации: http://msdn.microsoft.com/en-us/library/twy1dw1e.aspx

person AaronLS    schedule 24.02.2010
comment
System.Web.Mvc не упоминается в AssemblyBinding, но имеется в Compilation/Assemblies. Я думаю, что решил это. Спасибо за помощь. +1 - person Robert Harvey; 25.02.2010