Azure Function v4(net6.0)运行报错:找不到指定版本依赖程序集
问题解决指导
问题根源
你的Azure Function(.NET 6,v4)引用了一个.NET Core 3.1的工具类库,类库使用的FluentEmail 3.0.2依赖的RazorLight组件需要Microsoft.Extensions.DependencyModel 5.0.0.0,但.NET 6运行时环境中该组件版本不匹配,且跨框架引用加剧了依赖冲突,导致程序集找不到的错误。
解决方案
方案1:统一框架版本并升级FluentEmail
将工具类库的目标框架改为和Azure Function一致的.NET 6,同时升级FluentEmail相关包到适配.NET 6的稳定版本,从根源消除跨框架依赖冲突:
修改工具类库的.csproj文件:
<PropertyGroup> <TargetFramework>net6.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="FluentEmail.Core" Version="3.1.0" /> <PackageReference Include="FluentEmail.Smtp" Version="3.1.0" /> <PackageReference Include="FluentEmail.Razor" Version="3.1.0" /> </ItemGroup>
注:可根据实际情况选择FluentEmail的最新稳定版,确保版本兼容.NET 6。
方案2:添加程序集绑定重定向
如果无法修改工具类库的目标框架,可在Azure Function项目中添加程序集绑定重定向,让运行时将对5.0.0.0版本的请求映射到.NET 6兼容的版本:
在Azure Function项目根目录创建(或修改)app.config文件,添加以下内容:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.DependencyModel" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
方案3:显式引入兼容版本的依赖包
在Azure Function项目中直接引用Microsoft.Extensions.DependencyModel的.NET 6兼容版本,利用NuGet的依赖解析优先级强制使用该版本:
修改Azure Function项目的.csproj文件,添加以下包引用:
<ItemGroup> <PackageReference Include="Microsoft.Extensions.DependencyModel" Version="6.0.0" /> </ItemGroup>
方案说明
- 方案1是最优解:统一框架版本后,所有组件的依赖都会适配相同的运行时环境,彻底避免版本冲突问题。
- 方案2和3属于临时兼容方案,适合无法修改类库框架的场景,通过重定向或强制依赖版本来解决程序集找不到的问题。
内容的提问来源于stack exchange,提问作者santosh kumar patro
相关产品推荐
相关产品推荐

