调用ApplicationData.Current()的WinUI 3引发System.TypeInitializati



我正在尝试将windows桌面应用程序从WinUI 2转换为WinUI 3。但是,Windows.Storage.ApplicationData类出现问题。当我调用ApplicationData.Current(这样我就可以访问应用程序本地数据存储中的文件或获取本地设置(时,会引发System.TypeInitializationException异常。

以下屏幕截图显示了问题:

System.TypeInitializationException

(这是我在Visual Studio 2022中使用项目模板"Blank App,Packaged(WinUI 3 in Desktop("创建的默认应用程序;,我所做的唯一更改是在App类的OnLaunched((方法中添加一行以获取当前ApplicationData对象:

var appData=Windows.Storage.ApplicationData.Current;(

知道我在这里做错了什么吗?我认为可能存在信任或阴谋问题,或者我应该使用其他方法来获取应用程序的本地数据文件夹或WinUI 3桌面应用程序的设置。

我最近遇到了同样的问题。无论我在WinUI3应用程序中的何处进行调用,每当我调用ApplicationDataneneneba API时,我总是会遇到完全相同的异常(System.TypeInitializationException带有内部COMException(。我在API文档中找不到答案,尤其是在希望找到答案的地方。(如果它在那里,它就会被埋没,或者可能很容易被不熟悉.NET编程的人忽视,比如我自己。(下面的代码行总是给我带来一个例外:

ApplicationDataContainer localSettings = ApplicationData.Current.LocalSettings;

对我有效的解决方案是我从WindowsAppSDK GitHub存储库上的一个问题的响应中学到的。引用我发现与我遇到的问题最相关的信息:

未在应用程序容器中运行的客户端必须使用以下API打开ApplicationData:https://learn.microsoft.com/en-us/uwp/api/Windows.Management.Core.ApplicationDataManager?view=winrt-22000,而在应用程序容器中运行的客户端必须使用此API打开ApplicationData:https://learn.microsoft.com/en-us/uwp/api/windows.storage.applicationdata?view=winrt-22000

基本上,我了解到需要使用ApplicationDataManager类打开ApplicationData。正如GitHub链接中所指出的,我发现的解决方案是用以下代码替换有问题的代码行:

var localSettings = ApplicationDataManager.CreateForPackageFamily(Package.Current.Id.FamilyName).LocalSettings;

从那里我可以像往常一样保存和加载应用程序设置,这里有适当的解释:

localSettings.Values["test setting"] = "a device specific setting";
String localValue = localSettings.Values["test setting"] as string;

希望这能帮助那些发现自己面临同样问题的人。

恕我直言,只有在调试器中我在"ApplicationData.Current";线非常奇怪。我想我遇到了和这里一样的问题:

正在静态上下文中获取ApplicationData.Current.LocalSettings的值

相关内容

最新更新