.NET 8 Azure Function 应用程序错误:无法加载文件或程序集“Microsoft.Extensions.Logging.Abstractions”

问题描述 投票:0回答:1

我最近将 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 中实现它?

任何见解或建议将不胜感激。

提前谢谢您!

c# azure azure-functions
1个回答
0
投票

首先,您提到的一件事是您正在使用进程内模型。 .Net 8 仅支持隔离。 https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows

其次,当项目引用使用较旧的包版本时,可能会发生此问题。检查引用的包以确保它们使用相同版本的 Microsoft.Extensions.Logging.Abstractions

© www.soinside.com 2019 - 2024. All rights reserved.