Ответ 1
Если вы скомпилируете код с помощью
--standalone
компилятор выполнит эквивалент статической привязки. В результате ссылки не понадобятся во время выполнения.
Это, вероятно, лучшее, что вы можете сделать.
Я попытался создать переносимую библиотеку классов, используя F #, которая может быть использована, например, из кода С#. Но похоже, что использование стандартных конструкций F #, таких как raise
, делает FSharp.Core.dll необходимым для использования созданной Portable Class Library.
raise(ArgumentNullException("parameter"))
преобразуется в
Operators.Raise<Unit>(new ArgumentNullException("source"));
(где Operators.Raise
живет в пространстве имен Microsoft.FSharp.Core
) вместо просто
throw new Exception
Я предполагаю, что это не единственная конструкция F #, которая скомпилирована для некоторого статического метода из библиотеки FSharp.Core.dll.
Есть ли способ создать F # -код (особенно Portable Class Library), который после компиляции не требует ссылки на FSharp.Core.dll или любую другую библиотеку, специфичную для FSharp?
Если вы скомпилируете код с помощью
--standalone
компилятор выполнит эквивалент статической привязки. В результате ссылки не понадобятся во время выполнения.
Это, вероятно, лучшее, что вы можете сделать.
В идеале вы будете ссылаться на переносимую версию FSharp.Core, которая была построена против определенного профиля, а не статически связывать все.
Я думаю, что есть портативные версии профилей 47, 88 и 158.