Ошибка публикации MVC4 Azure-не удалось загрузить файл или систему сборки.Сеть.Бритва

проект работает нормально локально, его только при публикации я получаю следующую ошибку:

не удалось загрузить файл или сборку 'System.Сеть.Razor ' или одна из его зависимостей. Определение манифеста сборки расположены не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

проведя последние несколько часов в гугле, проблема, похоже, в том, что пакет nuget, который я добавил в проект, ссылается на razor 1 и перезаписал мою dll razor 2. Я пробовал копирование библиотеки dll razor 2.0.0.0 в ссылки вместо 1, но ошибка сохраняется. Здесь конфликт показан в подробном выводе сборки:


произошел конфликт между системой".Сеть.Бритва, версия=1.0.0.0, культура=нейтральная, PublicKeyToken=31bf3856ad364e35 " и " система.Сеть.Бритва, версия=2.0.0.0, культура=нейтральная, PublicKeyToken=31bf3856ad364e35". 1> Система".Сеть.Razor, Version=1.0.0.0, Culture=нейтральный, PublicKeyToken=31bf3856ad364e35 " был выбран потому, что он была первичная и "система".Сеть.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" не было. 1 > ссылки, которые зависят от " системы.Сеть.Бритва, версия=1.0.0.0, культура=нейтральная, PublicKeyToken=31bf3856ad364e35 " [C:Program файлы (x86)Microsoft ASP.NETASP.NET веб-страницыv1.0СборкиСистема.Сеть.Бритва.файл DLL.] 1> C:Program файлы (x86)Microsoft ASP.NETASP.NET веб-страницыv1.0СборкиСистема.Сеть.Бритва.файл DLL 1 > элемент файла проекта включает в себя ссылка "C:Program файлы (x86)Microsoft ASP.NETASP.NET веб-страницыv1.0СборкиСистема.Сеть.Бритва.файл DLL." 1> Система.Сеть.Razor, Version=1.0.0.0, культура=нейтральный, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL 1 > ссылки, которые зависят от " системы.Сеть.Бритва, версия=2.0.0.0, культура=нейтральная, PublicKeyToken=31bf3856ad364e35 " [C:UsersJackSkyDriveLessonUp - ... ТекущийпакетыRazorEngine.3.0.8libnet40система.Сеть.Бритва.файл DLL.] 1> C:UsersJackSkyDriveLessonUp.ТекущийпакетыMicrosoft.сеть САШ.страницы.2.0.20710.0libnet40System.Сеть.страницы.Бритва.файл DLL 1> пункт Файл проекта включает что вызвало ссылка "C:UsersJackSkyDriveLessonUp.ТекущийпакетыMicrosoft.сеть САШ.страницы.2.0.20710.0libnet40System.Сеть.страницы.Бритва.файл DLL." 1> Система.Сеть.В MVC, версия=4.0.0.0, культуры=нейтральный, значения PublicKeyToken=31bf3856ad364e35, параметр processorarchitecture=MSIL в 1> Рекапчи


оттуда он продолжает перечислять другие пакеты в зависимости от razor 2.

пакеты, которые я добавил в проект, были; Recaptcha, Recaptcha.mvcModel и Postal. Кто-нибудь знает, какие шаги я могу предпринять для решения этой проблемы? Дайте мне знать, если есть больше информации, я могу дать, что может привести к решению.

5 ответов


убедитесь, что на dll 2.0 есть ссылка и скопируйте local = true, затем попробуйте добавить перенаправление привязки сборки в интернете.config:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>
</assemblyBinding?

у меня была такая же проблема с Postal 0.8.0 в проекте MVC4. При установке Postal с NuGet он заменяет System.Web.Razor 2.0 С System.Web.Razor 1.0. Мне пришлось удалить ссылку на System.Web.Razor 1.0 а затем добавил обратно в System.Web.Razor 2.0. Вы должны дополнительно установить Копировать Локально to True в свойства System.Web.Razor и, конечно же, перестроить проект. Как только я это сделал, VS2012 скопировал System.Web.Razor.dll в развернутый каталог bin и проблема очищена.

Postal также добавляет эти зависимость от интернета.конфиг. Я их убрал и он все еще работает должным образом.

<dependentAssembly>
    <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="RazorEngine" publicKeyToken="9ee697374c7e744a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.0.8.0" newVersion="3.0.8.0" />
</dependentAssembly>

наконец-то это Отсортировано, загружено razor2.0 снова из nuget. Казалось, сортировать webconfig и исправлять ошибки зависимостей. Работает на azure не без проблем.


Проверьте файл проекта и веб-страницы.config, чтобы увидеть, были ли они munged пакетом NuGet. Известный проблемный ребенок почтовый 0.8.0. Он втягивает в качестве зависимости бета-версию RazorVersion (даже если вы отфильтровали, чтобы показать только стабильный). Даже если вы обновите RazorVersion до последней версии, которая является стабильной, ваш файл проекта заканчивается ссылкой System.Web.Razor Версия 1, и веб.config имеет неправильные привязки сборки во время выполнения.

исправить, сделать diff в вашем файле проекта и в интернете.config против тех из свежего, пустого проекта MVC 4. Затем скопируйте правильный Reference элемент System.Web.Razor из исходного файла проекта. В web.config удалите dependentAssembly элемент System.Web.Razor.

вот TLDD (лень, не дифф) текст файла проекта. Надеюсь, к тому времени, когда этот фрагмент устареет, основная причина(ы) будет исправлена.

<Reference Include="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\Microsoft.AspNet.Razor.2.0.20715.0\lib\net40\System.Web.Razor.dll</HintPath>
</Reference>

(к сожалению, вы не можете исправить это путем удаления и переустановка с помощью NuGet, потому что сначала вам нужно удалить оскорбительный зависимый пакет, такой как postal, который будет повторно разбивать вещи при его повторной установке.)


Оригинал..

  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="2.0.0.0" />
  </dependentAssembly>

по какой-то причине атрибут newVersion был установлен в версию 2.0.0.0, а dll-3.0.0.0

  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages.Deployment" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>

чем он работал