2013-02-03 6 views
9

ここにこのシナリオがあります。F#Interactive #Iコマンドはプロジェクトパスをどのように知っていますか?

  1. Visual Studioを開きます。これはVS2010 Proで行われました。 Visual Studioの内
  2. オープンF#インタラクティブFSXファイルと
  3. プロジェクトを開く
    注:プロジェクトとFSXファイルはE:\<directories>\fsharp-tapl\arith
  4. がFSXファイルからF#インタラクティブにコマンドを送信している

    > 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#インタラクティブが現在arith.exeの場所を知らないことを示しています。

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

    これで、Fith Interactiveにarith.exeの場所を伝えます。パスは絶対パスが、プロジェクトのサブパスではありません 注意してください。 私はF#インタラクティブにARITHプロジェクト E:\<directories>\fsharp-tapl\arith

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

    の場所を告げておらず、F#インタラクティブが正しく正しい絶対パスを報告arith.exe見つけました。

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

    これはarith.exeが正しく検出され、読み込まれて動作することを確認しています。

現在のディレクトリは役に立たないので、F#Interactive #Iコマンドはどのようにプロジェクトパスを知っていましたか?私は本当にの後であるF#対話の中から1プロジェクト、E:\<directories>\fsharp-tapl\arithへのパスを取得んどのようにしています何

EDIT F#インタラクティブで

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

答えて

16

は、検索するデフォルトのディレクトリは、ソースディレクトリです。 __SOURCE_DIRECTORY__を使って簡単に問い合わせることができます。

この現象は、相対パスを使用できるようにすることは非常に便利です。あなたは、多くの場合、fsファイルと同じフォルダにfsxのファイルを持っています。

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

をこれは本当にマティアスBrandewinderは、いくつかの[大きなヒントを持って興味を持っている人のために有用感謝...です](http:// brandewinder。com/2016/02/06/10-fsharp-scripting-tips /)を参照してください。ライブラリ内のスクリプトファイルからnugetパッケージにアクセスする際に問題が発生しました。#I @ ".. \ packages"が解決しました –

関連する問題