【问题标题】:Add Windows Media Player Dll to EXE将 Windows Media Player Dll 添加到 EXE
【发布时间】:2016-10-26 20:09:33
【问题描述】:

我构建了一个使用一些外部库的应用程序,例如 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 文件完美运行,我可以移动他,它会工作。 但是当我在项目的解决方案中时,它错误地告诉我丢失的 Dll(Costura.Fody 刚刚嵌入的 WMP 的 Dll...),然后我再次将 Dll 复制到文件夹中并且错误消失了。它继续构建解决方案,重新构建解决方案或启动程序,DLL 再次消失(嵌入到 EXE)并且错误再次出现......

【问题讨论】:

  • WMP 包含在操作系统中。您不能也不能嵌入它使用的 DLL。它是一个 COM 组件,需要一个互操作库才能在 .NET 程序中使用。 .NET 4 和 VS2010+ 具有“嵌入互操作类型”功能,不再依赖互操作库。
  • 我不理解“嵌入互操作类型”选项。你能给我解释一下吗?
  • 选择 WMP 引用,在“属性”窗口中查找该选项。需要 VS2010 或更高版本。
  • 我的意思是,你能解释一下它在做什么吗?

标签: c# dll axwindowsmediaplayer


【解决方案1】:

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

  • “它”在哪里添加了 DLL 文件?
  • 什么是“它”?你的申请? Windows 媒体播放器?
  • 添加了什么 DLL?

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

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

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

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

  • 其中一些是原生DLL(您必须遵循特定的进程才能嵌入):您可以参考Fody/Costura unmanaged assembliesFody/Costura Native Libraries
  • 对于其中一些,您项目中的引用可能未标记为“复制本地 = true”和/或由于某种原因不被视为“嵌入资源”
  • 也许您的库已正确嵌入,但仍存在于您的输出目录中,因为您可能没有安装 clean-output 目标? 看看Clean output directory
  • 或者您可能会遇到另一个更具体的问题,请尝试查看Fody/Costura issues,您可能会找到未嵌入所需库的原因。

【讨论】:

  • 回答您关于“嵌入互操作类型”选项在引用属性中的作用的问题:它在您的 exe 中嵌入了使用 COM 程序集所需的所有互操作。
  • 不客气 ;) 我不知道 WMP dll 与互操作有关,因此感谢 @Hans-Passant 的相关消息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
相关资源
最近更新 更多