UWP项目初始化Json文件流时抛出System.NotSupportedException求助
解决UWP项目中加载Google OAuth JSON密钥文件的System.NotSupportedException问题
我之前在UWP项目里对接Google OAuth的时候也碰到过这个一模一样的坑!问题根源在于UWP的沙箱文件访问机制和传统桌面程序差异很大,直接用System.IO.File相关的方法去读取密钥文件,必然会触发System.NotSupportedException。下面给你几个针对性的解决步骤:
1. 确认文件的输出配置
你已经把BuildAction设为Content了,这一步是对的,但还要补充设置Copy to Output Directory:
- 在解决方案资源管理器里右键你的JSON密钥文件,选择“属性”
- 把
Copy to Output Directory改成Copy if newer或者Copy always - 这样文件才会被正确复制到UWP应用的安装目录里,后续才能被访问到
2. 使用UWP专属的StorageFile API读取文件
UWP沙箱限制了直接访问文件系统路径,必须用Windows.Storage命名空间下的API来读取应用包内的文件。给你一段示例代码:
using Windows.ApplicationModel; using Windows.Storage; using System.IO; // 异步方法中执行以下逻辑 var installFolder = Package.Current.InstalledLocation; // 如果你的JSON文件放在Assets文件夹里,路径要写成"Assets/your-key-file.json" var jsonFile = await installFolder.GetFileAsync("your-key-file.json"); using (var stream = await jsonFile.OpenStreamForReadAsync()) { // 这里执行Google OAuth的初始化操作,比如加载密钥 var secrets = GoogleClientSecrets.Load(stream); // 后续的授权逻辑... }
3. 排查异常的具体原因
如果还是报错,建议你查看异常的InnerException信息,它会告诉你具体是哪个操作不被支持——大概率是你用了File.OpenRead()这类传统IO方法,这类方法在UWP沙箱里是被禁止的,必须替换成上面的StorageFile方式。
额外提示
如果你的JSON文件需要随应用更新而更新,或者需要用户自定义,也可以考虑把文件放在应用的LocalFolder里,读取方式类似,只是获取文件夹的方法换成ApplicationData.Current.LocalFolder即可。
内容的提问来源于stack exchange,提问作者André B
相关产品推荐
相关产品推荐

