2013-02-03 12 views
9

Oto scenariusz:W jaki sposób polecenie F # Interactive #I wie o ścieżce projektu?

  1. Otwórz Visual Studio. Dokonano tego w VS2010 Pro.
  2. Otwarte F # Interactive wewnątrz Visual Studio
  3. Otwarty projekt z FSX pliku
    Uwaga: Projekt i plik FSX są w E:\<directories>\fsharp-tapl\arith
  4. wysyłania poleceń do F # Interactive z FSX pliku

    > System.Environment.CurrentDirectory;; 
    val it : string = "C:\Users\Eric\AppData\Local\Temp" 
    

    nie byłem oczekiwanie katalogu Temp, ale ma sens.

    > #r @"arith.exe" 
    Examples.fsx(7,1): error FS0082: Could not resolve this reference. 
    Could not locate the assembly "arith.exe". 
    Check to make sure the assembly exists on disk. 
    If this reference is required by your code, you may get compilation errors. 
    (Code=MSB3245) 
    
    Examples.fsx(7,1): error FS0084: Assembly reference 'arith.exe' was not found 
    or is invalid 
    

    Błąd polecenia #r pokazuje, że F # Interactive aktualnie nie zna położenia pliku arith.exe.

    > #I @"bin\Debug" 
    --> Added 'E:\<directories>\fsharp-tapl\arith\bin\Debug' 
    to library include path 
    

    Poinformujemy F # Interactive o położeniu pliku arith.exe. Należy zauważyć, że ścieżka NIE jest ścieżką bezwzględną, lecz pod-ścieżką projektu. nie powiedziałem F # Interactive lokalizacja projektu Arith E:\<directories>\fsharp-tapl\arith

    > #r @"arith.exe" 
    --> Referenced 'E:\<directories>\fsharp-tapl\arith\bin\Debug\arith.exe' 
    

    i F # Interactive poprawnie wyszukuje arith.exe raportowania prawidłową ścieżkę bezwzględną.

    > open Main 
    > eval "true;" ;; 
    true 
    val it : unit =() 
    

    Potwierdza to, że arith.exe został poprawnie znaleziony, załadowany i działa.

W jaki sposób F # Interaktywny #I ​​komenda zna ścieżkę projektu, ponieważ bieżący katalog nie jest pomocny?

To, o czym naprawdę piszę, pochodzi z F # Interactive, jak uzyskać ścieżkę do projektu, E:\<directories>\fsharp-tapl\arith.

EDIT

> printfn __SOURCE_DIRECTORY__;; 
E:\<directories>\fsharp-tapl\arith 
val it : unit =() 

Odpowiedz

16

F # Interactive, domyślny katalog, aby szukać jest katalog źródłowy. Możesz go łatwo wyszukać, używając __SOURCE_DIRECTORY__.

To zachowanie jest bardzo wygodne, aby umożliwić stosowanie ścieżek względnych. Często masz pliki fsx w tym samym folderze z plikami fs.

#load "Ast.fs" 
#load "Core.fs" 

Kiedy Twój odnoszą się do ścieżki względnej, F # Interactive będzie zawsze korzystać z katalogu źródłowego niejawnego jako punkt wyjścia.

#I ".." 
#r ... // Reference some dll in parent folder of source directory 
#I ".." 
#r ... // Reference some dll in that folder again 

Jeśli chcesz zapamiętać stary katalog dla następnego odniesienia, należy użyć #cd zamiast:

#cd "bin" 
#r ... // Reference some dll in bin 
#cd "Debug" 
#r ... // Reference some dll in bin/Debug 
+0

Jest to bardzo przydatne, dzięki ... dla każdego, kto jest zainteresowany Mathias Brandewinder ma kilka cennych wskazówek [ ] (http: // brandewinder.com/2016/02/06/10-fsharp-scripting-tips /) do pracy ze skryptami fsx. Miałem problem z uzyskaniem dostępu do pakietów nuget z pliku skryptu w bibliotece, #I @ ".. \ packages" to rozwiązał –

Powiązane problemy