Портативная библиотека классов с использованием F # без ссылки FSharp.Core.dll

Я попытался создать переносимую библиотеку классов, используя 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?

Ответ 1

Если вы скомпилируете код с помощью

--standalone

компилятор выполнит эквивалент статической привязки. В результате ссылки не понадобятся во время выполнения.

Это, вероятно, лучшее, что вы можете сделать.

Ответ 2

В идеале вы будете ссылаться на переносимую версию FSharp.Core, которая была построена против определенного профиля, а не статически связывать все.

Я думаю, что есть портативные версии профилей 47, 88 и 158.