WPF经桌面桥迁移至UWP时调用ApplicationData API抛出异常求助
解决桌面桥迁移WPF应用调用UWP API时的System.Runtime加载异常
这个问题我之前帮几个开发者排查过,本质是桌面桥应用里.NET Framework和UWP的.NET Core组件之间的依赖版本不匹配导致的。下面是几个可靠的解决步骤:
1. 检查并更新NuGet包依赖
- 确保你的项目引用了正确版本的
Microsoft.Windows.SDK.Contracts包,这个包是桌面桥应用调用UWP API的核心依赖,建议安装最新稳定版(比如10.0.22621.x系列)。 - 同时检查
System.Runtime相关的包,确保没有旧版本冲突。你可以在NuGet包管理器中查看已安装的包,把过时的System.Runtime、System.Runtime.WindowsRuntime等包更新到和SDK Contracts匹配的版本。
2. 配置app.config的绑定重定向
桌面桥应用经常会遇到.NET Framework和UWP组件的程序集版本冲突,需要手动添加绑定重定向来解决。在你的WPF项目的app.config里添加以下配置:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.2.0" newVersion="4.2.2.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Runtime.WindowsRuntime" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.10.0" newVersion="4.0.10.0" /> </dependentAssembly> </assemblyBinding> </runtime>
注意:这里的版本号要和你实际安装的NuGet包版本对应,如果不确定,可以查看项目的packages.config或者.csproj文件里的版本号。
3. 确认包清单的配置细节
虽然你说已经配置了正确的包ID,但还是要再检查几个关键细节:
- 包清单(Package.appxmanifest)里的
Identity元素的Name、Publisher、Version必须和你在开发者中心注册的包信息完全一致(如果是侧载部署,要确保证书匹配)。 - 确保清单里添加了
uap命名空间的声明,比如xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10",保证清单格式符合UWP规范。
4. 清理并重建项目
- 手动删除项目的bin和obj文件夹,然后重启Visual Studio,再进行完整的重建操作。旧的编译缓存经常会导致版本冲突,清理后重建能解决很多奇怪的加载问题。
- 如果使用命令行编译,尝试执行
msbuild /t:Clean;Rebuild命令来彻底重建项目。
5. 检查目标.NET Framework版本
确保你的WPF项目目标是.NET Framework 4.6.2或更高版本,桌面桥对低于4.6.2的.NET Framework版本支持有限,很多UWP API的依赖无法正常加载。
如果以上步骤都试过还是不行,可以尝试创建一个新的桌面桥WPF项目,把现有代码逐步迁移过去,对比两个项目的配置差异,通常能快速定位问题所在。
内容的提问来源于stack exchange,提问作者Dishant
相关产品推荐
相关产品推荐

