2016-10-26 6 views
0

Я создал приложение, которое использовало некоторые библиотеки extrnal, такие как Tag-lib, Naudio и Windows Media Player.Добавить Windows Media Player Dll в EXE

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

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

Лучший ответ я нашел это:

Embedding DLLs in a compiled executable

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

Он успешно внедрен Naudio и Tag-Lib, но не включен для встраивания DLL-файлов Windows Media Player.

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

Update:

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

+1

WMP входит в комплект поставки операционной системы. Вы не должны и не можете внедрять библиотеки DLL, которые он использует. Это COM-компонент, и для этого требуется библиотека interop, чтобы сделать ее пригодной для использования в .NET-программе. .NET 4 и VS2010 + имеют функцию «Вставить типы прерываний», больше не зависят от библиотеки interop. –

+0

Я не понял вариант «Вставить типы взаимодействия». Вы можете мне это объяснить? –

+0

Выберите ссылку WMP, загляните в окно «Свойства» для этой опции. Требуется VS2010 или более. –

ответ

0

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

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

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

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

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

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

  • Некоторые из них являются родными DLL (вы должны следовать конкретному процессу встраивать): Вы можете обратиться к Fody/Costura unmanaged assemblies и Fody/Costura Native Libraries
  • Для некоторых из них, Reference в вашем проекте, возможно, не помечены как «Копировать локально = true» и/или не считаются «Embeded Resources» по какой-то причине
  • Возможно, ваша библиотека правильно встроена, но все еще присутствует в вашем выходном каталоге, так как вы, возможно, не установили цель чистой продукции? Посмотрите на Clean output directory
  • Или вы можете столкнуться с другой проблемой, которая является более конкретной, попробуйте взглянуть на Fody/Costura issues, вы можете найти причину, по которой ваши желаемые библиотеки не встроены.
+0

Я отредактировал мой вопрос ... –

+0

Я обновляю свой вопрос снова, и спасибо! –

+0

Чтобы ответить на ваш вопрос о том, что такое опция «Вставить типы взаимодействия» в ссылочных свойствах: он включает в ваш exe все Interop, которые необходимы для использования COM-сборок. –

Смежные вопросы