F# FSI运行含#I __SOURCE_DIRECTORY__的fsx文件报FS0010错误如何解决?
F# FSI执行
#I __SOURCE_DIRECTORY__报错的原因与解决方案 错误产生原因
__SOURCE_DIRECTORY__是F#编译器内置的特殊字面量,会自动解析为当前脚本所在的目录路径。触发FS0010错误的核心原因是:
在FSI交互模式下,#I路径指令要求后面紧跟的参数必须是用引号包裹的字符串类型,而直接书写的__SOURCE_DIRECTORY__会被FSI识别为未包裹的特殊标识符,不符合交互场景下的语法规则,就会抛出语法错误。如果是单独选中该行代码发送到FSI执行,该错误会更常见,因为此时FSI没有上下文完成该字面量的预解析替换。
解决方案
你可以根据使用场景选择以下任意一种方式解决:
- 给字面量添加引号包裹,这是兼容性最好的方案,修改代码为:
前缀#I @"__SOURCE_DIRECTORY__"@可以避免路径中存在转义字符时解析异常,修改后无论是单独发送到FSI执行,还是完整运行整个脚本都可以正常生效。 - 如果你仅需要在FSI交互窗口临时设置路径,可以直接写当前目录的绝对路径,示例:
#I @"C:\Users\XXX\Project\Test" - 如果你不需要单独调试这行代码,可以直接运行整个.fsx脚本文件,完整运行时编译器会自动预解析
__SOURCE_DIRECTORY__字面量,不需要加引号也可以正常执行。
内容的提问来源于stack exchange,提问作者roboleek
相关产品推荐
相关产品推荐

