You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复System.TypeLoadException:无法从Azure.Core加载Azure.Messaging.MessageContent

解决Azure Functions v4队列触发器的System.TypeLoadException异常

你遇到的这个Could not load type 'Azure.Messaging.MessageContent' from assembly 'Azure.Core'错误,我之前在升级.NET 6 + Functions v4的项目时也碰到过,本质上是Azure SDK包版本不兼容或者运行时依赖冲突导致的。下面是我亲测有效的解决方案,一步步来试:

1. 统一Azure SDK包版本,消除依赖冲突

MessageContent是Azure.Messaging.ServiceBus中的类型,它对Azure.Core有严格的版本依赖。如果你的项目里混合了不同版本的Azure SDK包(比如部分是12.10.x,部分是12.17.x),就很容易出现加载失败的问题。

  • 打开项目的.csproj文件,用全局版本变量统一所有Azure相关包的版本,比如:
    <PropertyGroup>
      <!-- 选一个稳定的最新版,建议匹配Functions v4运行时的兼容版本,比如12.17.0 -->
      <AzureSdkPackageVersion>12.17.0</AzureSdkPackageVersion>
      <TargetFramework>net6.0</TargetFramework>
      <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    </PropertyGroup>
    
    <PackageReference Include="Azure.Messaging.ServiceBus" Version="$(AzureSdkPackageVersion)" />
    <PackageReference Include="Azure.Core" Version="$(AzureSdkPackageVersion)" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" /> <!-- 用v4的稳定版 -->
    
  • 运行dotnet clean清理本地缓存,再执行dotnet restore重新恢复依赖。

2. 配置Functions运行时优先使用私有程序集

Azure Functions v4的运行时自带了一套Azure SDK包,如果你的项目包版本和运行时自带的版本不一致,就会出现加载冲突。可以通过host.json强制运行时使用你项目打包的版本:

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.*, 4.0.0)" // 确保扩展包是v3版本,兼容Functions v4
  },
  "runtime": {
    "assemblyResolve": {
      "privateAssemblies": [
        "Azure.Core",
        "Azure.Messaging.ServiceBus"
      ]
    }
  }
}

这个配置告诉运行时:优先加载你项目里的Azure.Core和Azure.Messaging.ServiceBus,而不是运行时自带的版本。

3. 清理Azure端的部署缓存

有时候部署后旧的程序集还残存在Azure函数应用的目录里,导致冲突。可以这么操作:

  • 登录Azure门户,进入你的函数应用,打开高级工具(Kudu);
  • 在Kudu的文件管理器中,进入site/wwwroot,删除bin和obj文件夹;
  • 重新部署你的项目(建议用dotnet publish -c Release -o ./publish生成干净的发布包,再部署)。

或者用Azure CLI命令强制同步部署源:

az functionapp deployment source sync --name <你的函数应用名> --resource-group <你的资源组名>

4. 排查隐藏的依赖冲突

如果上面的方法都没用,你可以用命令找出具体的冲突源:

  • 运行dotnet list package --include-transitive,查看所有直接和间接依赖的包;
  • 找到所有Azure.Core的版本,看看哪个第三方包引入了旧版本的Azure.Core;
  • 针对这个第三方包,在.csproj中排除它的Azure.Core依赖,比如:
    <PackageReference Include="有问题的第三方包" Version="x.x.x">
      <ExcludeAssets>Azure.Core</ExcludeAssets>
    </PackageReference>
    

一般来说,做完前两步就能解决问题了,我当时就是靠统一SDK版本+配置host.json搞定的。

内容的提问来源于stack exchange,提问作者Sanushi Salgado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:15:49