• .Net 程序在运行中出现System.BadImageFormatException的解决方法


    原文链接:https://docs.microsoft.com/en-us/dotnet/api/system.badimageformatexception?view=net-5.0

    本文是翻译上面而来,如果有任何错误,请指正。

    当动态链接库(.dll文件)或可执行文件(.exe文件)的文件格式不符合公共语言运行库期望的格式时,将引发此异常。 特别是在以下情况下会引发异常:

    1 .NET实用程序的早期版本(例如ILDasm.exe或installutil.exe)与通过更高版本的.NET开发的程序集一起使用。若要解决此异常,请使用与用于开发程序集的.NET版本相对应的工具版本。 这可能需要修改Path环境变量或为正确的可执行文件提供完全限定的路径。

    2 试图加载非托管动态链接库或可执行文件(例如Windows系统DLL),就像它是.NET程序集一样。 下面的示例通过使用Assembly.LoadFile方法加载Kernel32.dll来说明这一点。

     1 // Windows DLL (non-.NET assembly)
     2 string filePath = Environment.ExpandEnvironmentVariables("%windir%");
     3 if (! filePath.Trim().EndsWith(@""))
     4    filePath += @"";
     5 filePath += @"System32Kernel32.dll";
     6 
     7 try {
     8    Assembly assem = Assembly.LoadFile(filePath);
     9 }
    10 catch (BadImageFormatException e) {
    11    Console.WriteLine("Unable to load {0}.", filePath);
    12    Console.WriteLine(e.Message.Substring(0,
    13                      e.Message.IndexOf(".") + 1));
    14 }
    15 // The example displays an error message like the following:
    16 //       Unable to load C:WINDOWSSystem32Kernel32.dll.
    17 //       The module was expected to contain an assembly manifest.

    3.试图在除仅反射上下文之外的上下文中加载参考程序集。可以通过以下两种方式之一解决此问题:

    •        可以加载实现程序集而不是参考程序集。
    •        可以通过调用Assembly.ReflectionOnlyLoad方法在仅反射的上下文中加载参考程序集

    4. DLL或可执行文件以64位程序集的形式加载,但包含32位功能或资源。例如,它依赖于COM互操作或调用32位动态链接库中的方法。解决的方法:请将项目的Platform target属性设置为x86(而不是x64或AnyCPU)并重新编译。

    5.应用程序的组件是使用.NET的不同版本创建的。通常,当使用.NET Framework 1.0或.NET Framework 1.1开发的应用程序或组件尝试加载使用.NET Framework 2.0 SP1或更高版本开发的程序集时,或者当开发了应用程序时,会发生此异常。使用.NET Framework 2.0 SP1或.NET Framework 3.5尝试加载使用.NET Framework 4或更高版本开发的程序集。 BadImageFormatException可能会报告为编译时错误,或者可能在运行时引发异常。下面的示例定义一个StringLib类,该类具有单个成员ToProperCase,并且位于名为StringLib.dll的程序集中。

    6.应用程序的组件针对不同的平台。 例如,您尝试在x86应用程序中加载ARM程序集。 您可以使用以下命令行实用工具来确定单个.NET程序集的目标平台。 文件列表应在命令行以空格分隔的列表形式提供。

  • 相关阅读:
    WF4.0 Beta1 自定义跟踪
    WF4.0 Beta1 流程设计器与Activity Designer
    新版本工作流平台的 (二) 权限算法(组织结构部分)
    WF4.0 Beta1 WorkflowInvoker
    WF4.0 基础篇 (十) Collection 集合操作
    WF4.0 基础篇 (十五) TransactionScope 事物容器
    WF4.0 基础篇 (六) 数据的传递 Arguments 参数
    WF4B1 的Procedural Activity 之InvokeMethod , InvokeMethod<T> 使用
    WF4.0 Beta1 异常处理
    WF4.0 Beta1 变量 Variables
  • 原文地址:https://www.cnblogs.com/VARForrest/p/14416512.html
Copyright © 2020-2023  润新知