如何触发“ BadImageFormatException”?

时间:2019-02-04 22:30:16

标签: c# .net

我需要在本地创建“ BadimageFormatException”以测试某些缓存问题。如何创建“ BadImageFormatException”?

2 个答案:

答案 0 :(得分:2)

正如注释中已指定的那样,您可以创建并抛出此异常:

throw new BadImageFormatException();

如果您想自然引发此异常,则按照MSDN documentation

  

当动态链接库(.dll文件)或可执行文件(.exe文件)的文件格式与公共语言运行库期望的格式不符时,抛出此异常

这意味着您可以通过尝试加载无效的程序集文件来导致它:

string tempPath = Path.GetTempFileName();

using (var file = File.OpenWrite(tempPath))
using (var sw = new StreamWriter(file))
{
    sw.WriteLine("I am not an assembly");
}

Assembly.LoadFile(tempPath);

感谢 @ Xiaoy312 。使用Assembly.Load的方法要简单得多:

Assembly.Load(new byte[] { 0 });

答案 1 :(得分:0)

如果对此不熟悉,那么一种方法就是加载非托管程序集,例如notepad.exe。

try
    {
        // path to notepad.exe.
        string path = Environment.ExpandEnvironmentVariables("%windir%") + @"\System32\notepad.exe";
        Assembly assembly = Assembly.LoadFile(path);
    }
    catch (System.BadImageFormatException exception)
    {
       // catch an exception.
    }

由于记事本不受管理并且未使用.Net进行编译,因此.net不会非常高兴并引发异常。

对于有趣的琐事,BadImageFormatExceptiongifsjpegs之类的不良图像格式无关,但是当.Net尝试加载DLL或{ {1}}与CLR不兼容。

此外,所有异常均源自System.Exceptionexe刚继承自BadImageFormatException