我最近将 Azure Function App 从 .NET 6 升级到 .NET 8,并在本地执行期间遇到了问题。项目编译成功,但是在本地运行时,遇到以下程序集加载错误:
功能错误:无法加载文件或程序集 'Microsoft.Extensions.Logging.Abstractions,版本=8.0.0.0
这个问题似乎与 Microsoft.Extensions.Logging.Abstractions 有关,并且根据我的研究和 Stack Overflow 上报告的类似问题,似乎是 .NET 8 的常见问题:
.Net 6 中的 Azure 函数给出错误“无法加载文件或程序集”
和
无法加载文件或程序集 Microsoft.Extensions.Logging.Abstractions
降级到 .NET 6 对我来说不是一个选择,因为 Function App 所依赖的解决方案中的其他项目已经升级到 .NET 8,恢复这些更改会导致兼容性问题。
我在 Azure Functions 中遇到了“隔离模式”的概念,这似乎可能是我的问题的解决方案,但我不确定如何在我当前的设置中实现它,或者它是否是正确的方法。
这是我的函数应用程序的项目文件 (*.csproj):
这是功能应用程序的项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
<DockerFastModeProjectMountDirectory>/home/site/wwwroot</DockerFastModeProjectMountDirectory>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Identity" Version="1.10.4" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.6.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.19.1" />
<PackageReference Include="Azure.Storage.Files.Shares" Version="12.17.1" />
<PackageReference Include="Azure.Storage.Queues" Version="12.17.1" />
<PackageReference Include="Microsoft.AspNetCore.AzureKeyVault.HostingStartup" Version="2.0.4" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.2.2" />
<PackageReference Include="Microsoft.Extensions.Azure" Version="1.7.2" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.3.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
<PackageReference Include="SendGrid" Version="9.28.1" />
</ItemGroup>
<ItemGroup>
//These Projects are now .net 8.0
<ProjectReference Include="..\AsoRockFood.com.Umbraco.Models\AsoRockFood.com.Umbraco.Models.csproj" />
<ProjectReference Include="..\RockLife.Services\AsoRockFood.com.Services.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="host.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="local.settings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</None>
</ItemGroup>
</Project>
如何在不降级 .NET 版本的情况下解决程序集加载错误?
切换到隔离模式是可行的解决方案吗?如果是这样,我应该如何在我的 Function App 中实现它?
任何见解或建议将不胜感激。
提前谢谢您!
首先,您提到的一件事是您正在使用进程内模型。 .Net 8 仅支持隔离。 https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows
其次,当项目引用使用较旧的包版本时,可能会发生此问题。检查引用的包以确保它们使用相同版本的 Microsoft.Extensions.Logging.Abstractions