【发布时间】:2018-07-09 16:54:30
【问题描述】:
我有一种情况,在假脚本中,我试图使用 Glob (!!) 运算符从路径中获取所有单元测试 dll。
问题是在我的机器上 glob 扩展不起作用,在其他类似的 Windows 10 机器上工作,它很好并且可以找到 dll。
下面是一个例子:
let path = [function to generate path]
trace path [would look something like "c:\git\project\src\**\*UnitTest*"]
!! path.ToLower()
|> Seq.iter (fun file -> trace file ) [this would not output anything]
我尝试了很多方法:
- 卸载旧版本的 F#
- 重新安装最新版本
- 确保 F# 在我的路径中
我使用的软件版本是:
- 假v4.63.2
- Windows 10
- F#4.1
不会引发错误或异常。
如果是 F# 或 Fake 问题,解决问题的最佳方法是什么?
我怎样才能知道 F# Fake 使用的是哪个版本?
更新
我重新安装了 F# 4.1 并使用 fsi.exe 执行了测试,并使用以下命令:
Microsoft (R) F# Interactive version 4.1
<snip>
#r @"packages/FAKE/tools/FakeLib.dll";;
open Fake;;
!! "**\*UnitTests.dll" |> Seq.iter (fun x -> trace x);;
C:\git\project1\bin\Debug\project1.UnitTests.dll
C:\git\project2\bin\Debug\project2.UnitTests.dll
!! "**\*UnitTests.dll".ToLower() |> Seq.iter (fun x -> trace x);;
C:\git\project1\bin\Debug\project1.UnitTests.dll
C:\git\project2\bin\Debug\project2.UnitTests.dll
已找到所有测试 dll,无论是否调用 ToLower()。
当我从脚本中删除 ToLower() 时,它现在可以在我的机器上运行。
但是,在其他人的机器上删除 path 上的 ToLower() 会导致他们找不到任何文件。
那么,Fake 是否使用了不同版本的 fsi.exe?
我已经打开了一个 github 问题,看看是否可以对此有所了解:https://github.com/fsharp/FAKE/issues/1772
【问题讨论】:
-
您看到的行为是什么?您的示例中的路径是真实路径吗?因为如果是这样,我认为它需要反斜杠转义
-
这个字符串应该抛出,因为它包含无效的转义序列
-
实际上,好点 - 我们使用函数来确定路径。所以我会换个例子
-
您写道“……在我的机器上,glob 扩展不起作用,在其他类似的机器上正常工作。”这对我来说似乎是非常重要的一点。您的机器可能有些不同,脚本可能没问题。如果您的机器中的某个文件夹丢失或命名为其他文件夹,则 glob 将扩展为一个空列表,这就是没有打印任何内容的原因。您能否仔细检查计算机上是否存在 C: 根目录下的每个文件夹?并且没有一些奇怪的文件夹权限会阻止读取一个文件夹?
-
我在示例中遗漏了一个细节,因为在做原始帖子时我面前没有代码,请参阅帖子中的更新。