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

使用Dapper插入数据时Autodesk Navisworks插件崩溃求助

排查Navisworks插件中Dapper导致崩溃的思路

我之前在开发Navisworks插件时也碰到过类似的第三方库兼容性问题,结合你的场景,给你几个具体的排查方向:

1. 检查Dapper与Navisworks的.NET框架兼容性

Navisworks多数版本基于**.NET Framework 4.7.2**运行,而新版Dapper可能默认针对.NET Core/.NET 5+编译,或者引入了旧框架不支持的API。

  • 尝试降级Dapper到稳定的旧版本(比如2.0.x系列),确保安装的是针对.NET Framework的NuGet包
  • 确认你的项目目标框架和Navisworks使用的版本完全一致

2. 排查线程上下文冲突

Navisworks的插件运行在严格的UI线程/插件执行上下文里,Dapper内部的异步操作或线程切换可能触发Navisworks的非托管代码崩溃:

  • 把数据库操作强制包裹在Navisworks的主UI线程中执行:
Autodesk.Navisworks.Api.Application.MainWindow.Dispatcher.Invoke(() =>
{
    using (SqlConnection connection = new SqlConnection(NavisDbSettings.ConnectToDB().ConnectionString))
    {
        connection.Open();
        using (SqlTransaction transaction = connection.BeginTransaction())
        {
            NavisTest navisTest = new NavisTest("Wall", "Concrete Wall 01");
            connection.Execute(NavisDbSqlCommands.navisTestSql, navisTest, transaction: transaction);
            transaction.Commit();
        }
    }
});
  • 避免长时间占用Navisworks的主线程,必要时拆分批量插入逻辑,加入短暂延迟

3. 验证参数映射的正确性

你的实体类属性是大写开头(Category/Family),但SQL参数是小写(@category/@family),虽然Dapper默认支持大小写不敏感映射,但在Navisworks的特殊环境下可能出现绑定失败:

  • 显式指定参数,避免自动映射的不确定性:
connection.Execute(navisTestSql, new { Category = navisTest.Category, Family = navisTest.Family }, transaction: transaction);
  • 或者修改SQL参数为大写@Category/@Family,保持和实体类属性一致

4. 启用Dapper调试模式并禁用命令缓存

Dapper的命令缓存可能和Navisworks的插件隔离机制冲突,尝试禁用缓存并查看生成的SQL细节:

var command = new CommandDefinition(
    navisTestSql,
    parameters: navisTest,
    transaction: transaction,
    flags: CommandFlags.NoCache
);
connection.Execute(command);
  • 同时可以手动输出参数值,确认传递到数据库的内容是否正确

5. 捕获底层未处理异常

Navisworks是混合托管/非托管的程序,普通try-catch可能捕获不到非托管层面的异常,尝试全局捕获:

AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
    var exception = e.ExceptionObject as Exception;
    // 将异常的完整调用栈和消息写入本地日志
    File.WriteAllText(@"C:\temp\navis_dapper_error.log", exception?.ToString() ?? "Unknown crash");
};
  • 打开Visual Studio的调试 -> 异常设置,勾选所有托管和非托管异常,调试时查看崩溃瞬间的具体异常信息

6. 检查插件的依赖加载

Navisworks对插件的依赖加载有严格限制,确保Dapper的dll和你的插件程序集在同一目录,或者通过NuGet正确打包所有依赖,避免Navisworks无法加载Dapper的依赖组件

内容的提问来源于stack exchange,提问作者Andrea Tassera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:07:34