10

这是场景:

  1. 打开 Visual Studio。这是在 VS2010 Pro 中完成的。
  2. 在 Visual Studio 中打开 F# Interactive
  3. 使用 fsx 文件打开项目
    注意:项目和 fsx 文件在E:\<directories>\fsharp-tapl\arith
  4. 从 fsx 文件向 F# Interactive 发送命令

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

    我没想到会有一个 Temp 目录,但它是有道理的。

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

    #r 命令错误表明 F# Interactive 当前不知道 arith.exe 的位置。

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

    所以我们告诉 F# Interactive arith.exe 的位置。请注意,路径不是绝对路径,而是项目的子路径。我没有告诉 F# Interactive arith 项目的位置 E:\<directories>\fsharp-tapl\arith

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

    并且 F# Interactive 正确发现 arith.exe 报告了正确的绝对路径。

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

    这确认 arith.exe 已正确找到、加载并正常工作。

那么 F# Interactive #I 命令是如何知道当前目录没有帮助的项目路径的呢?

我真正追求的是从 F# Interactive 中如何获得项目的路径,E:\<directories>\fsharp-tapl\arith.

编辑

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

1 回答 1

19

在 F# Interactive 中,要搜索的默认目录是源目录。您可以使用 轻松查询它__SOURCE_DIRECTORY__

这种行为非常方便,允许您使用相对路径。您经常将fsx文件与文件放在同一个文件夹中fs

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

当您引用相对路径时,F# Interactive 将始终使用隐式源目录作为起点。

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

如果您想记住旧目录以供下次参考,您应该使用#cd

#cd "bin"
#r ... // Reference some dll in bin
#cd "Debug"
#r ... // Reference some dll in bin/Debug
于 2013-02-03T15:36:21.770 回答