如何获取Windows.Storage命名空间访问权限?(Desktop Bridge转换WinForms应用)
嘿,我刚好处理过类似的桌面桥应用问题,给你一步步讲清楚怎么搞定Windows.Storage的访问:
1. 先搞定UWP API的访问权限(不用传统添加引用)
因为你的WinForms应用是通过Desktop Bridge打包的桌面桥应用,没法直接添加Windows.Storage的引用,得通过NuGet包来启用UWP API的访问:
- 打开Visual Studio 2017,右键你的WinForms项目 → 选「管理NuGet程序包」
- 在浏览标签里搜
Microsoft.Windows.SDK.Contracts,安装和你的Windows目标版本匹配的包(.NET 4.6.1支持的最低版本大概是10.0.16299.x,选对应版本就行) - 装完之后,你就能直接在代码里写
using Windows.Storage;来引用这个命名空间了
2. 配置应用的存储权限(关键!)
光有API还不够,得在打包的清单文件里加对应的权限,不然运行时会被拦截:
- 找到你的Windows Application Packaging Project(就是Desktop Bridge打包用的那个项目),打开它的
Package.appxmanifest文件 - 切到「功能」标签页,勾选你需要的存储权限:
- 如果只是访问应用自己的本地/漫游/临时文件夹,默认就有权限,不用额外勾选
- 要访问用户的文档/图片/音乐/视频库?分别勾选对应的「文档库」「图片库」等选项
- 要是需要访问任意位置的文件,得勾选「文件系统」权限(注意这个权限在商店提交时要说明用途,不然可能被拒)
3. 代码里用Windows.Storage的小提醒
桌面应用调用UWP的异步API时,记得配合async/await:
比如创建并写入一个本地文件的示例代码:
using Windows.Storage; // 标记方法为async private async void WriteStorageFile() { // 获取应用本地存储文件夹 StorageFolder localFolder = ApplicationData.Current.LocalFolder; // 异步创建文件(如果存在就替换) StorageFile file = await localFolder.CreateFileAsync("test.txt", CreationCollisionOption.ReplaceExisting); // 异步写入文本 await FileIO.WriteTextAsync(file, "这是桌面桥应用写入的内容!"); }
常见坑点排查
- 装完NuGet包还是找不到Windows.Storage?先确认项目目标框架是.NET Framework 4.6.1,然后清理项目再重新生成试试
- 权限勾了还是访问不了?检查下你访问的路径是不是在权限范围内(比如没勾文件系统的话,不能直接读C盘根目录的文件)
内容的提问来源于stack exchange,提问作者Chuque
相关产品推荐
相关产品推荐

