控制台项目缺失System.Media程序集,无法找到对应NuGet包求助
解决System.Media命名空间找不到及引用添加失败的问题
嘿,我来帮你搞定这个控制台游戏音效的问题!你遇到的情况大概率和项目的目标框架版本或者VS的小故障有关,咱们一步步来解决:
先搞清楚:你用的是.NET Framework还是.NET Core/.NET 5+?
System.Media.SoundPlayer是**.NET Framework**里的原生类,如果你现在的项目是基于.NET Core、.NET 5/6/7/8这些现代框架,默认是没有这个命名空间的——这可能是你找不到它的核心原因!
情况1:项目是.NET Framework
如果你的项目确实是.NET Framework,那按下面的步骤来:
- 先确认项目的目标框架版本:右键项目→属性→应用,确保目标框架是.NET Framework 4.6.1及以上(更低版本也支持,但尽量用新一点的)
- 正确添加System.Media引用:
- 右键项目→添加→引用
- 在弹出的窗口里选择「程序集」→「框架」,找到
System.Media并勾选,点击确定
- 如果还是出现
Unable to find an instance of Microsoft.VisualStudio.Shell.Interop.IVsReferenceManager报错,这是VS的小问题,试试这些修复手段:- 关闭VS,删除项目根目录下的
.vs隐藏文件夹,重新打开项目 - 打开VS Installer,选择你的VS版本,点击「修改」→「修复」,等修复完成后再试
- 手动编辑项目的
.csproj文件,直接添加以下代码(保存后重新加载项目):<ItemGroup> <Reference Include="System.Media" /> </ItemGroup>
- 关闭VS,删除项目根目录下的
情况2:项目是.NET Core/.NET 5+
现代.NET框架已经不再默认包含System.Media,而且SoundPlayer依赖Windows的winmm.dll,跨平台性很差,更推荐用下面的替代方案:
- 方案1:使用NAudio库(推荐)
NAudio是一个功能强大的音频处理库,支持控制台应用,在NuGet里可以直接找到:- 打开NuGet包管理器,搜索
NAudio并安装 - 用以下代码播放音效(以WAV文件为例):
using NAudio.Wave; public static void PlaySoundEffect(string wavFilePath) { using var audioReader = new AudioFileReader(wavFilePath); using var waveOut = new WaveOutEvent(); waveOut.Init(audioReader); waveOut.Play(); // 控制台应用需要等待播放完成,否则程序会直接退出 while (waveOut.PlaybackState == PlaybackState.Playing) { System.Threading.Thread.Sleep(100); } } - 打开NuGet包管理器,搜索
- 方案2:用P/Invoke直接调用Windows API
如果不想用第三方库,也可以直接调用系统的winmm.dll来播放WAV:using System.Runtime.InteropServices; public static class SoundPlayerHelper { [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] private static extern uint mciSendString(string command, StringBuilder returnString, int returnLength, IntPtr hwndCallback); public static void PlayWav(string filePath) { // 打开音频文件 mciSendString($"open \"{filePath}\" type waveaudio alias sound", null, 0, IntPtr.Zero); // 播放并等待完成 mciSendString("play sound wait", null, 0, IntPtr.Zero); // 关闭文件 mciSendString("close sound", null, 0, IntPtr.Zero); } }
最后再检查一遍
先确认自己的项目框架类型,再对应上面的步骤操作,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者Loë B.
相关产品推荐
相关产品推荐

