Не удалось загрузить файл или сборку "System.ValueTuple, Version = 0.0.0.0" или одну из ее зависимостей

Я попытался обновить свой проект до .NET Standard 2.0 и во время тестирования я получил исключение catch:

System.IO.FileLoadException: "Не удалось загрузить файл или сборку" System.ValueTuple, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51 "или одну из его зависимостей. Определение найденного манифеста сборки не соответствует ссылке на сборку.

Это, возможно, существует в package.config и существует в папке пакета. Я пробовал несколько версий пакета System.ValueTuple, результатом является один.

Почему версия зависимостей "0.0.0.0"?

Есть ли у кого-нибудь идеи о проблеме?

Предварительный просмотр VS 2017, UnitTestApp,.NET Framework 4.7.

В приложении unit test я создаю EF-модель (Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer 2.0.0-preview2-final, она требуется в стандартном приложении .NET). Метод unit test - вставьте в таблицу несколько строк, используя модель EF db, и вызовите "savechanges", после чего выполните это исключение.

Когда я использовал EntityFrameworkCore 1.1.2 (dll с EF-моделью - Standard 1.4, unit test Framework 4.6.2) - этот тест работал хорошо.

Ответ 1

Я решил эту проблему, включив Automatic Binding Redirection в моем проекте .NET Framework 4.7 (который ссылается на библиотеку .NET Standard 2.0). Перенаправление привязки можно включить, вручную отредактировав файл проекта .csproj и добавить следующий фрагмент из дочернего элемента Project:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

Visual Studio затем во время сборки генерирует необходимые перенаправления сборки для проекта app.config, аналогично этому:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
  </dependentAssembly>
</assemblyBinding>

позволяет загружать правильную сборку.

Ответ 2

Я боролся с чем-то похожим - dll в папке bin webapi2 sln после сборки. Я удалил список dll и каждый раз обновлялся - ошибка переходит к другой dll. Наконец, после удаления 8 dll сайт срабатывает правильно. Следующим шагом будет написать post-build script, чтобы удалить эти dll из папки bin. Немного взлома, но элегантное решение может прийти позже.