【发布时间】:2019-01-19 20:24:15
【问题描述】:
我正在学习 Fake 5 (F# Make),并且正在学习 Getting Started 教程。当我运行以下代码时,我收到一条错误消息:tryscript.fsx (6,7)-(6,54): Error FS0001: The type 'Fake.IO.IGlobbingPattern' is not compatible with the type 'seq<'a>'
#r "paket: nuget Fake.IO.FileSystem //"
open Fake.IO.Globbing.Operators
let csProjectFiles = !! "src/app/**/*.csproj"
csProjectFiles
|> Seq.iter (fun x -> printfn "ProjectFile: %s" x)
// for projectFile in csProjectFiles do
// printfn "F# ProjectFile: %s" projectFile
但是,如果我注释掉从csProjectFiles |> ... 开始的两行并取消注释最后两行,我将得到预期的文件名输出。
根据documentation 和 Ionide 工具提示,!! 应该返回一系列文件名。有人可以告诉我我可能做错了什么吗?
附:我正在使用使用dotnet tool install fake-cli -g 安装的 Fake 5.3.1
UPD。对于这个问题,我没有任何解决方案。它在 Windows 10 获得更新后自行解决,我删除了 %HOMEPATH\.nuget、%HOMEPATH%\AppData\Local\Nuget 中的 Nuget 包缓存,并删除了 .fake 文件夹并将文件锁定在与 FAKE 脚本相同的文件夹中,然后再次重新运行脚本。
如果您仍然面临类似的问题,开发人员在您清除所有缓存后请求扩展日志fake -vv run <yourScriptName>.fsx,并在此运行后归档%HOMEPATH%\.nuget\packages\netstandard.library 的内容。
【问题讨论】:
-
如果在
#r指令中添加“nuget Fake.Core.Target //”行会怎样?我不知道 Fake 5 是如何划分成包的,但是使用像Fake.Core这样的名称,我希望它对正常工作至关重要。 “nuget Fake.Core.Target //”行出现在您链接到的入门教程的每个示例中,这一事实也表明它是 Fake 的重要组成部分。尝试将您的#r更改为看到的 in this section of the guide,看看是否能解决问题。 -
@rmunn,添加
Fake.Core.Target没有帮助。我收到相同的错误消息。我在尝试“入门”页面中的示例时第一次遇到此问题,当它们失败时,我使用文档中的代码创建了这个最小示例。 -
我现在没有合适的工具 - 组合 (
csProjectFiles >> Seq.iter) 而不是管道 (csProjectFiles |> Seq.iter) 有什么不同吗? -
@psfinaki,我尝试了函数组合运算符
>>并得到了不同的错误:This expression was expected to have type ''a -> 'b' but here has type 'Fake.IO.IGlobbingPattern' -
查看the
GlobbingFileSystem.fssource,我看到定义了一些扩展方法,因此您可能需要打开适当的命名空间来激活这些扩展方法。打开Fake.IO或Fake.IO.Globbing命名空间(或两者)有帮助吗?