C# WinForm接入Linphone SDK报linphone.dll找不到异常问题咨询
Linphone SDK 在Windows Forms项目下加载异常解答
官方发布的Linphone桌面版NuGet包完全支持Windows Forms项目,不需要自行下载源码通过Cmake编译构建,你遇到的DllNotFoundException:linphone.dll问题是NuGet包原生依赖的自动拷贝逻辑在WinForms项目类型下未生效导致的,和项目类型兼容性无关。
问题根因
UWP项目可正常运行是因为UWP的NuGet依赖处理机制会自动将对应架构的原生SDK文件完整部署到运行目录;而WinForms属于传统桌面项目类型,当前Linphone NuGet包没有针对该项目类型配置原生文件的自动拷贝规则,多数用户仅单独拷贝linphone.dll单个文件,漏了它依赖的数十个配套原生dll,最终触发加载失败。
解决步骤
- 将项目生成目标平台从默认的
Any CPU改为和你安装的SDK匹配的具体架构(x64/x86二选一,Linphone原生dll不支持Any CPU架构加载),确认安装的是带win-desktop标识的桌面版SDK包,不要误用UWP专属NuGet包。 - 打开本地NuGet包缓存路径,找到对应Linphone版本下的原生dll目录,对应路径为
runtimes/win-x64/native(x64架构)或runtimes/win-x86/native(x86架构),将该目录下所有dll文件全部添加到你的WinForms项目中。注意:只要漏拷任意一个依赖dll,CLR都会抛出找不到linphone.dll的异常,禁止只拷贝linphone.dll单个文件。 - 在Visual Studio解决方案资源管理器中选中刚添加的所有dll,将属性面板中的「复制到输出目录」选项设置为「如果较新则复制」,「生成操作」设置为「无」。
- 还原之前修改过的
LinphoneWrapper.cs文件,保持默认的[DllImport("linphone")]声明即可,不需要修改dll加载路径,随意修改路径反而会触发额外的加载错误。 - 清理之前手动零散放到bin目录下的dll文件,重新生成项目后即可正常运行呼叫相关逻辑。
补充说明
仅当你需要自定义SDK功能、裁剪不需要的编解码器/功能模块、适配特殊系统版本时,才需要下载源码通过Cmake自行编译构建,常规WinForms二次开发直接使用官方NuGet包按上述步骤配置即可满足需求。
内容的提问来源于stack exchange,提问作者Coveit
相关产品推荐
相关产品推荐

