You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台项目缺失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引用:
    1. 右键项目→添加→引用
    2. 在弹出的窗口里选择「程序集」→「框架」,找到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>
      

情况2:项目是.NET Core/.NET 5+

现代.NET框架已经不再默认包含System.Media,而且SoundPlayer依赖Windows的winmm.dll,跨平台性很差,更推荐用下面的替代方案:

  • 方案1:使用NAudio库(推荐)
    NAudio是一个功能强大的音频处理库,支持控制台应用,在NuGet里可以直接找到:
    1. 打开NuGet包管理器,搜索NAudio并安装
    2. 用以下代码播放音效(以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);
        }
    }
    
  • 方案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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 10:58:17