我通过Azure中的.NET应用程序随机收到此错误消息。
关于该错误的信息似乎非常有限,我想知道是否有人知道是什么原因引起的?
它似乎在调用某个存储过程时发生,但确实很难重新创建并随机发生。
System.BadImageFormatException: Bad IL format.
at System.Data.SqlClient.SqlConnection.ValidateAndReconnect(Action beforeDisconnect, Int32 timeout)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite, String method)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
at System.Data.SqlClient.SqlCommand.BeginExecuteNonQuery(AsyncCallback callback, Object stateObject)
at System.Threading.Tasks.TaskFactory`1.FromAsyncImpl(Func`3 beginMethod, Func`2 endFunction, Action`1 endAction, Object state, TaskCreationOptions creationOptions)
at System.Data.SqlClient.SqlCommand.ExecuteNonQueryAsync(CancellationToken cancellationToken)
答案 0 :(得分:3)
这可能是因为处理器体系结构不匹配:例如,当您使用32位时加载64位程序集会导致这种情况。
一些要检查的东西:
- 如果您的应用程序使用32位组件,请确保它始终作为32位应用程序运行。
- 确保您没有使用由其他版本的.NET Framework创建的组件。
- 确保文件映像是有效的托管程序集或模块。
而且,就列表中的第一项而言:
如果您的应用程序项目的 Platform target 属性设置为 AnyCPU ,则可以在64位或32位模式下运行已编译的应用程序。当它作为64位应用程序运行时,即时(JIT)编译器将生成64位本机代码。如果应用程序依赖于32位托管或非托管组件,则该组件将无法以64位模式加载。要解决此问题,请将项目的平台目标属性设置为 x86 并重新编译。
来源:Troubleshooting Exceptions: System.BadImageFormatException