如何创建使用Martincostello.Sqllocaldb的应用安装程序并解决引用问题?
解决Martincostello.Sqllocaldb跨机器部署的引用问题
问题根源
你遇到的SNI.dll找不到问题,本质是NuGet包中的原生平台依赖未被安装工具自动包含。Martincostello.Sqllocaldb依赖的Microsoft.Data.SqlClient.SNI包包含x86/x64专属的原生dll,VS安装项目和InstallShield默认不会自动扫描并打包这些平台特定文件。
InstallShield 2020 解决步骤
- 手动添加原生依赖文件
- 打开InstallShield项目,进入「Files」视图
- 在主程序输出目录下,手动添加
Microsoft.Data.SqlClient.SNI.1.0.19235.1\runtimes\win-[x86/x64]\native路径下的所有文件(根据你的应用目标平台选择x86或x64) - 将这些文件的安装路径设置为与主程序集相同的目录,确保运行时能被正确加载
- 锁定目标平台
在「General Information」视图中设置匹配的目标平台(x86/x64),避免跨平台导致的dll不兼容 - 校验依赖完整性
用「Dependencies」视图扫描项目,确认Microsoft.Data.SqlClient.SNI相关依赖已被纳入安装包
VS 2017-2019 安装项目解决步骤
- 手动编辑项目文件添加依赖
- 卸载VS安装项目,右键选择「编辑 .vdproj」
- 在
<File>节点区域添加对应平台的SNI.dll引用,示例:<File Name="SNI.dll" SourcePath="..\YourApp\packages\Microsoft.Data.SqlClient.SNI.1.0.19235.1\runtimes\win-x86\native\SNI.dll" /> - 保存后重新加载项目,确认文件已被加入输出列表
- 改用更智能的打包方式
放弃传统VS安装项目,改用ClickOnce发布或MSIX打包,这两种方式会自动识别并打包NuGet包中的原生依赖,无需手动配置
示例项目参考
- 直接基于
Martincostello.Sqllocaldb仓库自带的示例应用搭建安装项目,按照上述步骤配置依赖后,即可生成可跨机器部署的安装包 - 也可以新建一个简单的.NET项目,安装
Martincostello.Sqllocaldb包并编写基础的SQLLocalDB操作代码,再为其配置安装包,验证依赖包含逻辑是否正确
内容的提问来源于stack exchange,提问作者Oscar Meza
相关产品推荐
相关产品推荐

