如何使用相对路径替代绝对路径实现跨机器音频播放?
解决SoundPlayer使用相对路径播放音频的问题
针对多人协作开发场景,推荐两种可靠的相对路径实现方式:
方式一:将音频文件设为嵌入资源
这种方式不需要依赖外部文件路径,音频会打包进程序集里,彻底避免路径分歧:
- 在Visual Studio中右键音频文件(
menuHoover.mp3),选择属性 - 将「生成操作」改为嵌入的资源,「复制到输出目录」改为不复制
- 用以下代码读取播放:
using System.Reflection; // 格式:项目命名空间+文件夹层级+文件名,比如你的项目命名空间是MoreProject,路径就是MoreProject.Assets.Sounds.menuHoover.mp3 var resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("YourNamespace.Assets.Sounds.menuHoover.mp3"); if (resourceStream != null) { SoundPlayer soundPlay = new SoundPlayer(resourceStream); soundPlay.Play(); }
方式二:将音频文件复制到输出目录
如果需要保留外部文件的可修改性,可以用这种方式,确保所有开发者的输出目录结构一致:
- 右键音频文件,选择属性
- 将「复制到输出目录」改为始终复制,「生成操作」保持内容
- 用程序运行根目录拼接相对路径,避免当前工作目录不一致的问题:
using System.IO; using System; // 获取程序运行的根目录 string baseDir = AppDomain.CurrentDomain.BaseDirectory; // 拼接相对路径 string soundPath = Path.Combine(baseDir, @"Assets\Sounds\menuHoover.mp3"); SoundPlayer soundPlay = new SoundPlayer(soundPath); soundPlay.Play();
注意事项
- 不要直接写
@"Assets\Sounds\menuHoover.mp3"这种裸相对路径,因为程序的当前工作目录可能不是项目根目录(比如调试时在bin/Debug下,部署时又在其他位置) - 确认所有开发者的项目文件结构完全一致,尤其是
Assets/Sounds的层级
内容的提问来源于stack exchange,提问作者Filipe Cruz
相关产品推荐
相关产品推荐

