将Windows Media Player Dll添加到EXE

时间:2016-10-26 20:09:33

标签: c# dll axwindowsmediaplayer

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

因此,他们将我添加到我的解决方案(与我的EXE文件位于同一文件夹中),一些DLL。

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

我找到的最佳答案是:

Embedding DLLs in a compiled executable

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

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

任何人都可以帮我将Windows Media Player的DLL嵌入到我的应用程序的EXE中吗?

更新

经过一些帮助(感谢Mathieu Wybrecht),它有效。 我做了他所说的一切,但仍然没有奏效。 EXE文件工作得很完美,我可以移动他,它会工作。 但是当我在项目的解决方案中时,它让我错过了关于丢失的Dlls(Costura.Fody刚刚嵌入的WMP的Dll ......),然后我再次将Dll复制到文件夹并且错误消失了。它需要构建解决方案,重建解决方案或启动程序,DLL再次消失(嵌入EXE)并且错误再次出现......

1 个答案:

答案 0 :(得分:0)

你的问题不明确。你是什​​么意思"当我开始使用Windows Media Player时,它添加了一个DLL文件,现在它没有......"

  • "它"添加DLL文件?
  • 什么是"它" ?你的申请? Windows Media Player?
  • 添加了什么DLL?

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

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

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

所以,你成功地嵌入了很少的DLL但不是每一个都嵌入了。它可能与以下一些原因有关:

  • 其中一些是原生DLL(您必须按照特定的流程进行嵌入):您可以参考Fody/Costura unmanaged assembliesFody/Costura Native Libraries
  • 对于其中一些,您项目中的参考可能未标记为" Copy Local = true"和/或不被视为"嵌入资源"由于某种原因
  • 也许您的库已正确嵌入但仍存在于输出目录中,因为您可能没有安装清理输出目标? 看看Clean output directory
  • 或者您可能面临另一个更具体的问题,尝试查看Fody/Costura issues,您可能会找到未嵌入所需库的原因。