Подтвердить что ты не робот

Aspnet_compiler находит неправильную версию System.Web.WebPages 1.0.0.0 вместо 2.0.0.0

У меня есть проект ASP.NET MVC4, который отлично компилируется в VS2010. Для развертывания я запускаю Nant script, который пытается предварительно скомпилировать веб-сайт с помощью aspnet_compiler.exe, но я продолжаю работать с проблемой сборки с помощью System.Web.WebPage

error CS1705: Assembly 'System.Web.Mvc, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' использует 'System.Web.WebPages, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' который имеет более высокую версию, чем ссылочная сборка 'System.Web.WebPages, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35'

У меня также есть следующие привязки сборки в моем web.config:

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

и мой csproj имеет следующую ссылку:

<Reference Include="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
  <Private>True</Private>
 <HintPath>..\packages\AspNetWebPages.Core.2.0.20126.16343\lib\net40\System.Web.WebPages.dll</HintPath>
</Reference>
4b9b3361

Ответ 1

Я решил эту проблему, явно ссылаясь на сборку 2.0 в Web.config. Я полагаю, что по какой-то причине компилятор ASP.NET(в моем случае при запуске MvcBuildViews) сначала использует старую сборку 1.0, если она найдена.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- … -->
  <system.web>
    <!-- … -->
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
      </assemblies>
    </compilation>
    <!-- … -->
  </system.web>
  <!-- … -->
</configuration>

BTW: Похоже, эта проблема возникла впервые после добавления стороннего компонента ASP.NET MVC 3.0. Этот компонент отлично работает через привязку сборки, но это может быть причиной того, что компилятор ASP.NET пытается сначала загрузить веб-страницы 1.0.

Ответ 2

У нас была аналогичная проблема.

Теперь мы используем Visual Studio 2012 для разработки и когда мы конвертировали проект 2010 на 2012 год и пытались развернуть его, ASP.NET требовал 2.0.0.0 вместо 1.0.0.0.

После некоторого расследования я увидел, что проект не ссылался на определенную версию System.Web.WebPages, поэтому после обновления до VS 2012 он нашел версию 2.0.0.0.

Если вы удалите ссылку из своего проекта и затем повторно добавите конкретную версию из GAC, она будет работать правильно.

Ответ 3

Для нас проблемой была старая копия соответствующей DLL в папке _bin_deployableAssemblies. Удалив это, мы правильно настроили версию 2.0.

Ответ 4

Эта ошибка также возникает для меня, когда для параметра MvcBuildViews установлено значение true.

Я заметил, что всегда получаю эту ошибку при построении всего решения с помощью "Build Solution". В этот момент, если я сразу же построю проект MVC сам по себе (щелкните правой кнопкой мыши по проекту, затем "Построить" ), проект MVC будет успешно создан.

Похоже, что создание проекта MVC само по себе будет успешным, если оно не инициирует сборку его зависимых проектов (то есть, они актуальны). Но построение с использованием "Build Solution" всегда терпит неудачу с этой ошибкой.

Ответ 5

У меня возникла эта проблема при обновлении сайта с MVC 3 до 5.2.3.0.

Моя проблема заключалась в том, что TFS не добавляла пакеты и связанную с ними DLL из установки nuget.

Я вручную добавил следующие папки в папку пакетов решения.

Microsoft.AspNet.Razor.3.2.3
Microsoft.AspNet.WebPages.3.2.3

Microsoft.Web.Infrastructure.1.0.0.0

После завершения сборки сервер сборки больше не имел проблемы.

Ответ 6

Я немного почесал голову над этой проблемой, когда у меня это было. В конце концов я заметил, что у меня был следующий раздел в разделе "runtime" моего web.config.

<runtime>
 . . .
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
. . .
</runtime>

Как вы можете видеть, это относится к версии 2 сборки, которая не соответствует следующему коду, который вы также имеете в разделе system.web/компиляции/сборки web.config.

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

Фактическая сборка, на которую ссылаются ссылки для проекта, действительно v1.0.0.0, поэтому я изменил первый фрагмент кода выше на следующий, что немедленно устранило проблему. Я не уверен, как ошибка попала туда в первую очередь.

<runtime>
 . . .
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
      </dependentAssembly>
. . .
</runtime>

Ответ 7

Для меня это была ссылка на System.Web.WebPages.Administration v1.0.0.0, кто был виновником. После удаления все работает без каких-либо настроек Web.config.

Ответ 8

В таком случае стоит использовать "Найти файлы" для всех файлов в корневой папке вашего решения.

В приведенном выше примере я бы поискал: System.Web.WebPages, Version=1.0.0.0

Таким образом, вы можете избавиться от всех ссылок на старую версию.

Ответ 9

Для меня эта проблема, скорее всего, вызвала обновление покупки до последней версии .NET с помощью установщика Web Platform, но у меня не было последней версии ASP.NET MVC. Обновление этого с помощью установщика веб-платформы устранило проблемы.

Ответ 10

просто перейдите к ссылкам и найдите System.Web.Mvc версии 4.0 или более и добавьте его. Я просто добавляю ссылку System.web.mvc 4.0.0.1 и работает.

Не забудьте удалить старую версию mvc.

Ответ 11

Удаление и повторная добавление справочной системы .Web.Mvc Работала ли я для меня