我构建了一个程序,它将使用 MediaInfo.dll 读取 mkv 文件的一些视频和音频信息。
从源代码运行时,该程序运行完美,并将 dll 放置在 bin
文件夹中。
现在我想发布我的应用程序并能够继续使用它。不再找到 MediaInfo.dll
库。我尝试将其放在 C:\WIndows\
或 C:\Windows\system32
中,但没有成功。如果我运行安装程序(发布后),程序将安装在同一位置(我不想要这个,但这是另一个问题)。我也尝试将 dll 放入该文件夹中。
引发错误的代码是:
try{
Handle = MediaInfo_New();
}
catch (Exception ex){
Handle = (IntPtr)0;
Console.Out.WriteLine(ex.ToString());
}
抛出的错误是System.BadImageFormatException
或System.DllNotFoundException:无法加载DLL“MediaInfo.dll”
。
知道在哪里放置 dll 吗?
最佳答案
您需要将 DLL 部署到复制 EXE 的同一目录。
您遇到了 BadImageFormatException 问题,并且看不到 c:\windows\system32 工作,因为您正在启动 64 位版本 Windows 的计算机上部署程序。但是,您的程序无法在 64 位模式下运行,您依赖于 32 位 native 代码。您需要通过强制程序在 32 位模式下运行来解决这个问题。右键单击您的 EXE 项目,属性,构建选项卡,将平台目标设置更改为 x86。将DLL复制到Windows目录确实是个坏主意,但在这样的机器上它是c:\windows\syswow64。 始终倾向于本地部署,与 EXE 位于同一目录。
如果在此之后您仍然遇到 DllNotFoundException 问题,那么可能的问题是 MediaInfo.dll 本身依赖于另一个 DLL。这很常见,存储 C 运行时的 DLL 是一个非常常见的依赖项。如果您不知道这可能是什么 DLL,那么您可以使用 SysInternals 的 ProcMon 实用程序。您将看到程序搜索 DLL 但找不到它。
关于使用 MediaInfo.dll 的 C# 发布应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184713/