我需要在本地创建“ BadimageFormatException”以测试某些缓存问题。如何创建“ BadImageFormatException”?
答案 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不会非常高兴并引发异常。
对于有趣的琐事,BadImageFormatException
与gifs
或jpegs
之类的不良图像格式无关,但是当.Net尝试加载DLL
或{ {1}}与CLR不兼容。
此外,所有异常均源自System.Exception。 exe
刚继承自BadImageFormatException
。