无法在 Azure Functions 中加载文件或程序集“Microsoft.Extensions.Configuration.Abstractions,版本 = 5.0.0.0”

Sam*_*Sam 21 .net-core asp.net-core azure-functions .net-5

我有一个 API 和一个单独的 Azure Functions 应用程序。我将我的 API 应用程序升级到.NET 5,它运行良好。在 API 应用程序的解决方案中,我也有在 Azure Functions 应用程序中引用的类库项目。这些类库是netstandard2.1项目。

自从这次更新(在此期间我还将所有 NuGet 包更新到最新版本)之后,我的 Azure Functions 应用程序停止工作。我收到以下错误:

无法加载文件或程序集“Microsoft.Extensions.Configuration.Abstractions,Version=5.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”。该系统找不到指定的文件。值不能为空。(参数'提供者')

我注意到有涉及Microsoft.Extensions.*软件包的重大更改,他们的建议是直接安装导致问题的软件包。所以我Microsoft.Extensions.Configuration.Abstractions手动添加到我的 Azure 函数 - 在它作为Microsoft.Extensions.Configuration包的依赖项安装之前。这是关于此的信息:https : //github.com/dotnet/aspnetcore/issues/21033

问题仍然存在。我什至尝试Microsoft.Extensions.Configuration在 API 和 Functions 应用程序中降级,但我仍然遇到相同的错误。

知道如何解决这个问题吗?

小智 38

如果从 .NET Core 3.1 升级到 .NET 6 时出现此错误,则需要将 Azure Functions 版本更改为 v4,它可以修复此错误。

  • 我已经有了 v4,但它仍然不适合我。还有别的出路吗?`<TargetFramework>net6.0</TargetFramework> <AzureFunctionsVersion>v4</AzureFunctionsVersion>` (13认同)
  • @CaptainPrinny 不是 NuGet 包,而是 Azure 函数的“.csproj”中的此值:“<AzureFunctionsVersion>v4</AzureFunctionsVersion>” (8认同)
  • .NET 7 v4,仍然有问题 (3认同)

bin*_*yDi 18

山姆的评论应该被接受为正确答案。我尝试将其降级Microsoft.Extensions*(在我的情况下Microsoft.Extensions.Logging.Console)从5.0.0to3.1.0并且错误消失了。太棒了!


Dan*_*iel 14

作为参考,此GitHub 链接准确解释了发生这种情况的原因。

到目前为止,您要么追踪引用的确切版本,要么将所有内容降级到最新的 v3 版本。

简而言之,Azure Functions SDK 已经在内存中加载了一些依赖项,因此您的库不能使用相同库的较新版本。


Dan*_*ook 10

添加此答案是为了帮助任何人从 .NET 3.1 升级到 .NET 6.0。

首先,根据 @Jeff 的回答,请确保v4在 Azure Functions 项目.csproj文件中引用:

<AzureFunctionsVersion>v4</AzureFunctionsVersion>

然而,就我而言,这已经确定了。

Azure Function 在本地运行良好,但是在 Azure DevOps 管道中我收到了 OP 描述的错误。

我注意到在本地调试Azure Function时,控制台输出:

Azure Functions Core Tools
Core Tools Version:       4.0.3928 Commit hash: 7d1d4a32700695bbf290a871c7492fde84bb767e  (64-bit)
Function Runtime Version: 4.0.1.16815
Run Code Online (Sandbox Code Playgroud)

就我而言,我实际上是在 Azure DevOps 管道中运行Azure Function 来进行 e2e 测试。为此,我首先使用以下 npm 命令在构建代理上安装 Azure Function Core Tools:

npm install azure-functions-core-tools -g

但是,这会安装azure-functions-core-tools@3.0.3904(版本 3.x - 不是最新版本 4.x)。

然后,我安装了 Azure Function Core Tools (v4),例如通过使用此 npm 命令进行安装。

npm i -g azure-functions-core-tools@4 --unsafe-perm true

这(对我来说)解决了错误。

无论这是否是你的具体场景,如果使用 Azure Function Runtime v4 和 .NET 6,请确保你使用的是 Azure Function Core Tools v4.x。


New*_*per 5

正如@binaryDi 在他们的回答中提到的,您需要降级引用Microsoft.Extensions.Configuration.Abstractions.

这可能有点麻烦,因为它不会告诉您哪些包实际上正在引用Microsoft.Extensions.Configuration.Abstractions包/命名空间。

对于我来说,我不得不更新Microsoft.Extensions.Caching.MemoryMicrosoft.EntityFrameworkCore.SqlServer之前5凡是被引用的dotnet 5应该被降级为Azure的函数运行一个版本。


小智 5

我在将 ac# 函数项目从 NETCORE 3.1 升级到 .NET 6 时也遇到了这个错误。

我在项目(.csproj)中设置了以下内容。

<AzureFunctionsVersion>v4</AzureFunctionsVersion>
Run Code Online (Sandbox Code Playgroud)

并且还更改了 Function App - 配置部分(Azure 门户)中的应用程序设置值

"FUNCTIONS_EXTENSION_VERSION" from "~3" to "~4"
Run Code Online (Sandbox Code Playgroud)

这为我解决了问题。