Ответ 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.