我正在尝试使用System.IO.DeleteFile删除文件,并且莫名其妙地抛出了UnauthorizedAccessException。我意识到这已被问过很多次了。我查看了我能找到的所有问题,似乎没有一个答案适用。我碰巧使用的是FAKE,但问题看起来更通用了。
这是我的整个build.fsx:
// include Fake lib
#r @"packages/FAKE/tools/FakeLib.dll"
open Fake
open System.IO
Target "Default" (fun _ ->
DeleteFile "./Newtonsoft.Json.dll" |> ignore
)
RunTargetOrDefault "Default"
我在运行Fsi.exe build.fsx
时遇到此异常:
System.UnauthorizedAccessException: Access to the path './Newtonsoft.Json.dll' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileInfo.Delete()
at FSI_0001.clo@6.Invoke(Unit _arg1) in c:\Apache24\htdocs\IS4C\pos\is4c-nf\scale-drivers\drivers\NewMagellan\build2.fsx:line 7
at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 483
如果我从同一命令提示符运行del Newtonsoft.Json.dll
,则文件删除就好了。
它似乎不是权限问题。该文件不是只读或隐藏的。除非我的实际构建文件以某种方式打开文件的额外句柄,否则我看不到它将如何在另一个进程中打开。
这些似乎是这个问题的三个标准答案。还有其他答案吗?