我正在尝试编写一个测试,在它的固定装置设置中,它备份一个文件并删除原始文件,在没有原始文件的情况下运行测试,然后在拆解中从备份中恢复原始文件。该文件位于我的 %ProgramFiles% 文件夹中。我在 fileInfo.Delete() 语句中收到 UnauthorizedAccessException。我从同一台机器上未从 Resharper Test Runner 运行的另一个测试项目中删除此文件没有问题。
我无法将文件移动到其他地方 - 它是 ssapi.dll,一个为 Visual SourceSafe 安装的 dll。 (是的,我正在单元测试中做一些侵入性的事情。)
这两种方式都是同一个用户(我)——我通过任务管理器检查过。我的用户帐户是本地管理员组的成员。还有哪些其他因素决定我对文件执行某些操作的“授权”?
已解决:虽然它没有回答我最初的问题(我仍然想知道答案),但我已经找到了一个用于测试目的的解决方法,使用 System.Security.Permissions 框架,做一个需求对于 FileIOPermissionAccess.Read 在需要文件(用于互操作调用)的应用程序(非测试)代码中,以及在需要该文件不存在的场景的代码测试中拒绝。这现在应该可以工作(我喜欢学习一些关于 System.Security.Permissions 命名空间的知识)!
最佳答案
不是真正的解决方案,但我会考虑从不同的角度解决这个问题。
您或许可以考虑将目录更改为 %AppData%(您可能还需要为您的主应用程序进行此更改)。
它可能会解决您的问题,并且在您迁移到 Vista 时也会很顺利,因为 UAC 可能会阻止您(或应用程序用户)使用 %ProgramFiles% 目录。
关于c# - 为什么我不能通过 Resharper Test Runner 单元测试从单元测试中删除 %Program Files% 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/100070/