Какую версию dll следует использовать? Razor.DLL — манифест не соответствует (0x80131040)

Какую dll мне следует использовать и откуда ее взять? Несколько ответов в Stack Overflow объясняют проблему и решение, как исправить эту ошибку, но ни один из них не говорит мне, какую из версий следует использовать. Итак, вот мой вопрос - он поможет всем тем, у кого есть похожая проблема:

я получаю

The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

У меня есть в проекте Visual Studio после Nuget пакета Nancy Razor ссылка на System.Web.Razor с версией 4.0.30319

Глядя в папку bin, у меня есть System.Web.Razor с версией файла 2.0.20715.0, я не уверен, что версия файла имеет какое-либо отношение к версии программного обеспечения...

Пакет Microsoft.AspNet.Razor версии 2.0.30506.0 был установлен с пакетом Nancy.ViewEngines.Razor через Nuget.

Глядя под C:\Windows, у меня есть целый список временных местоположений для System.Web.Razor.DLL все под Microsoft.NET\Framework\v4.0.30319.0\Temporary ASP.NET Files\ только с одной, казалось бы, другой версией файла System.Web.Razor.DLL в каталоге: Microsoft.NET\assembly\GAC_MSIL\System.Web.Razor\v4_02.0.0.0_31bf....

Вот мой журнал

LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\me\Documents\Dev\MyProj\web.config
LOG: Using host configuration file: C:\Users\me\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/a98e1c21/1e31926/System.Web.Razor.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/a98e1c21/1e31926/System.Web.Razor/System.Web.Razor.DLL.
LOG: Attempting download of new URL file:///C:/Users/me/Documents/Dev/MyProj/bin/System.Web.Razor.DLL.
LOG: Using application configuration file: C:\Users\me\Documents\Dev\MyProj\web.config
LOG: Using host configuration file: C:\Users\me\Documents\IISExpress\config\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Redirect found in application configuration file: 2.0.0.0 redirected to 3.0.0.0.
LOG: Post-policy reference: System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/a98e1c21/1e31926/System.Web.Razor.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/a98e1c21/1e31926/System.Web.Razor/System.Web.Razor.DLL.
LOG: Attempting download of new URL file:///C:/Users/Me/Documents/Dev/MyProj/bin/System.Web.Razor.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

Я попытался удалить NUGET, очистив проект, удалив каталоги obj и bin, затем повторно NUGET Nancy Razor и перестроить.

Свойства списка ссылок моего проекта в System.Web.Razor.DLL говорят, что dll следует копировать локально.

Но безрезультатно.

Поэтому я хочу вручную установить ссылку на правильный файл. Где этот правильный файл?

Или я должен что-то сделать с GAC? Мешает ли это моему IIS Express из VS 2013?


Отредактировано 29 декабря 2015 г .:

Моя веб-конфигурация имеет следующее:

  <configSections>
<sectionGroup name="system.web.webPages.razor" 
              type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, 
                    System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, 
                    PublicKeyToken=31BF3856AD364E35">
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, 
                    System.Web.WebPages.Razor, Version=2.0.0.0, 
                    Culture=neutral, PublicKeyToken=31BF3856AD364E35" 
                    requirePermission="false" />

Файлы dll во временных каталогах версии 4.0.30319.0 являются копиями одного и того же файла. Свойства в ссылках (если я перейду к одному из них и добавлю к ссылкам проекта, имеют номер версии: 3.0.0.0, с версией среды выполнения 4.0.30319.0.

Когда я нахожусь в форме References.Add-Reference, она показывает мне, что версия файла: 3.0.20826.0.


person pashute    schedule 28.12.2015    source источник


Ответы (1)


Nancy.ViewEngines.Razor работает только с версиями Razor V2/V3. Возможно, вы сможете использовать V4 с перенаправлением сборки, но он полностью не протестирован, мы, вероятно, не добавим поддержку V4 до тех пор, пока не будет выпущена Nancy V2.

Изменить:

Я не совсем понимаю, как ваши ссылки испортились, я на самом деле сделал все обновления до Nancy.ViewEngine.Razor ссылок для поддержки версии 3 Razor и провел слишком много тестов из-за странных проблем с NuGet, извлекающих неправильную ссылку. Это первый вопрос о ссылках, поднятый с тех пор, как я сделал PR.

V3 зависит от .NET 4.5, поэтому, если ваш проект был .NET 4.0 и недавно обновлен до 4.5, возможно, он вытащил V2 и не обновил его до V3, потому что V2 пришел из GAC, когда зависимость была проверена.

Теоретически и V2, и V3 должны исходить от NuGet.

Чтобы быть в безопасности, я бы удалил ссылки на Razor и Nancy.ViewEngines.Razor, удалил конфигурацию из файла web.config. Затем переустановите из Nuget, это должно вытащить из NuGet и также вытащить Razor из NuGet. Затем все должно быть правильно настроено.

person Phill    schedule 29.12.2015
comment
Отредактировал вопрос. Версии, доступные в Gac и перечисленные в web.config, — это 2. Версия, с которой я сейчас работаю, на которую я ссылался вручную через просмотр... из временного проекта, — это 3. Она работает!! 1. Где официальная версия? 2. Почему так происходит, т.е. почему пришлось вручную выбирать v3? 3. И надо ли менять то, что написано в web.config? Что произойдет, когда я развернусь на своем реальном сервере (не IIS Express через Visual Studio)? Пожалуйста, обновите свой ответ, чтобы я мог его принять. - person pashute; 30.12.2015
comment
Хорошо, я попробую это. Тем временем все работает после того, как я вручную выбрал файл System.Web.Razor.DLL с версией 3 наугад. В любом случае я отмечаю это как ответ. - person pashute; 31.12.2015
comment
У меня точно такая же проблема. Мое приложение nancy использует v3, но когда я создаю службу Windows и устанавливаю в нее зависимости Nancy, оно развертывает v2, и Razor перестает работать. - person chdev77; 10.10.2016