例如,我使用以下预处理指令
#if COMPILED
let context = Sql.GetDataContext(ConfigurationManager.ConnectionStrings.[AppDB].ConnectionString)
#else
let context = Sql.GetDataContext()
#endif
以便我能够从 F# 交互式测试一个 dll 库,给你一个想法
#I @"binDebug"
#r @"import.dll"
#r @"FSharp.Data.SqlProvider.dll"
#load "Library1.fs"
open SqlLib
open SqlDB
// Define your library scripting code here
let book = "My Company"
let db = DB()
db.analysts book |> Array.iter (printfn "%A")
因为,当然,在上面的示例中,ConfigurationManager
脚本引擎无法使用,所以我需要在预处理时实现更改。
更一般地说,我在哪里可以找到文档或至少所有已自动定义的可用标准符号的列表,包括COMPILED
等...?
来自编译器指令 F#:
在if 指令中使用的符号必须由命令行或项目设置中定义;没有定义预处理器指令...
使用 -define 编译器选项定义VERSION1时,将激活 #if 指令和 #else 指令之间的代码。否则,将激活 #else 和 #endif 之间的代码。
因此,您可以在编译代码时定义自己的预处理器指令。如果使用 .NET Core,则可以在 fsproj 或 csproj 中将这些符号定义为:
<PropertyGroup Condition="'$(TargetFramework)' != 'net40'">
<DefineConstants>NET45</DefineConstants>
</PropertyGroup>
Dotnet 将它们发送到 FSC。如果你好奇默认定义了哪些符号,你可以研究 fsc 源代码
我在那里找到了编译和交互式。