Nawet jeśli po prostu dodać fsx
skrypt Visual Studio, nadal można skompilować setup.fsx
do normalnego projektu wraz z inne (być może fs
) pliki, więc powinieneś być w stanie zachować skrypt jako zwykły plik skryptu w Visual Studio i jednocześnie odwoływać się do niego z projektu lub narzędzia wiersza poleceń, które buduje twoje testy.
Próbowałem to robić z następującym test.fsx
pliku:
module Demo
#r "System.Xml.Linq.dll"
open System.Xml.Linq
let test() =
let d = XDocument(XElement(XName.Get("foo")))
d.ToString()
pewno trzeba jakąś deklarację module Name
na początku (dzięki czemu można uzyskać dostęp do funkcji z innych plików), ale w przeciwnym razie może to być dowolny plik fsx
. Drugim plikiem, który kiedyś był test.fs
:
module Main
open Demo
test() |> printfn "%A"
To jest tylko do testów, ale tutaj można pisać testy jednostkowe. Jeśli skompilować pliki za pomocą następującego polecenia, można dostać standardowego zestawu, który można przekazać do xUnit (uwaga, kompilator może odebrać #r
tag z test.fsx
, nie mamy napisać odwołanie wyraźnie):
fsc.exe --target:library test.fsx test.fs
Myślę, że można uzyskać tę samą konfigurację w programie Visual Studio, jeśli dodasz projekt biblioteki, a następnie ręcznie dodaj łącze do pliku (który może wskazywać na plik w innym miejscu w strukturze rozwiązania), używając czegoś podobnego w pliku fsproj
:
<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx">
<Link>File.fsx</Link>
</Compile>
Pamiętaj, że po dodaniu fsx
plik przy użyciu "Dodaj element", jest oznaczony jako "Uwzględnij", ale nie jako "Kompilacja", więc nie zostanie skompilowany jako część projektu. Powyższe powinno uwzględniać to w projekcie i powinno informować kompilator o włączeniu go również do skompilowanego zestawu.
Ostrzeżenie: powiedział: Myślę, że lepiej przetestować skompilowane pliki dll
przy użyciu standardowych testów jednostkowych. Jeśli chcesz przetestować pliki fsx
, po prostu dodaję kilka linii jako testy na końcu i uruchomię je ręcznie (wybierz, Alt
+ Enter
). Powodem jest to, że pliki fsx
powinny być często zmieniane, a więc zbyt solidne testowanie może ograniczyć Twoją elastyczność. Z drugiej strony, gdy kod staje się bardziej trwały, sensowne jest przeniesienie go do pliku dll
.
jeśli napiszesz moduł na górze w fsx, nie możesz go uruchomić w fsi. dodanie modułu #if COMPILED Demo #endif wydaje się być w porządku – nicolas
Czy jesteś pewien, że masz dostęp do przestrzeni nazw Demo, gdy jest ona zdefiniowana w pliku fsx? Wystąpił błąd. plik fsx znajduje się powyżej na liście projektów ... błąd znika po zmianie nazwy na fs, pojawia się przełączenie z powrotem na fsx – nicolas
@nicolas Próbowałem tylko uruchomić kompilator ręcznie z wiersza poleceń. Myślę, że będzie działać tylko wtedy, gdy plik 'fsx' jest oznaczony jako Kompilacja - jaka jest komenda wiersza poleceń, którą program Visual Studio drukuje w oknie" Wyjście "? Czy widzisz plik 'fsx'? –