错误的IL格式-奇怪的.NET错误

时间:2018-06-28 10:38:21

标签: c# asp.net sql-server azure azure-web-sites

我通过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)

1 个答案:

答案 0 :(得分:3)

这可能是因为处理器体系结构不匹配:例如,当您使用32位时加载64位程序集会导致这种情况。

一些要检查的东西:

  
      
  • 如果您的应用程序使用32位组件,请确保它始终作为32位应用程序运行。
  •   
  • 确保您没有使用由其他版本的.NET Framework创建的组件。
  •   
  • 确保文件映像是有效的托管程序集或模块。
  •   

而且,就列表中的第一项而言:

  

如果您的应用程序项目的 Platform target 属性设置为 AnyCPU ,则可以在64位或32位模式下运行已编译的应用程序。当它作为64位应用程序运行时,即时(JIT)编译器将生成64位本机代码。如果应用程序依赖于32位托管或非托管组件,则该组件将无法以64位模式加载。要解决此问题,请将项目的平台目标属性设置为 x86 并重新编译。

来源:Troubleshooting Exceptions: System.BadImageFormatException