使用变量作为F#类型提供程序引用的文件的路径
如何将变量路径传递给类型提供程序 我有一个文件要使用SAS类型提供程序加载,该文件位于不同PC上的不同位置 例如,我想做如下事情:使用变量作为F#类型提供程序引用的文件的路径,f#,sas,type-providers,F#,Sas,Type Providers,如何将变量路径传递给类型提供程序 我有一个文件要使用SAS类型提供程序加载,该文件位于不同PC上的不同位置 例如,我想做如下事情: [<Literal>] let saspath = match System.Environment.MachineName with | "a" -> "c:/sas.sas7bdat" | "b" -> "d:/sas.sas7bdat" let sasfile = new SasFileTypeProvider
[<Literal>]
let saspath =
match System.Environment.MachineName with
| "a" -> "c:/sas.sas7bdat"
| "b" -> "d:/sas.sas7bdat"
let sasfile = new SasFileTypeProvider<saspath>()
[]
让萨斯帕=
将System.Environment.MachineName与匹配
|“a”->“c:/sas.sas7bdat”
|“b”->“d:/sas.sas7bdat”
让sasfile=new SasFileTypeProvider()
但这是无效的。它与此相关,但我没有使用相对路径的选项 不幸的是,这不容易做到。传递给类型提供程序的参数必须是(语法上)常量。有各种变通办法 使用相对路径。您能将代码更改为使用始终有效的相对路径吗?这将是理想的-假设类型提供程序支持这一点 改进类型提供程序。您可以向SAS类型提供程序发送PR,以便它可以从本地配置文件或环境变量获取文件名。许多SQL类型提供程序都这样做,因为如果您需要一些配置,这是一个很好的解决方案 使用常量生成文件。这有点麻烦,但是您可以使用常量生成一个单独的
fsx
文件并加载它。在剩下的代码中,您会看到红色的曲线(直到您运行脚本的第一部分),但如果您对此满意:
open System.IO
let text =
match System.Environment.MachineName with
| "a" -> "module Constants\n[<Literal>] let path = \"c:/sas.sas7bdat\""
| "b" -> "module Constants\n[<Literal>] let path = \"c:/sas.sas7bdat\""
File.WriteAllText("C:/temp/constants.fsx", text)
;;
#load "C:/temp/constants.fsx"
let sasfile = new SasFileTypeProvider<Constants.path>()
opensystem.IO
让文本=
将System.Environment.MachineName与匹配
|“a->”模块常量\n[]let path=\“c:/sas.sas7bdat”
|“b”->“模块常量\n[]let path=\“c:/sas.sas7bdat”
File.writealText(“C:/temp/constants.fsx”,text)
;;
#加载“C:/temp/constants.fsx”
让sasfile=new SasFileTypeProvider()
类型提供程序在编译时运行。当时您还不知道程序将运行的计算机的名称。计算机是已知的,因为我是通过.fsx文件运行的。听起来您需要Mixin类型提供程序!