含Application Insights与EF的WebJob项目程序集加载异常求助
解决WebJob集成Application Insights与EF时的System.IO.FileLoadException错误
我之前在WebJobs项目里结合Entity Framework和Application Insights时,也碰到过一模一样的程序集版本冲突问题,这种System.IO.FileLoadException真的挺让人头疼的,尤其是自动生成绑定重定向还不生效的情况。下面是我亲测有效的几个解决方案,你可以逐一尝试:
1. 手动添加程序集绑定重定向
自动生成绑定重定向有时候在WebJob项目里会失效,不如直接手动在项目的app.config里添加明确的重定向规则,强制把0.0.0.0版本的引用指向你本地的4.0.2.0版本:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
添加之后记得保存,然后清理并重建项目。
2. 统一NuGet包版本,排查兼容性问题
你使用的Microsoft.Azure.WebJobs.Logging.ApplicationInsights是2.1.0-beta4的预览版,这类预览包很容易和其他库(比如EF的.NET Standard依赖)产生版本冲突。建议:
- 把这个预览包升级到最新的稳定版,稳定版的依赖兼容性会更好
- 打开NuGet包管理器的「管理解决方案的NuGet包」,搜索
System.Runtime.InteropServices.RuntimeInformation,确保所有项目(包括你引入的EF代码库)都使用同一个版本的这个包,避免跨项目依赖版本不一致
3. 清理项目缓存,重新构建
有时候项目的bin/obj文件夹里会残留旧的程序集,导致版本混淆。你可以:
- 右键解决方案,选择「清理解决方案」
- 手动删除所有项目下的bin和obj文件夹
- 重新右键解决方案,选择「还原NuGet包」
- 最后重新构建整个解决方案
4. 检查项目目标框架版本
WebJob项目如果是基于.NET Framework,确保目标框架版本是4.6.1及以上。因为System.Runtime.InteropServices.RuntimeInformation是在.NET Framework 4.6才引入的,低版本框架不仅不原生支持这个库,还会和EF的.NET Standard依赖产生兼容问题。你可以右键WebJob项目→「属性」→「应用程序」里查看和修改目标框架。
5. 排查EF代码库的依赖
如果上述方法都没用,建议单独检查你引入的EF代码库:
- 看看这个库是否依赖了特定版本的.NET Standard组件,是否和WebJob项目的依赖冲突
- 尝试新建一个空的WebJob项目,只添加EF代码库,运行看看是否会触发同样的错误,逐步排查是EF库本身的问题,还是和Application Insights组合后的问题
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

