Обновлена целевая структура до 4.6, и это нарушило ссылки

#c# #asp.net-mvc

Вопрос:

В рамках моего веб-проекта я обновил целевую платформу с версии 4.5 до 4.6, и теперь я получаю ошибку во время выполнения. Я не знаю, почему его ищут System.Runtime, Version=4.0 . Любая помощь была бы очень кстати.

От

 <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
 

Для

 <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
 

обновление web.config

 <httpRuntime targetFramework="4.6" maxRequestLength="1024000" executionTimeout="150000"/>
<compilation targetFramework="4.6" debug="true"/>


 <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="Microsoft.Practices.ServiceLocation" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Practices.Unity" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="12.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31BF3856AD364E35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/>
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="dotless.Core" publicKeyToken="96b446c9e63eae34" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.0" newVersion="1.5.2.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
 

ошибка выполнения

Сообщение об ошибке компилятора: CS0012: Тип » Система.IEquatable`1 » определяется в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку «System.Runtime, Версия=4.0.0.0, Культура=нейтральная, PublicKeyToken=b03f5f7f11d50a3a».

Обновлено до версии 4.7.2

 <httpRuntime targetFramework="4.6" maxRequestLength="1024000" executionTimeout="150000"/>
<compilation targetFramework="4.7.2" debug="true"/>
 

ошибка выполнения

Сообщение об ошибке компилятора: CS0012: Тип » Система.Объект» определяется в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку «System.Runtime, Версия=4.0.0.0, Культура=нейтральная, PublicKeyToken=b03f5f7f11d50a3a».

Комментарии:

1. Давайте посмотрим на перенаправление привязки к сборке

2. @T. S. Я обновил привязку сборки.

3. вы можете попробовать что — нибудь глупое-закрыть visual studio и снова открыть проект. или… возможно, когда вы обновили целевую платформу, вы теперь берете ссылку из другой библиотеки DLL в одном из пакетов. Возможно, вам потребуется обновить пакеты. И я думаю, я знаю эту проблему . 4.6-странная версия. Это своего рода совместимость с netstandard, но для этого требуется множество дополнительных библиотек DLL, таких как System.Runtime. Вы должны перейти на 4.7.2 — это полностью совместимо с netstandard2.0, и вы избавитесь от этой проблемы.

4. Да, чтобы повторить то, что сказал @T. S. Поскольку вы обновляете целевую платформу до версии 4.6, почему бы не перейти до версии 4.8?

5. Избегайте 4.6 — добро пожаловать. Зачем вам понадобилось идти по нарастающей? Новый FW поддерживает все старое. Просто конвертируйте в последнюю версию, скомпилируйте и посмотрите, работает ли это. Если да — регистрация заезда

Ответ №1:

Я смог это исправить с помощью Enable latest C# and VB features for ASP.NET Project . Спасибо всем за помощь.