Использование ресурсов DLL для WPF MediaPlayer - PullRequest
1 голос
/ 26 июля 2011

В моем проекте у меня есть DLL для некоторых элементов управления WPF / XAML, которые должны воспроизводить некоторые аудиофайлы.Теперь с помощью SoundPlayer я могу сделать эти аудиофайлы «встроенными ресурсами» библиотеки DLL (которая также содержит элементы управления WPF).Однако SoundPlayer имеет некоторые серьезные ограничения, поэтому я переключился на MediaPlayer.

К сожалению, на странице справки MediaPlayer указано, что MediaPlayer не может работать с ресурсами.(В любом случае я пытался использовать Pack URI , но это не сработало - по крайней мере, ни одна из комбинаций, которые я пробовал.) Итак, сейчас я записываю ресурсы DLL (аудиофайлы) во временныефайлы, а затем используйте их с MediaPlayer, но это ИМХО не «хорошее» решение.

Итак, мне было интересно, существует ли «правильный» способ в WPF с MediaPlayer для размещения аудиофайлов впроект DLL.

На странице справки указано, что (аудио) файлы должны быть помечены как «Содержимое» и использовать «Копировать в выходной каталог», но, очевидно, это работает только для файлов, которые являются частью проекта EXE.Это не работает для проекта DLL.

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Для тех, кто заинтересован в решении, я написал статью с обходным решением.Вы можете найти его здесь:

http://www.codeproject.com/KB/audio-video/wpfaudioplayer.aspx

1 голос
/ 26 июля 2011

Как вы обнаружили, MediaPlayer не поддерживает загрузку мультимедиа из ресурсов.

Самый простой вариант - распространить звуковые файлы вместе с приложением и поместить их в папку приложения. Именно это делает Content / «Copy to Output Directory».

Если вы установили ограничение системы сборки Visual Studio, вы можете просто скопировать файлы самостоятельно (перетащить их в папку bin / Debug или bin / Release проекта exe) или написать командный файл, который будет копировать их и используйте его как действие после сборки.

Очевидно, что когда вы отправляете приложение конечному пользователю, вы должны убедиться, что файлы скопированы правильно.

Если вы пишете DLL для использования другими разработчиками, и вы не хотите, чтобы ручное копирование файлов было частью процесса установки разработчика, вы всегда можете использовать раздел реестра, который указывает на расположение файлов (устанавливается библиотекой DLL). установщик) - и откройте папку EXE, если раздел реестра отсутствует (поэтому разработчику EXE по-прежнему приходится связывать файлы с EXE, но не нужно ни с чем связываться во время разработки).

И, конечно, если у вас должна быть DLL в виде отдельного файла, у вас останется только опция «Извлечь во временную папку», которую вы уже используете.

...