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

C# WinUI发布模式下连接MongoDB失败问题求助

问题解决:WinUI发布模式下MongoDB访问失败

核心原因分析

调试正常但发布模式报错,结合MissingMethodException和MongoConnectionException,主要是老版本MongoDB.Driver与WinUI框架兼容性差,加上发布模式的代码裁剪、异步方法不当使用等因素导致。

解决方案

1. 升级MongoDB.Driver版本

你当前使用的v3.1.0是2017年的老旧版本,和WinUI依赖的.NET 6+/Windows App SDK完全不兼容,这是引发MissingMethodException的核心原因:

  • 打开NuGet包管理器,卸载当前的MongoDB.Driver和MongoDB.Bson
  • 安装最新稳定版的MongoDB.Driver(当前最新为v2.22.x)
  • 升级后重新测试发布模式

2. 禁用/配置代码裁剪

WinUI发布模式默认启用代码裁剪(Trim),会移除MongoDB.Driver中依赖反射的动态代码,导致方法缺失:

  • 打开项目的.csproj文件,添加以下配置:
<PropertyGroup>
  <!-- 如果必须保留裁剪,用partial模式;否则直接设置为false关闭 -->
  <PublishTrimmed>false</PublishTrimmed>
  <TrimMode>partial</TrimMode>
</PropertyGroup>
<ItemGroup>
  <!-- 确保MongoDB相关程序集不被裁剪 -->
  <TrimmerRootAssembly Include="MongoDB.Driver" />
  <TrimmerRootAssembly Include="MongoDB.Bson" />
</ItemGroup>

3. 修复异步方法的错误使用

async void在UI场景下会导致异常无法被捕获,且可能引发线程问题:

  • 修改LoadDB为async Task,并添加异常捕获:
public MainWindow()
{
    this.InitializeComponent();
    _ = InitializeDatabaseAsync();
}

private async Task InitializeDatabaseAsync()
{
    try
    {
        await LoadDB();
    }
    catch (Exception ex)
    {
        // 输出详细错误日志,方便排查
        System.Diagnostics.Debug.WriteLine($"DB访问错误:{ex.Message}\n{ex.InnerException?.Message}\n{ex.StackTrace}");
    }
}

public async Task LoadDB()
{
    var mongoClient = new MongoClient("<MyConnectionString>");
    var database = mongoClient.GetDatabase("CPSUSERS");
    var collection = database.GetCollection<Template>("CPSCollection");

    templates = await collection.Find(new BsonDocument()).Limit(10).ToListAsync();

    LoadLists();
}

4. 验证发布环境的连接配置

  • 确认发布环境中MongoDB服务正常运行(本地部署),或云MongoDB的IP白名单、认证信息正确
  • 检查连接字符串在发布模式下是否正确(避免调试和发布用不同配置,建议用配置文件管理)

5. 确认发布依赖项完整性

  • 右键项目 → 属性 → 发布 → 查看依赖项,确保MongoDB.Driver和MongoDB.Bson被包含在发布包中
  • 如果缺失,手动清理NuGet缓存后重新安装包,再重新发布

内容的提问来源于stack exchange,提问作者Alpha Reuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:22:35