Почему 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, могут различаться, но компилятор может пометить тип его основной версией.Это не только поможет отличить новые объекты от старых, но и позволит новому компилятору автоматически создавать код для адаптации старых типов к новой версии.