2013-11-03 1 views
1

Моя локальная версия моего кода работает очень хорошо. Но когда я делаю веб-развертывания я получаю следующее исключение:DotNetOpenAuth, вызывающий не может загрузить Assembly System.Web.WebPages.Razor

Не удалось загрузить файл или сборку «System.Web.WebPages.Razor, Version = 2.0.0.0, культура = нейтральной, PublicKeyToken = 31bf3856ad364e35» или одной из его зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Соответствующий трассировки стека линия

[FileLoadException: Не удалось загрузить файл или сборку «System.Web.WebPages.Razor, Version = 2.0.0.0, культура = нейтральный, PublicKeyToken = 31bf3856ad364e35 'или одна из его зависимостей. Определение манифеста размещенной сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)] Microsoft.Web.WebPages.OAuth.PreApplicationStartCode.Start() +0

Это, кажется, связано с тем, что NuGet пакет для Razor является версия 3.0, но DotNetOpenAuth пакет использует версию 2.0

Также проблема возникает только при развертывании на моем веб-сайте Azure. (В настоящее время я использую бесплатный веб-сайт, а не материал webrole/workrole). Я использую webdeploy, и он работает нормально в предыдущих версиях, но я считаю, что это имеет какое-то отношение к пакетам nuget.

Обновление: Я не могу решить это. Я попытался развернуть по FTP, который удалил всю папку до развертывания, но это тоже не сработало. Нугет был кошмаром.

+0

Отметьте это http://stackoverflow.com/questions/19741860/cannot-utilize-simplemembership-features-when-hosting-on-azure – WannaCSharp

+0

Я видел это сообщение, и я добавил все, чтобы быть локальной копией true. Но эта проблема, которую я вижу здесь, заключается в том, что один пакет (Open Auth) ссылается на версию 2 dll бритвы, в то время как у меня есть версия dll dll бритвы из проекта mvc. – DanScan

+0

@DanScan - неуверенный, если у вас все еще есть эта проблема, но поздний комментарий заставил меня вернуться к моему сообщению, и я добавил дополнительную информацию. – Tommy

ответ

3

Поместите это в свой файл web.config. Это заставит структуру перенаправить зависимости к соответствующей версии.

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

Edit из будущего

Как я Пересмотреть этот пост из-за ошибки XML указано в приведенном выше синтаксисе, есть несколько других мест, которые, скорее всего, необходимо также обновляется. Во-первых, в первичном web.config, эта линия должна быть изменена в разделе <appSettings> к следующему

<appSettings> 
    <add key="webpages:Version" value="3.0.0.0" /> 

Кроме того, есть web.config в папке представлений, которые должны быть обновлены до следующей

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

В принципе, вы хотите идентифицировать все места, которые упоминают razor 2.0.0.0, и изменить их на 3.0.0.0 в дополнение к перенаправлению сборки. Я считаю, что у меня есть все те места, которые указаны выше.

Если вы обновляете всю инфраструктуру MVC, есть дополнительная работа, которая также должна быть выполнена, но это не является основанием для вопроса.

+1

Я пробовал это. Это также нарушило местную версию. Я также пробовал разные места для этой ценности без везения. Я твердо верю, что это связано с тем, что OAuth ищет версию 2, но пакет MVC использует версию 3 пакета Razor. – DanScan

+0

Согласно MSDN должен быть дочерним элементом , поэтому я не думаю, что он должен находиться внутри элемента . См. Http://msdn.microsoft.com/en-us/library/twy1dw1e%28v=vs.110%29.aspx. Но у меня такая же проблема, и это тоже не исправляло :-( – Appetere

+0

@Steve - спасибо за обновление, я исправил свой код – Tommy

2

У меня была та же проблема. Я развертывал сайт Azure, где ранее я использовал приложение MVC4. Я исправил его, «удалив дополнительные файлы в пункте назначения».

Щелкните правой кнопкой мыши project-> publish-> Settings-> expand File Publish Options-> check Удалить дополнительные файлы в пункте назначения.

+0

Решение (хотя это и не совсем ответ) было связано с удалением последней версии nuget MVC. Затем из командной строки загрузите соответствующую версию. Пакеты OAuth потребовали другую версию бритва затем загружалась пакетом MVC. – DanScan

0

Я использую развертывание Git и имел ту же проблему. Я не видел вариант, где я мог бы удалить дополнительные файлы в пункте назначения.

Я использовал FTP для подключения к Azure Host, а затем удалил все в каталоге /site/wwwroot. Затем я использовал вкладку «Портал управления», вкладку «Развертывания» и, наконец, команду «Синхронизация» (т. Е. Передислоцировать), и это устранило проблему.

Смежные вопросы