Сборка fsi.exe: Кто-нибудь знает, как его встроить? - PullRequest
6 голосов
/ 09 января 2011

Долгое время читатель, самый первый вопрос. fsi.exe - это исполняемый файл .NET, поэтому он содержит свою собственную сборку со всеми методами yummy и всем, что fsi использует для выполнения сценариев F #.

Глядя на сборку в .NET Reflector (выберите свой класс, но Shell - лучший пример), выявляет кучу мусорных * имен, которые выглядят как украшенные функции C ++ (скажем, из Dependency Walker). Кстати, и немного не в этом, сборки F # компилируются практически одинаково, с большим количеством мусорных * имен, что наводит меня на мысль, что fsi.exe был написан на F #, возможно, как доказательство удобства использования?

В любом случае, вот мой вопрос: кто-нибудь изучал fsi.exe и выяснил, как встроить его в приложение .NET? Потому что я хотел бы использовать F # в качестве языка сценариев, но программы компилируются в (неожиданные) программы, и сценарии должны выполняться fsi.exe, что недопустимо в моем домене (мне нужна постоянная виртуальная машина). Я не ожидаю руководства по использованию fsi.exe, но мне любопытно узнать, играл ли кто-нибудь с ним и, если да, что вы узнали о том, как он работает?

Спасибо за ваше время.

* Мусор на первый взгляд. Очевидно, они отформатированы именно таким образом по определенной причине, которая находится под капотом.

Ответы [ 2 ]

6 голосов
/ 09 января 2011

Насколько я знаю, fsi.exe не предоставляет API, который вы могли бы использовать для встраивания его в свое приложение (например, для реализации сценариев).Я думаю, что по сути есть два варианта:

  • Если вы хотите использовать существующий fsi.exe напрямую, единственный способ - запустить его с использованием класса .NET Process и каким-то образом общаться с ним.,Это должно быть выполнимо - вы можете отправлять команды процессу, используя стандартный ввод.Чтобы прочитать вывод обратно, вы можете использовать стандартный вывод, но это дает вам только ограниченную информацию.Вероятно, можно было бы использовать .NET Remoting для связи между fsi.exe и вашим приложением (например, ваши объекты, загруженные в контексте скрипта в FSI, будут отправлять информацию вашему приложению через Remoting).

  • Другой альтернативой является использование версии с открытым исходным кодом для F # и изменение fsi.exe для предоставления всей информации, необходимой вам в качестве API.Это требует больше усилий, чтобы понять, как работает fsi.exe, но это должно быть выполнимо.Возможно, вам не нужно так много дополнений - состояние, поддерживаемое FSI, содержит такие вещи, как глобальные переменные.

Что касается лицензии - вы, вероятно, не можете использовать fsi.exe, поставляемый с Visual Studio.Я не уверен в fsi.exe, который идет с выпуском CTP.Компиляция его из исходных текстов (доступно здесь ), безусловно, подойдет (потому что он имеет релиз с открытым исходным кодом).

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