You need to enable JavaScript to run this app. .NET Core 2.2 Blob上传应用部署Azure App Service程序集加载报错
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.2 Blob上传应用部署Azure App Service程序集加载报错

.NET Core 2.2控制台应用部署Azure App Service抛出DiagnosticSource加载异常解决方案

根因分析

该报错是Azure App Service全局运行时依赖与项目Nuget依赖版本冲突导致:本地开发环境有完整的Nuget依赖缓存,程序运行时可以加载到匹配版本的System.Diagnostics.DiagnosticSource;部署到App Service后,控制台应用的依赖加载逻辑会优先调用平台预安装的低版本System.Diagnostics.DiagnosticSource,和Azure.Storage.Blobs要求的4.0.4.0版本不匹配,从而抛出程序集加载失败异常,问题触发点为BlobServiceClient storageAccount = new BlobServiceClient("connection string")初始化逻辑。

修复方案

  • 方案1:强制发布所有依赖文件
    在控制台项目的.csproj文件的PropertyGroup节点下添加如下配置,关闭运行时目标清单优化,发布时会将所有依赖的dll都打包到部署目录,运行时优先加载本地部署的版本,不会调用App Service的全局程序集:
<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>

修改配置后重新发布即可解决90%以上的该类依赖冲突问题。

  • 方案2:添加程序集绑定重定向
    如果方案1不生效,可以在发布生成的web.config文件的runtime/assemblyBinding节点下添加绑定重定向规则,强制所有版本的DiagnosticSource都指向4.0.4.0版本:
<dependentAssembly>
  <assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>
  • 方案3:迁移到ASP.NET Core项目
    你已采用的将Azure存储调用逻辑迁移到ASP.NET Core项目的方案也可以解决该问题,ASP.NET Core项目的依赖加载逻辑会优先处理Nuget安装的版本,默认适配DiagnosticSource的版本绑定要求。

内容的提问来源于stack exchange,提问作者Mehdi Sheikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 23:45:03