Невозможно разрешить зависимость от сборки FSharp.Core 4.4.1.0 при использовании VS 2017

Я разрабатываю в VS 2015 и F # 4.0 (4.4.0.0) довольно долгое время.

С выпуском VS 2017 я хочу открыть решения в новейшей VS для разработки, но все же сохраняю проекты VS 2015, F # 4.0,.NET 4.5.2. Сервер сборки также должен будет использовать VS 2015 некоторое время.

Насколько я помню, такой сценарий не был проблематичным в более ранних версиях версии VS, но я не думаю, что в то время я использовал F #.

Я открыл решение и попытался скомпилировать его. Я получаю эту ошибку в проекте приложения С#. (Существуют и другие приложения С#, и по крайней мере одна ссылается на библиотеку F #.)

Неизвестная ошибка сборки, "Невозможно разрешить зависимость от сборки" FSharp.Core, Version = 4.4.1.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a ', потому что она не была предварительно загружена. При использовании API ReflectionOnly зависимые сборки должны быть предварительно загружены или загружены по требованию через событие ReflectionOnlyAssemblyResolve.

Все мои проекты F # в решении - 4.0 (4.4.0.0). Я дважды проверял.

Почему это происходит?

Ответы

Ответ 1

Я искал "4.4.1.0" и обнаружил, что в папке "obj" проекта С# был файл .exe.config, который отличается от app.config. У этой дополнительной информации это не было в app.config проекта.

<runtime>
...
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.4.1.0" newVersion="4.4.1.0" />
      </dependentAssembly>
    </assemblyBinding>

Почему это добавляется автоматически и почему только в этом конкретном проекте С#?

Я попытался скопировать этот раздел в app.config проекта и изменить его на 4.4.0.0 в обоих местах, но это не сработало. Также попытался использовать "4.4.1.0" в качестве верхнего предела старой версии и иметь "4.4.0.0" в качестве новой версии, но все равно не работал. Такая же ошибка компилятора.

Затем я удалил этот раздел, и я ссылался на FSharp.Core 4.4.0.0 в проекте С#. Это, наконец, избавилось от ошибки компиляции.

Я запустил программу. Он разбился с этим исключением.

Необработанное исключение: Не удалось загрузить файл или сборку "FSharp.Core, Version = 4.4.1.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a" или одну из его зависимостей. Расположенное определение манифеста сборки не соответствует ссылке на сборку. (Исключение из HRESULT: 0x80131040)

Я снова ввел раздел с переадресацией, и теперь программа работает нормально.

Подводя итог, я добавил ссылку на FSharp.Core 4.0, и перенаправление выглядит как

<bindingRedirect oldVersion="0.0.0.0-4.4.1.0" newVersion="4.4.0.0" />

С этими изменениями решение по-прежнему работает так же, как ожидалось, и в VS 2015.

Ответ 2

Проверьте ссылки сборки сборки в сообщении. Для меня у меня была ссылка на сборку X, которая имела ссылку на Y. Поскольку Y отсутствовал, я получил эту ошибку. Обратившись к Y, ошибка была решена для меня.