在我的项目中,我有一个DLL,用于需要播放一些音频文件的WPF / XAML控件。现在,使用SoundPlayer
我可以将这些音频文件设置为DLL的“嵌入式资源”(也包含WPF控件)。但是,SoundPlayer
有一些严重的限制,所以我切换到MediaPlayer
。
不幸的是,MediaPlayer
帮助页面指出MediaPlayer
无法使用资源。 (我尝试使用Pack URIs但是这不起作用 - 至少没有我尝试过的组合。)所以,现在,我正在将DLL资源(音频文件)写入临时文件然后将它们与MediaPlayer
一起使用,但这是恕我直言,而不是一个“好”的解决方案。
所以,我想知道WPF中是否有一个“正确”的方式,MediaPlayer
将音频文件放在DLL项目中。
帮助页面指出(音频)文件应标记为“内容”并使用“复制到输出目录”,但显然这仅适用于属于EXE项目的文件。它不适用于DLL项目。
答案 0 :(得分:1)
正如您所发现的,MediaPlayer不支持从资源加载媒体。
最简单的选择是将声音文件与您的应用程序一起分发并将它们放在应用程序文件夹中 - 内容/“复制到输出目录”就是这样。
如果你达到Visual Studio构建系统的限制,你可以自己复制文件(将它们拖放到exe项目的bin / Debug或bin / Release folser中)或者编写一个批处理文件来复制它们和将它用作构建后的动作。
显然,当您将应用程序发送给最终用户时,您必须确保正确复制文件。
如果您正在编写DLL以供其他开发人员使用,并且您不希望手动文件复制成为开发人员安装过程的一部分,则可以始终使用指向文件位置的注册表项(由DLL设置)安装程序) - 如果缺少注册表项,则回退到EXE文件夹(因此EXE开发人员仍然必须使用EXE捆绑文件,但在开发过程中不需要乱用任何内容)。
当然,如果您必须将DLL作为一个文件独立包,那么您只能使用已经使用的“提取到临时文件夹”选项。
答案 1 :(得分:1)
对于那些对解决方案感兴趣的人,我写了一篇包含解决方案的文章。你可以在这里找到它:
http://www.codeproject.com/KB/audio-video/wpfaudioplayer.aspx