Не удалось загрузить файл или сборку "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. Немного взлома, но элегантное решение может прийти позже.