部署至Azure报错:无法加载Microsoft.Extensions.Logging.Abstractions程序集
运行在Azure上的应用已升级至.NET 7,此前部署均正常。昨日未修改或添加依赖的情况下部署应用,出现如下异常:
System.IO.FileNotFoundException: 无法加载文件或程序集“Microsoft.Extensions.Logging.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60”。系统找不到指定的文件。文件名:“Microsoft.Extensions.Logging.Abstractions, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60” at Microsoft.Extensions.DependencyInjection.LoggingServiceCollectionExtensions.AddLogging(IServiceCollection services, Action`1 configure) at
该项目本地启动无报错,已确认Azure上的wwwroot文件夹中存在该dll。
已尝试的解决方案:
- 添加缺失的.dll文件
- 删除.vs、bin和obj文件夹后重新构建部署
- 参考相关方案调整依赖版本
更新:已按照建议在.csproj和web.config中添加如下配置,但问题仍未解决:
.csproj配置
<ItemGroup> <Content Include="packages\microsoft.extensions.logging.abstractions\7.0.0\.signature.p7s" /> <Content Include="packages\microsoft.extensions.logging.abstractions\7.0.0\microsoft.extensions.logging.abstractions.7.0.0.nupkg" /> <Reference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" Culture="neutral" PublicKeyToken="adb9793829ddae60" processorArchitecture="MSIL"> <HintPath>packages\microsoft.extensions.logging.abstractions\7.0.0\lib\net7.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath> </Reference> </ItemGroup>
web.config配置
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>
请问还有什么遗漏的操作可以尝试?
可尝试的额外解决方案
检查Azure应用服务的.NET版本设置
登录Azure门户,进入对应应用服务的「配置」-「常规设置」,确认.NET版本设置为.NET 7 (STS),避免平台运行版本与应用目标版本不匹配。修改.csproj的依赖引用方式
移除手动添加的Reference节点,改用NuGet包引用的方式:<ItemGroup> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" /> </ItemGroup>手动引用本地dll易出现路径或版本匹配问题,NuGet会自动处理依赖复制和版本一致性。
启用Azure应用服务的详细日志
在Azure门户开启「应用服务日志」,设置日志级别为Verbose,部署后查看详细加载失败日志,确认是否存在版本冲突、权限问题或dll未被正确部署到运行目录(wwwroot可能不是应用实际运行目录)。清理Azure部署缓存
在Azure应用服务的「高级工具」-「Kudu」中,进入Site/wwwroot目录,手动删除bin和obj文件夹后重新部署;或在部署中心设置「清除目标目录」选项,确保每次部署为干净文件。检查项目的发布配置
右键项目选择「发布」,查看发布配置文件的「文件发布选项」,确认勾选「在发布前删除目标中的所有现有文件」,避免旧版本dll残留导致冲突。
内容的提问来源于stack exchange,提问作者Manuel1234

