2013-02-03 11 views
9

Đây là kịch bản:Làm thế nào để lệnh F # Interactive #I biết về đường dẫn dự án?

  1. Mở Visual Studio. Điều này đã được thực hiện trong VS2010 Pro.
  2. mở F # Interactive trong Visual Studio
  3. mở dự án với tập tin fsx
    Lưu ý: Dự án và hồ sơ fsx là trong E:\<directories>\fsharp-tapl\arith
  4. Gửi lệnh để F # Interactive từ file fsx

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

    tôi đã không mong đợi một thư mục Temp nhưng nó có ý nghĩa.

    > #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 
    

    Lỗi #r chỉ ra rằng F # Interactive hiện không biết vị trí của arith.exe.

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

    Vì vậy, chúng tôi cho F # tương tác vị trí của arith.exe. Lưu ý rằng đường dẫn KHÔNG phải là đường dẫn tuyệt đối mà là đường dẫn con của dự án. Tôi đã không nói với F # Interactive vị trí của dự án arith E:\<directories>\fsharp-tapl\arith

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

    Và F # Interactive phát hiện một cách chính xác arith.exe báo cáo đường dẫn tuyệt đối chính xác.

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

    Điều này xác nhận rằng arith.exe đã được tìm thấy, tải và hoạt động chính xác.

Vậy làm thế nào lệnh F # Interactive #I biết đường dẫn dự án vì thư mục hiện tại không có trợ giúp?

Những gì tôi thực sự sau là từ bên trong F # Interactive làm thế nào để có được đường dẫn đến dự án, E:\<directories>\fsharp-tapl\arith.

EDIT

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

Trả lời

16

Trong F # Interactive, thư mục mặc định để tìm kiếm là thư mục nguồn. Bạn có thể truy vấn dễ dàng bằng cách sử dụng __SOURCE_DIRECTORY__.

Hành vi này rất thuận tiện để cho phép bạn sử dụng đường dẫn tương đối. Bạn thường có các tệp fsx trong cùng một thư mục với các tệp fs.

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

Khi bạn tham chiếu đến đường dẫn tương đối, F # Interactive sẽ luôn sử dụng thư mục nguồn ngầm làm điểm xuất phát.

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

Nếu bạn muốn ghi nhớ thư mục cũ để tham khảo tiếp theo, bạn nên sử dụng #cd thay vì:

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

này là nhờ thực sự hữu ích ... cho bất cứ ai quan tâm đến Mathias Brandewinder có một số [lời khuyên tuyệt vời ] (http: // brandewinder.com/2016/02/06/10-fsharp-scripting-tips /) để làm việc trong các tập lệnh fsx. Tôi gặp sự cố khi truy cập gói nuget từ tệp tập lệnh trong thư viện, #I @ ".. \ packages" đã giải quyết được sự cố –