Azure AppService中ASP.NET Core 6升级Serilog.AspNetCore 7后崩溃求助
问题解决:Azure App Service中ASP.NET Core 6升级Serilog.AspNetCore 7后崩溃
问题根源
Serilog.AspNetCore 7.0.0依赖于Microsoft.Extensions.Logging.Abstractions 7.0.0.0,而你的应用目标框架为.NET 6。Azure App Service的.NET 6运行环境仅预装了该组件的6.x版本,若部署包中未包含7.0.0版本的组件,运行时就会找不到对应的程序集导致崩溃。本地运行正常是因为开发环境从NuGet获取了该组件的7.0.0版本。
解决方案
1. 显式引用缺失的程序集
在你的csproj文件中添加对Microsoft.Extensions.Logging.Abstractions的直接引用,确保该组件被包含在部署包中:
<ItemGroup> <!-- 现有包引用 --> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" /> </ItemGroup>
2. 禁用依赖项剪裁(若启用)
如果你的部署流程或项目启用了PublishTrimmed,可能会移除未显式引用的传递依赖。可以在PropertyGroup中禁用剪裁:
<PropertyGroup> <!-- 现有配置 --> <PublishTrimmed>false</PublishTrimmed> </PropertyGroup>
若需要保留剪裁以减小包体积,可单独排除该组件不被剪裁:
<ItemGroup> <TrimmerRootAssembly Include="Microsoft.Extensions.Logging.Abstractions" /> </ItemGroup>
3. 回退到兼容的Serilog.AspNetCore版本
如果不想添加额外引用,可将Serilog.AspNetCore降级到6.x版本,该版本依赖于.NET 6兼容的日志抽象组件版本,你已验证此方法有效。
Azure App Service没有与Azure Functions的FunctionsPreservedDependencies或_FunctionsSkipCleanOutput完全等价的配置,但上述方法均可确保所需程序集被包含在部署包中。
内容的提问来源于stack exchange,提问作者maxc137
相关产品推荐
相关产品推荐

