使用C#播放WAV文件遇CS0234错误:Microsoft.VisualBasic.Devices不存在
解决Microsoft.VisualBasic.Devices.Audio引用错误及音频播放替代方案
问题根源
你遇到的CS0234错误,本质是因为在.NET 5+项目中默认没有引用Microsoft.VisualBasic程序集,而且即便手动引用,Microsoft.VisualBasic.Devices.Audio类在.NET Core/.NET 5+环境下存在兼容性缺陷——官方文档提到的升级到.NET 5+仅恢复了该命名空间下的Clock和Ports类,Audio类并未被纳入恢复范围,所以原教程的代码无法直接运行。
临时解决:继续使用原代码结构
如果想沿用教程的代码逻辑,需要手动添加Microsoft.VisualBasic程序集引用:
- Visual Studio操作:右键项目 → 管理NuGet程序包 → 搜索
Microsoft.VisualBasic并安装;或者右键项目 → 添加 → 引用 → 勾选Microsoft.VisualBasic。 - VS Code/.NET CLI操作:在项目的
.csproj文件中添加以下配置,然后执行dotnet restore:
<PackageReference Include="Microsoft.VisualBasic" Version="10.3.0" />
注意:这种方式仅在Windows平台有效,跨平台场景下可能出现播放失败的问题。
推荐替代方案:使用原生或专业音频库
方案1:.NET原生System.Media.SoundPlayer
适合简单的WAV文件播放,无需额外依赖,跨平台支持较好:
using System.Media; namespace MyApp { class Program { static void Main() { // 使用using确保资源正确释放 using (var soundPlayer = new SoundPlayer(@"m:\crooner2.wav")) { // PlaySync对应原代码的WaitToComplete模式,同步播放直到结束 soundPlayer.PlaySync(); } } } }
方案2:专业音频库NAudio
如果后续需要更复杂的音频处理(比如非WAV格式、音频编辑、实时播放控制等),推荐使用NAudio:
- 安装NAudio包:执行
dotnet add package NAudio(或在Visual Studio的NuGet包管理器中搜索安装) - 示例代码(播放WAV文件):
using NAudio.Wave; namespace MyApp { class Program { static void Main() { using (var audioReader = new AudioFileReader(@"m:\crooner2.wav")) using (var wavePlayer = new WaveOutEvent()) { wavePlayer.Init(audioReader); wavePlayer.Play(); // 等待播放完成 while (wavePlayer.PlaybackState == PlaybackState.Playing) { System.Threading.Thread.Sleep(100); } } } } }
内容的提问来源于stack exchange,提问作者George Brown
相关产品推荐
相关产品推荐

