2011-01-09 12 views
6

Długi czas czytelnika, pierwsze pytanie. fsi.exe to plik wykonywalny .NET, dlatego zawiera własny zestaw wraz z wszystkimi pysznymi metodami i czego fsi używa do wykonywania skryptów F #.fsi.exe Zgromadzenie: Ktoś wie, jak to osadzić?

Patrząc na zgromadzenie w .NET Reflector (wybierz swoją klasę, ale Shell jest najlepszym przykładem) odsłania garść śmieci * nazw, które wyglądają jak urządzone funkcje C++ (np. Z Dependency Walker). Nawiasem mówiąc i nieznacznie poza tym punktem, zestawy F # kompilują się w bardzo podobny sposób, z wieloma nazwami śmieci *, co prowadzi mnie do tego, że fsi.exe zostało napisane w języku F #, być może jako dowód użyteczności?

W każdym razie, oto moje pytanie: czy ktoś zaglądnął do fsi.exe i zorientował się, jak go osadzić w aplikacji .NET? Ponieważ chciałbym użyć F # jako języka skryptowego, ale programy kompilują się do (zaskakujących) programów, a skrypty muszą być wykonywane przez fsi.exe, co jest niedopuszczalne w mojej domenie (potrzebuję trwałej maszyny wirtualnej). Nie oczekuję poradnika na temat korzystania z fsi.exe, ale jestem ciekawy, czy ktoś z nim grał, a jeśli tak, to co odkryłeś na jego temat?

Dzięki za poświęcony czas.

* Śmieci na co dzień. Oczywiście są one sformatowane w ten szczególny sposób z konkretnego powodu, który znajduje się pod maską.

+1

Więc w zasadzie, chcesz [eval] (http://en.wikipedia.org/wiki/Eval)? –

+1

Zastanawiam się, czy licencja F # pozwala na umieszczanie fsi w pierwszej kolejności? – Juliet

+0

@Juliet: Dlaczego miałby to być problem z licencją? – leppie

Odpowiedz

6

Z tego co wiem, fsi.exe nie ujawnia żadnych interfejsów API, które można wykorzystać do osadzenia ich w aplikacji (np. Do implementacji skryptów). Myślę, że istnieją zasadniczo dwie opcje:

  • Jeśli chcesz użyć istniejących fsi.exe bezpośrednio, jedynym sposobem jest go uruchomić przy użyciu .NET Process klasę i komunikować się z nim jakoś. To powinno być wykonalne - możesz wysyłać polecenia do procesu przy użyciu standardowego wejścia. Aby odczytać dane wyjściowe, można użyć standardowego wyjścia, ale daje to tylko ograniczone informacje. Prawdopodobnie będzie możliwe użycie programu .NET Remoting do komunikacji między fsi.exe a twoją aplikacją (np. Twoje obiekty załadowane w kontekście skryptu w FSI będą wysyłać informacje do twojej aplikacji przez Remoting).

  • Inną opcją jest użycie funkcji F # open-source release i zmodyfikowanie fsi.exe w celu ujawnienia wszystkich potrzebnych informacji jako interfejsu API. Wymaga to więcej wysiłku, aby zrozumieć, jak działa fsi.exe, ale powinno być wykonalne. Prawdopodobnie nie potrzebujesz tak wielu dodatków - stan utrzymywany przez FSI zawiera rzeczy takie jak zmienne globalne.

chodzi o licencję - prawdopodobnie nie mogą korzystać fsi.exe rozpowszechniany z Visual Studio. Nie jestem pewien o fsi.exe, który pochodzi z wydania CTP. Kompilowanie go ze źródła (dostępne here) będzie zdecydowanie w porządku (ponieważ ma wersję open-source).

+0

Dzięki za wiadomość, Tomas.Po obejrzeniu pakietu F # widzę, że został napisany w języku F #, co jest uroczo ironiczne. Jestem w trakcie grzebania nad źródłem. Jest to prawdopodobnie zbyt zaawansowane, aby dostosować się, ale mimo to jest interesujące. Chciałbym ocenić cię na kompleksową odpowiedź, ale nie mam za to przedstawiciela. – Tom

+0

Czy można go jakoś osadzić w innym AppDomain? W ten sposób nie będziesz mieć wpływu na inny proces .net i być może łatwiej będzie zarządzać architekturą. –

+0

@ashley - Niestety nie, w tej chwili musi zostać uruchomiony jako oddzielny proces. –

Powiązane problemy