You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET7/8 WPF商店打包应用访问Windows.Storage遇初始化异常

解决MSIX打包的.NET7/.NET8 WPF应用访问Windows.Storage的异常问题

当WPF应用打包为MSIX(应用商店格式)后,直接调用Windows.Storage.ApplicationData.Current会抛出System.TypeInitializationException(内部为COMException: ClassFactory cannot supply requested class),原因是非UWP的.NET应用在MSIX容器中需要正确初始化WinRT运行时环境,或可改用.NET原生API绕过WinRT依赖。

方案一:初始化WinRT运行时

在应用启动早期(如App.xaml.cs的OnStartup方法)添加WinRT初始化代码,确保WinRT组件正常激活:

protected override void OnStartup(StartupEventArgs e)
{
    WinRT.ComWrappersSupport.InitializeWinRT();
    
    Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .WriteTo.File(Path.Combine(ApplicationData.Current.LocalFolder.Path, "app.log"))
                .CreateLogger();
    
    base.OnStartup(e);
}

方案二:改用.NET原生API获取应用数据目录

无需依赖WinRT组件,直接使用.NET的Environment类获取MSIX隔离后的本地应用数据目录(自动指向应用的LocalState目录):

var localDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.File(Path.Combine(localDataPath, "app.log"))
            .CreateLogger();

补充说明

  • 方案一适用于需要调用更多WinRT API的场景,初始化后即可解决COM激活异常。
  • 方案二更简洁,基于.NET原生API,兼容性更强,无需依赖WinRT组件。
  • 你的项目目标框架net7.0-windows10.0.22621.0已包含WinRT支持,无需额外安装NuGet包。

内容的提问来源于stack exchange,提问作者Franck E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:31:20