读取 Xml 文件会引发错误 - FAKE F#MAKE
Reading Xml file throws an error - FAKE F#MAKE
我正在使用 XMLHelper.XMLRead
在 FAKE 脚本中读取 XML 文件,但它抛出了一个错误,即
The type '(string -> string ->seq<string>)' is not a type whose value can be enumerated with this syantax , i.e. is not compatible with either seq<_>,IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
下面是我的代码:
let x = XMLHelper.XMLRead true "D:/test/Version.Config" "/version/major/minor"
Target "New" (fun _ ->
for i in x do
printf "%s" i
)
如果您查看 API documentation for XMLHelper
,您会看到 XMLRead
的函数签名如下所示:
failOnError:bool -> xmlFileName:string -> nameSpace:string -> prefix:string -> xPath:string -> seq<string>
您似乎指定了 failOnError
、xmlFileName
和 nameSpace
参数*,但您没有指定最后两个字符串参数。由于 F# 使用 partial application,这意味着您从 XMLRead
调用中返回的是一个正在等待另外两个字符串参数的函数(因此错误中的 string -> string -> (result)
函数签名你收到的消息)。
* 您可能打算让 "/version/major/minor"
填充 xPath
参数,但 F# 按照给定的顺序应用参数,因此它填充了第三个参数,即 nameSpace
。
要解决此问题,请指定 XMLRead
需要的所有参数。我查看了 XMLRead source,如果您未在输入文档中使用 XML 名称空间,则 nameSpace
和 prefix
参数应为空字符串。所以你想要的是:
let x = XMLHelper.XMLRead true "D:/test/Version.Config" "" "" "/version/major/minor"
Target "New" (fun _ ->
for i in x do
printf "%s" i
)
顺便说一句,既然我已经看过 ,我想您会想要 XMLHelper.XMLRead_Int
函数:
let minorVersion =
match XMLHelper.XMLRead_Int true "D:/test/Version.Config" "" "" "/version/major/minor" with
| true, v -> v
| false, _ -> failwith "Minor version should have been an int"
一旦您的代码越过该行,要么您在 minorVersion
中有一个 int,要么您的构建脚本抛出错误并退出,以便您可以修复您的 Version.Config
文件。
我正在使用 XMLHelper.XMLRead
在 FAKE 脚本中读取 XML 文件,但它抛出了一个错误,即
The type '(string -> string ->seq<string>)' is not a type whose value can be enumerated with this syantax , i.e. is not compatible with either seq<_>,IEnumerable<_> or IEnumerable and does not have a GetEnumerator method
下面是我的代码:
let x = XMLHelper.XMLRead true "D:/test/Version.Config" "/version/major/minor"
Target "New" (fun _ ->
for i in x do
printf "%s" i
)
如果您查看 API documentation for XMLHelper
,您会看到 XMLRead
的函数签名如下所示:
failOnError:bool -> xmlFileName:string -> nameSpace:string -> prefix:string -> xPath:string -> seq<string>
您似乎指定了 failOnError
、xmlFileName
和 nameSpace
参数*,但您没有指定最后两个字符串参数。由于 F# 使用 partial application,这意味着您从 XMLRead
调用中返回的是一个正在等待另外两个字符串参数的函数(因此错误中的 string -> string -> (result)
函数签名你收到的消息)。
* 您可能打算让 "/version/major/minor"
填充 xPath
参数,但 F# 按照给定的顺序应用参数,因此它填充了第三个参数,即 nameSpace
。
要解决此问题,请指定 XMLRead
需要的所有参数。我查看了 XMLRead source,如果您未在输入文档中使用 XML 名称空间,则 nameSpace
和 prefix
参数应为空字符串。所以你想要的是:
let x = XMLHelper.XMLRead true "D:/test/Version.Config" "" "" "/version/major/minor"
Target "New" (fun _ ->
for i in x do
printf "%s" i
)
顺便说一句,既然我已经看过 XMLHelper.XMLRead_Int
函数:
let minorVersion =
match XMLHelper.XMLRead_Int true "D:/test/Version.Config" "" "" "/version/major/minor" with
| true, v -> v
| false, _ -> failwith "Minor version should have been an int"
一旦您的代码越过该行,要么您在 minorVersion
中有一个 int,要么您的构建脚本抛出错误并退出,以便您可以修复您的 Version.Config
文件。