例如,我正在使用以下预处理指令
#if COMPILED
let context = Sql.GetDataContext(ConfigurationManager.ConnectionStrings.[AppDB].ConnectionString)
#else
let context = Sql.GetDataContext()
#endif
这样我就可以从F#交互式测试dll库,给你一个想法
#I @"bin\Debug"
#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
等...? 最佳答案
从Compiler directives F#:
您必须在命令行或项目设置中定义在if指令中使用的符号;没有定义预处理器指令...
使用-define编译器选项定义VERSION1时,将激活#if指令和#else指令之间的代码。否则,将激活#else和#endif之间的代码。
因此,您可以在编译代码时定义自己的预处理程序指令。如果使用.NET Core,则可以在fsproj或csproj中使用以下符号:
<PropertyGroup Condition="'$(TargetFramework)' != 'net40'">
<DefineConstants>NET45</DefineConstants>
</PropertyGroup>
dotnet将它们发送到fsc。如果您好奇默认情况下定义了哪些符号,则可以调查fsc source code我在那里找到了COMPILED和INTERACTIVE。