2010-05-28 3 views
3

Мне нужны произвольные прецизионные рациональные числа, которые мне даны для понимания, доступны в Powerpack F #. Мой вопрос касается механики распределения; моя программа должна быть в состоянии компилировать и запускать как на Windows/.Net, так и на Linux/Mono, по крайней мере, так как у меня есть потенциальные пользователи на обеих платформах. Насколько я понимаю, наилучшей процедурой является:F # powerpack and distribution

  1. Загрузите пакет PowerPack .zip, а не инсталлятор.

  2. Скопируйте DLL в мою директорию программы.

  3. Скопируйте прилагаемый файл лицензии в каталог моей программы, чтобы убедиться, что все находится над доской.

  4. Объявляйте ссылки и продолжайте использовать функции, которые мне нужны.

  5. Отправляйте вышеуказанные файлы вместе с моим источником и двоичным кодом, а поскольку DLL использует байтовый код, он отлично работает на любой платформе.

Правильная процедура? Я что-то пропустил?

ответ

5

Вы, по сути, правильные, произвольные прецизионные рациональные числа доступны только в PowerPack (BigInteger является частью .NET 4.0, но рациональные все еще F # специфичны).

Однако вам также необходимо будет распространять вашу программу с распределенным распределением времени F # (то есть сборка FSharp.Core.dll). Он содержит некоторые базовые типы F # (такие как типы, используемые для представления функций), которые не являются частью стандартной среды выполнения .NET.

Когда вы добавляете ссылку на свой проект, компилятор включает в себя имя и версию указанной библиотеки в вашем приложении. Когда приложение запускается, среда выполнения пытается найти библиотеку в разных местах. Таким образом, для развертывания приложения на .NET и Mono вам необходимо (каким-то образом) распространить ваше приложение вместе с FSharp.Core.dll и FSharp.PowerPack.dll.

  • The F # и F распространяемых # PowerPack монтажников разместить библиотеку в GAC (глобальный кэш сборок), который является общим для всех .NET приложений на компьютере. В Mono вы можете получить тот же результат, используя gacutil tool (из командной строки). В этом случае вам нужно скопировать их где-нибудь (в любом месте) и запустить этот инструмент. Ваше приложение найдет их в GAC.

  • В качестве альтернативы, если вы поместите сборки в ту же папку, что и ваше приложение (exe файл), то и .NET, и Mono должны найти их правильно, и они должны работать. Я считаю, что это обескураживается по причинам, связанным с версиями (например, глобально установленный файл можно легко обновить), но я не думаю, что лицензия запрещает эту форму развертывания.

Кажется, что для создания.NET/Mono, с использованием второго метода будет проще (поскольку это позволяет простое xcopy depoloyment).

+0

Как насчет опции -стандарта, было бы плохой идеей? – Benjol

+0

@Benjol: Хорошая точка! Параметр '--standalone' компилирует все ссылочные библиотеки в сборку (поэтому сборка должна работать на простой платформе). Это немного «неэлегантно», и это не сработает, если ваша программа состоит из нескольких сборок, но для проектов с одной сборкой это должно быть хорошо. –

+0

Это примерно то же самое для 4.5 NET? – Cynede

Смежные вопросы