.NET Core 3.1 WinForm嵌入VLC播放器调用Core.Initialize()抛出异常如何解决
解决方案
根因说明
你遇到的报错核心原因是缺失VLC的原生运行库,LibVLCSharp本身只是.NET封装层,不包含libvlc.dll、libvlccore.dll等原生二进制文件,需要单独安装对应平台的原生包。
具体操作步骤
- 第一步:安装原生LibVLC包
打开NuGet包管理器,搜索安装VideoLAN.LibVLC.Windows,版本选择和你当前使用的LibVLCSharp 3.6.1兼容的3.x稳定版即可。该包会自动将对应架构的VLC原生库及依赖插件复制到输出目录。 - 第二步:修正项目生成配置
不要使用「Any CPU」作为生成目标,明确指定生成平台为x64或x86,和你运行环境的架构匹配,避免架构不匹配导致的dll加载失败。 - 第三步:修正代码生命周期逻辑
你当前在局部方法的using块中声明LibVLC和MediaPlayer实例,PlayerForm_Load方法执行完毕后实例就会被释放,播放会直接中断。需要将两个对象提升为类级别成员变量,在窗体关闭时再释放。
修正后代码示例
// 类级别声明成员变量 private LibVLC _libVLC; private MediaPlayer _mediaPlayer; private void PlayerForm_Load(object sender, EventArgs e) { Core.Initialize(); _libVLC = new LibVLC(); _mediaPlayer = new MediaPlayer(_libVLC); var uri = new Uri("C:\\Active Projects\\ScreenPlayerWeb\\ScreenPlayerWeb\\wwwroot\\Videos\\VID_20190621_112556.3gp"); using var media = new Media(_libVLC, uri); _mediaPlayer.Fullscreen = true; _mediaPlayer.Play(media); } // 窗体关闭时释放资源 private void PlayerForm_FormClosing(object sender, FormClosingEventArgs e) { _mediaPlayer?.Stop(); _mediaPlayer?.Dispose(); _libVLC?.Dispose(); }
可选排查方案
如果安装原生包后输出目录仍没有libvlc相关文件,可以检查NuGet包还原是否正常,重新生成项目即可触发原生库的复制逻辑。
内容的提问来源于stack exchange,提问作者Malik Mehmood
相关产品推荐
相关产品推荐

