x86 32 位支持 Accord.video.FFMPEG

问题描述

协议版本 3.8.2

我正在使用 Accord、Accord.video、Accord.video.FFMPEG Dll 来捕获屏幕,我的代码被编译为 ANYcpu,在 64 位机器上一切正常,但在 32 位机器上我遇到了问题以下是我得到的例外。

Exception occurred while loading the assemblies Could not load file or assembly 'Accord.Video.FFMPEG.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1),at System.Reflection.RuntimeAssembly.nLoadFile(String path,Evidence evidence)
   at System.Reflection.Assembly.LoadFile(String path)
   at ProHance.ProbeTray.Program.MPvcUlyJUg(Object,ResolveEventArgs  )

解决方法

  1. 将库项目添加到解决方案中。

  2. 将 nuget 包 Accord.Video.ffmpeg(或 x64)添加到库项目 (不要更改平台目标,如果您的环境是 x64,请使用 x64 版本否则使用 x86)

  3. 将这些引用的本地副本更改为虚假的 Accord,Accord.Video,Accord.Video.ffmpeg

  4. 复制packages\Accord.Video.FFMPEG.3.8.0\build+中的所有文件 Accord,Accord.Video.ffmpeg 到您的输出文件夹 像 bin\ffmpeg

  5. 将这些行放在 Application_Start 中。

var path = Thread.GetDomain().BaseDirectory + "bin\ffmpeg\";
Environment.SetEnvironmentVariable("PATH",Environment.GetEnvironmentVariable("PATH") + ";"+ path);
AppDomain.CurrentDomain.AppendPrivatePath(path);