即使你只需要添加fsx
腳本到Visual Studio中,你仍然可以編譯setup.fsx
成一個正常的項目連同其他(可能fs
)文件,所以你應該能夠保持腳本在Visual Studio中正常的腳本文件,並在同一時間,從項目或從命令行工具,建立你的測試引用它。
我試圖這樣做有以下test.fsx
文件:
module Demo
#r "System.Xml.Linq.dll"
open System.Xml.Linq
let test() =
let d = XDocument(XElement(XName.Get("foo")))
d.ToString()
你肯定需要一些module Name
聲明開頭(這樣您就可以訪問其他文件中的函數),但除此之外,它可以是任何fsx
文件。我使用的其他文件爲test.fs
:
module Main
open Demo
test() |> printfn "%A"
這僅僅是測試,但在這裏,你可以寫你的單元測試。如果您編譯使用以下命令的文件,你的標準組件,你可以傳遞給的xUnit(注意,編譯器可以選擇從test.fsx
的#r
標籤,我們沒有明確寫入參考):
fsc.exe --target:library test.fsx test.fs
我認爲,如果你添加一個庫項目,然後手動添加鏈接到文件中使用這樣的事情在fsproj
文件(可以在你的解決方案結構指向文件的其他地方),你可以得到在Visual Studio中相同的配置:
<Compile Include="..\Eslewhere\In\Your\Project\Tree\File.fsx">
<Link>File.fsx</Link>
</Compile>
注意,當您添加fsx
文件使用「添加項目」,它被標記爲「包含」而不是「編譯」,因此它不會被編譯爲項目的一部分。上面應該包括它在項目中,它應該告訴編譯器將它包含在編譯程序集中。
警告:說,我認爲它可能會更好地測試使用標準單元測試編譯dll
文件。如果你想測試fsx
文件,我只想添加幾行,作爲在最後測試和手動(選擇,Alt
+ Enter
)運行它們。原因是fsx
文件應該經常更改,因此測試過於嚴密可能會限制您的靈活性。另一方面,一旦代碼變得更加穩定,將其移動到dll
文件是有意義的。
如果你在fsx的頂部寫模塊,你不能在fsi中執行它。添加#if COMPILED 模塊演示 #endif 似乎確定 – nicolas
確定您有權訪問Demo命名空間,當它在fsx文件中定義時?我收到一個錯誤。 fsx文件位於項目列表中的上方..重命名爲fs後錯誤消失,出現切換回fsx – nicolas
@nicolas我只嘗試從命令行手動運行編譯器。我認爲它只會在'fsx'文件被標記爲編譯時才起作用 - Visual Studio在「輸出」窗口中打印的命令行命令是什麼?你能看到'fsx'文件嗎? –