将 Windows Media Player Dll 添加到 EXE

Add Windows Media Player Dll to EXE

我构建了一个使用一些外部库的应用程序,例如 Tag-lib、Naudio 和 Windows Media Player。

所以他们将我添加到我的解决方案中(与我的 EXE 文件在同一文件夹中),一些 DLL。

我想将那些 DLL 嵌入到我的 EXE 文件中,所以我查看了 Internet 并找到了一些选项。

我找到的最佳答案是:

Embedding DLLs in a compiled executable

它有效,但不适用于所有 DLL。

已成功嵌入Naudio和Tag-Lib,但无法嵌入Windows Media Player的DLL。

任何人都可以帮助我将 Windows 媒体播放器的 DLL 嵌入到我的应用程序的 EXE 中吗?

更新:

经过一些帮助(感谢 Mathieu Wybrecht),它成功了。 我做了他说的一切,但仍然效果不佳。 EXE 文件工作得很好,我可以移动他,它会工作。 但是当我在项目的解决方案中时,它会提示我缺少 Dll(Costura.Fody 刚刚嵌入的 WMP 的 Dll...),然后我再次将 Dll 复制到该文件夹​​,错误消失了。它成功构建解决方案,重建解决方案或启动程序,DLL 再次消失(嵌入到 EXE 中)并且错误再次出现...

你的问题不清楚。 "when I started to use Windows Media Player, it added a DLL file, and now it doesn't ..."

是什么意思
  • "it"在哪里添加了DLL文件?
  • 什么是"it"?你的申请? Windows 媒体播放器?
  • 添加了什么 DLL?

如果问题是您想在 exe 中再嵌入一个 DLL,请按照您找到的有关 Costura.Fody 的操作方法进行操作。

如果问题发生在运行时,请确保所有嵌入式DLL 都不要尝试加载更多依赖项。您可以使用 "Dependency Walker" 检查它们的依赖关系,它存在于 x86 和 x64 平台。

编辑:您编辑了您的问题,现在我也回来编辑我的答案:)

因此,您成功嵌入了几个 DLL,但不是每个都成功。这可能与以下一些原因有关:

  • 其中一些是原生DLL(你必须按照特定的过程嵌入):你可以参考Fody/Costura unmanaged assemblies and Fody/Costura Native Libraries
  • 对于其中一些,您项目中的引用可能未标记为 "Copy Local = true" and/or 由于某种原因未被视为 "Embeded Resources"
  • 也许您的库已正确嵌入但仍存在于您的输出目录中,因为您可能没有安装 clean-output 目标? 看看 Clean output directory
  • 或者您可能会遇到另一个更具体的问题,请尝试查看 Fody/Costura issues,您可能会找到未嵌入所需库的原因。