Добавить Windows Media Player Dll в EXE

Я создал приложение, использующее некоторые внешние библиотеки, такие как Tag-lib, Naudio и Windows Media Player.

Поэтому они добавляют меня в мое решение (в той же папке, что и мой EXE-файл), некоторые библиотеки DLL.

Я хотел встроить эти DLL в свой EXE-файл, поэтому поискал в Интернете и нашел несколько вариантов.

Лучший ответ, который я нашел, был такой:

Встраивание библиотек DLL в скомпилированный исполняемый файл

И это сработало, но не для всех DLL.

Он успешно встроил Naudio и Tag-Lib, но не смог встроить библиотеки DLL Windows Media Player.

Может ли кто-нибудь помочь мне встроить библиотеки DLL проигрывателя Windows Media в EXE моего приложения?

Обновлять:

После некоторой помощи (спасибо Mathieu Wybrecht) это сработало. Я сделал все, что он сказал, но все равно не получается. Файл EXE работает отлично, я могу его переместить, и он заработает. Но когда я нахожусь в решении проекта, у меня возникает ошибка по поводу отсутствующих Dll (Dll WMP, которые Costura.Fody только что встроили ...), а затем я снова копирую Dll в папку, и ошибка исчезает. Он защищен для создания решения, перестройки решения или запуска программы, библиотеки DLL снова исчезают (вставляются в EXE), и ошибка возникает снова ...


person Arad Zulti    schedule 26.10.2016    source источник
comment
WMP входит в состав операционной системы. Вы не должны и не можете встраивать используемые библиотеки DLL. Это компонент COM, и для его использования в программе .NET требуется библиотека взаимодействия. .NET 4 и VS2010 + имеют функцию Embed Interop Types, больше нет зависимости от библиотеки взаимодействия.   -  person Hans Passant    schedule 27.10.2016
comment
Я не понял опцию «Встраивать типы взаимодействия». Вы можете мне это объяснить?   -  person Arad Zulti    schedule 27.10.2016
comment
Выберите ссылку WMP, найдите параметр в окне «Свойства». Требуется VS2010 или выше.   -  person Hans Passant    schedule 27.10.2016
comment
Я имел в виду: вы можете объяснить мне, что он делает?   -  person Arad Zulti    schedule 27.10.2016


Ответы (1)


Ваш вопрос непонятен. Что вы имеете в виду под «когда я начал использовать Windows Media Player, он добавил файл DLL, а теперь он не ...»

  • Куда "он" добавил DLL файл?
  • Что это" ? Ваше приложение? Проигрыватель Windows Media?
  • Какая DLL была добавлена?

Если проблема в том, что вы хотите встроить еще одну DLL в свой exe, следуйте инструкциям, которые вы нашли о Costura.Fody.

Если проблема возникает во время выполнения, убедитесь, что все встроенные библиотеки DLL не пытаются загрузить больше зависимостей. Вы можете проверить их зависимости с помощью «Dependency Walker», он существует для платформ x86 и x64.

Изменить: вы отредактировали свой вопрос, и теперь я тоже вернулся, чтобы отредактировать свой ответ :)

Итак, вам удалось встроить несколько DLL, но не каждую из них. Это может быть связано с некоторыми из следующих причин:

person Mathieu Wybrecht    schedule 27.10.2016
comment
Чтобы ответить на ваш вопрос о том, что включает в себя параметр Embed Interop Types в ссылочных свойствах: он встраивает в ваш exe все Interop, которые необходимы для использования сборок COM. - person Mathieu Wybrecht; 28.10.2016
comment
Пожалуйста;) Я не знал, что WMP dll была связана с взаимодействием, поэтому спасибо @ Hans-Passant за его сообщение об этом! - person Mathieu Wybrecht; 28.10.2016