Win10下Xamarin.Forms+VS2017读取文件遇权限拒绝问题求助
解决Xamarin.Forms在Win10读取MyDocuments文件权限被拒的问题
嘿,我来帮你搞定这个权限坑!你遇到的这个错误其实是Xamarin.Forms在Windows平台(尤其是UWP项目)的权限逻辑和传统桌面应用不一样导致的——哪怕你用管理员身份跑VS、改了清单也没用,得按Windows现代应用的规则来处理。
下面分情况给你针对性的解决方案:
如果你用的是UWP项目(Xamarin.Forms最常见的Windows目标)
UWP应用有自己的沙箱权限机制,不是靠管理员权限就能绕过去的,得正确声明能力并使用对应的API:
第一步:配置Package.appxmanifest的权限
- 打开你的Windows UWP项目里的
Package.appxmanifest文件 - 切换到「功能」标签页,勾选文档库选项
- 再切换到「声明」标签页,点击「添加」,选择文件类型关联,然后配置:
- 显示名称:随便填,比如「XML文件」
- 文件类型:
.xml(注意前面的点) - 其他属性保持默认即可
- 打开你的Windows UWP项目里的
第二步:改用UWP原生文件API读取
原来的System.IO类在UWP沙箱里访问文档库会有严格限制,建议换成Windows.Storage的API,代码示例如下:using Windows.Storage; // 要在异步方法内调用哦 var documentsFolder = KnownFolders.DocumentsLibrary; var pippoFile = await documentsFolder.GetFileAsync("pippo.xml"); var fileContent = await FileIO.ReadTextAsync(pippoFile);这样就能符合UWP的权限要求,顺利读取文件内容了。
如果你用的是WPF项目
如果你的Windows目标是WPF,问题大概率出在文件本身的权限或占用状态:
- 右键
pippo.xml文件,选择「属性」→「安全」标签页 - 检查当前用户(包括管理员账户)是否有「读取」权限,如果没有,点击「编辑」添加权限,勾选「读取」和「读取及执行」
- 另外,确认文件没有被其他进程占用(比如被记事本、其他编辑器打开着),文件被占用也会导致访问被拒
额外提醒
别误以为用管理员身份运行VS,应用运行时就是管理员身份哦!VS的运行身份和应用的运行身份是完全分开的——除非你特意设置应用以管理员身份启动(右键快捷方式→属性→兼容性→勾选「以管理员身份运行此程序」),但这对UWP应用不适用,UWP本身不支持管理员权限运行。
内容的提问来源于stack exchange,提问作者egi
相关产品推荐
相关产品推荐

