在 Windows Server 2008 上运行的 ASP.NET C# 应用程序
我发现 Git .idx 和 .pack 文件对程序删除特别有抵抗力:
C:\github\my-org\my-repo\.git\objects\pack\pack-905fbcfd5f24c5711de900f3946b4137d26df6d5.idx
C:\github\my-org\my-repo\.git\objects\pack\pack-905fbcfd5f24c5711de900f3946b4137d26df6d5.pack
git clone 操作将文件创建为只读 - 但即使关闭该位,删除仍然有问题:
var path = @"C:\github\my-org\my-repo\.git\objects\pack\pack-33ea2068b66028f98ac9deb55c3b5d1450d65dea.idx";
File.SetAttributes(path , FileAttributes.Normal);
File.Delete(path);
Run Code Online (Sandbox Code Playgroud)
File.Delete(path) 代码抛出异常:
拒绝访问路径“pack-33ea2068b66028f98ac9deb55c3b5d1450d65dea.idx”。
由于路径不在我的站点目录中,我想知道 ASP.NET 站点 AppPool 工作进程标识是否需要明确分配权限以写入/删除其应用程序域之外的文件夹/文件?
请注意,在我的 Windows 7 本地工作站上,调用删除目录操作的 nUnit 测试运行绿色。在调试器中,我可以证明一旦从所有文件(如果存在)中删除只读属性,Directory.Delete(path,true) 操作就不会抛出。
任一进程正在保留该特定包文件的句柄(进程资源管理器可以为您检查)
或者存在正确访问问题,如libgit2sharp/issues/769中:
该消息看起来就像您在尝试删除 Windows 不喜欢的只读文件时收到的消息,并且读取了 git 的对象数据库(索引文件就是其中之一)的对象-仅有的。
删除只读标志允许我删除整个目录。