Почему файл FSharp.Core.dll не содержит основной версии в своем названии? - PullRequest
0 голосов
/ 05 декабря 2018

Почему FSharp.Core.dll не содержит основной версии в своем названии?Разве это не поможет решить проблемы двоичной совместимости?

Насколько я понимаю при разработке библиотеки, разработанной на F #, она должна зависеть от FSharp.Core.dll пакета NuGet с верхним пределом версиикак <CurrentMajor+1.Верхняя версия не должна оставаться без ограничений, потому что двоичная совместимость гарантируется только между библиотеками, имеющими одинаковую основную версию.Просто семантическая версия модель.

Давайте теперь представим библиотеку, которая полезна, не имеет ошибок и логически завершена.Другими словами, больше нет необходимости поддерживать это.Period.

Затем F # 5 освобождается и ... пользователи библиотеки не могут больше использовать его в проектах, ссылающихся на библиотеки, созданные с помощью F # 5.x


Хорошо,верхнее утверждение является ошибкой (Для библиотек F# 2, F# 3 и F# 4 FSharp.Core версии 4.x.y.z.)

Тем не менее вопрос остается в силе.

В какой-то моментвремя основной версии будет увеличено до 5.Это якобы нарушит бинарную совместимость.(Почему иначе вы сделали бы приращение?)

Вот что я имею в виду:Ссылки проекта NuGet.New и NuGet.Old.
NuGet.Old ссылки FSharp.Core.dll [4.x.y.z, 5.0.0.0)NuGet.New ссылки FSharp.Core.dll [5.0.0.0, 6.0.0.0)NuGet не допустит этого.Это конфликт версий.

На самом деле я столкнулся с подобной проблемой вчера (4 декабря 2018 г.), когда пакет EF Core 2.2 NuGet уже был доступен, но Sdk для ASP.NET Core 2.2 не сделал.

Micrsofot.AspNetCore.App закрепленный метапакет версии EF Core в диапазоне [2.1.0, 2.2.0).После того, как я сослался на EF Core 2.2 в моем проекте DAL, все решение перестало собираться из-за конфликта версий.


Однако, если бы это были FSharp4.Core.dll и FSharp5.Core.dll, они могли бы работать бок о бок.

Да, соглашения и формы типов CLR, которые представляют одинаковые концепции F # 4.x и F # 5.x, могут различаться, но компилятор может пометить тип его основной версией.Это не только поможет отличить новые объекты от старых, но и позволит новому компилятору автоматически создавать код для адаптации старых типов к новой версии.

1 Ответ

0 голосов
/ 06 декабря 2018

Основная языковая версия - это первое число в пакете и бинарная версия начиная с F # 4.5.

FSharp.Core является двоично-совместимым.В вашем сценарии пользователи F # 5 по-прежнему смогут использовать старую библиотеку.В противном случае это будет ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...