Не удалось загрузить файл или сборку "WebGrease" одной из своих зависимостей. Установленное определение манифеста сборки не соответствует ссылке на сборку

У этой проблемы много решений, пожалуйста, прочитайте все ответы ниже, они также помогут вам решить вашу проблему. Если вы найдете новый способ решить эту проблему, пожалуйста, задокументируйте в своем ответе

Я пытаюсь добавить System.Web.Optimization в мое решение ASP.NET Web Forms. Я добавил Структуру веб-оптимизации Microsoft ASP.NET через пакеты NuGet. Он добавил Microsoft.Web.Infrastracture и WebGrease (1.5.2) ссылки.

Однако, когда я запускаю

<%= System.Web.Optimization.Scripts.Render("~/bundles/js")%>

Я получаю ошибку времени выполнения

Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

Я попытался добавить assemblyBinding в Web.Config

<runtime>
  <legacyUnhandledExceptionPolicy enabled="1"/>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.5.1.25624" newVersion="1.5.2.14234"/>
      </dependentAssembly>
    </assemblyBinding>
</runtime>

Но без везения.

Я заметил, что моя веб-конфигурация WebSite содержит эту строку

 <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

Если я заменил его на

 <configuration>

Затем все работает, и я не получаю ошибку времени выполнения. К сожалению, мне нужен xmlns. Другие компоненты моего проекта зависят от него.

Почему оптимизация пытается загрузить более старую версию, когда схема указывает на v2.0? Есть ли способ заставить его загрузить последнюю или единственную доступную версию WebGrease.dll?

Что еще я могу попробовать, не меняя

 <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> ?

Спасибо за любую помощь, которую вы можете предоставить!

Изменить: 1) Прикрепление результата FusionLog. Может быть, это будет полезно

=== Pre-bind state information ===
LOG: User = [USER]
LOG: DisplayName = WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35
(Fully-specified)
LOG: Appbase = file:///C:/Projects/PROJECT_NAME/trunk/www.PROJECT_NAME.com/
LOG: Initial PrivatePath = C:\Projects\PROJECT_NAME\trunk\www.PROJECT_NAME.com\bin
Calling assembly : System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Projects\PROJECT_NAME\trunk\www.PROJECT_NAME.com\web.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35

2) Подтверждено, проблема в

<configuration  xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">

Однако я не понимаю, почему

Ответ 1

Наконец, проблема была в <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">. Это вызвало метод Render для загрузки неправильной сборки WebGrease.

Удаление xmlns решило проблему для меня.

Ответ 2

Я встретил эту проблему на prod-сервере, в то время как все работало отлично на машине разработчика. Эти линии помогли:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.0" newVersion="1.5.2.14234"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Ответ 3

Я изменил свой файл web.config так, чтобы newVersion = "1.0.0.0" соответствовал моей версии файла Referenced:

<dependentAssembly>
    <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-1.3.0.0" newVersion="1.0.0.0" />
  </dependentAssembly>

Ответ 4

На всякий случай это помогает кому-то, у меня была такая же проблема, но обнаружил, что это вызвано зависимой сборкой WebGrease, а именно Antlr3. Он добавил следующее к элементу runtime в web.config при установке через NuGet:

  <dependentAssembly>
    <assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
  </dependentAssembly>

Просто удалите эту исправленную проблему.

Ответ 5

В моем случае проблема оказалась Инструкция по обработке XML (PI) (<?blah ... ?>) в моем web.config файл. Совершенно правовой XML! но это вызвало появление этого сообщения об ошибке и заставил меня заглянуть во все неправильные места.

Мой web.config был похож на следующий: обратите внимание на XML PI в разделе connectionStrings:

<configuration>
    ...
    <connectionStrings>
        <?blah ... ?>
        <add name="AppDb" ... />
    ...
    </connectionStrings>
    ...
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            ...
            <dependentAssembly>
                <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
                <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
            </dependentAssembly>
            ...
        </assemblyBinding>
    </runtime>
    ...
</configuration>

Обратите внимание, что XML PI <?blah ... ?> находился в разделе connectionStrings, т.е. нигде рядом с разделом assemblyBinding или bindingRedirect записей для WebGrease и т.д. (которые были правильными!).

Ответ 6

Добавьте пакет NuGet System.Web.Optimization, набрав

Install-Package Microsoft.AspNet.Web.Optimization

в консоли Nuget Package Manager. Это должно разрешить зависимость и позволить VS загрузить правильную сборку WebGrease.

Ответ 7

У меня была такая же проблема, но это было результатом копирования решения с моего локального компьютера разработки на сетевой диск, где мы храним наши проекты. Я не смог заставить ссылку работать правильно, когда я открыл решение с подключенного диска, и я все время получал эту ошибку. Только временное обходное решение, которое я нашел для моей конкретной проблемы, заключалось в том, чтобы открыть решение из своего UNC-пути, а не на букву сопоставленного диска.

Ответ 8

встретил ту же проблему в веб-формах сайта .net 4.5. Простое обновление пакетов nuget до последней версии помогло мне.