我正在尝试从Visual Studio中的资源调用ffprobe.exe
文件。我在SO上找到this回答并尝试将其应用于ffprobe。但我无法将字节加载到程序集。但是我的代码抛出System.BadImageFormatException: Bad IL Format
。
我用Google搜索错误消息,发现它通常表明二进制文件已损坏。我确保加载的字节与我的资源中的ffprobe.exe
文件的字节相同,如this回答所示。我将字节写入文件,然后使用comp
命令将其与原始文件进行比较。
通过命令行调用ffprobe.exe
文件时,它可以正常工作。所以我确信它没有腐败。
以下是我的尝试:
object ob = Properties.Resources.ffprobe;
var ffprobeBytes = (byte[])ob; // ffprobeBytes is identical to ffprobe.exe in resources
var ffprobeAssembly = Assembly.Load(ffprobeBytes); // this line throws the Exception
var ffprobeEntry = ffprobeAssembly.EntryPoint;
var ffProbeObject = ffprobeAssembly.CreateInstance(ffprobeEntry.Name);
string[] parameters = { filePath, "=show_streams", "-print_format xml", "-loglevel fatal" };
var result = ffprobeEntry.Invoke(ffProbeObject, parameters)
资源文件的BuildAction
为Embedded Resource
,Copy to output directory
设置为Copy always
。
有没有人知道这个例外的原因是什么?