Win10 1709升级后树莓派Windows IoT后台应用调试触发FileLoadException
兄弟,我之前调试树莓派上的UWP后台任务时,刚好碰到过和你一毛一样的问题!升级Win10 1709之后,后台任务直接罢工,输出窗口只蹦出System.IO.FileLoadException(源头是System.Private.CoreLib.ni.dll),IBackgroundTask.Run()完全没机会执行,连具体哪个文件加载失败都查不到,最后追根溯源确实是自定义类搞的鬼。给你分享几个我当时排查解决的关键点:
检查自定义类的依赖与部署方式
后台任务的运行环境对依赖加载特别严格,尤其是你自己写的自定义类。如果你的自定义类引用了其他未正确部署的库,或者类本身的访问权限设置有问题(比如用了internal但后台任务项目没正确引用),1709版本的IoT runtime会直接抛出模糊的加载异常,连具体文件都不提示。建议你把自定义类所在的项目设置为可移植类库,或者直接把类文件复制到后台任务项目里,避免跨项目引用的加载坑。启用详细的IoT调试日志
默认的调试输出太简略了,你可以先确保项目的Package.appxmanifest里后台任务配置正确,然后去树莓派的**设备门户(Device Portal)**里,转到Debugging > Event Logs,筛选Microsoft-Windows-IoTBackgroundTask/Operational日志——这里能看到更详细的加载失败细节,比如到底是自定义类的哪个依赖没找到,或者初始化时哪里出了问题。排查自定义类的初始化逻辑
很多时候Run方法没执行,是因为后台任务类的构造函数或者自定义类的静态初始化代码先抛出了异常,被runtime吞掉后只返回了一个笼统的FileLoadException。你可以把自定义类的初始化代码拆成小片段,逐步注释测试,找到触发异常的那部分——我当时就是因为自定义类里静态初始化了一个没部署到设备上的第三方组件,直接导致整个后台任务启动失败。降级IoT Runtime做对比测试
如果上面的方法都没找到问题,你可以尝试把树莓派上的IoT Runtime降级到1703版本(对应Win10 1703),看看问题是否消失。如果降级后正常,那大概率是1709版本的IoT Runtime对自定义类的加载逻辑做了改动,得调整你的类实现,比如避免在静态构造函数里做复杂的IO或跨进程操作。
内容的提问来源于stack exchange,提问作者chris crowe

