代码之家  ›  专栏  ›  技术社区  ›  Sam

无法加载文件或程序集“Microsoft”。扩展。配置。抽象,Azure函数中的版本=5.0.0.0

  •  0
  • Sam  · 技术社区  · 4 年前

    我有一个API和一个单独的Azure函数应用程序。我将API应用程序升级到 .NET 5 而且它工作得很好。在API应用程序的解决方案中,我的Azure函数应用程序中也引用了类库项目。这些类库是 netstandard2.1 项目。

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

    无法加载文件或程序集 “微软。扩展。配置。摘要,版本=5.0.0.0, 文化=中性,公钥令牌=adb9793829ddae60'。系统不能 找到指定的文件。值不能为null。(参数“provider”)

    我注意到有一些突破性的变化涉及 Microsoft.Extensions.* 软件包及其建议是安装直接导致问题的软件包。所以我补充道 Microsoft.Extensions.Configuration.Abstractions 在将其作为依赖项安装之前,手动将其添加到我的Azure Functions Microsoft.Extensions.Configuration 包裹。以下是相关信息: https://github.com/dotnet/aspnetcore/issues/21033

    这个问题仍然存在。我甚至试着降级 微软。扩展。配置 在API和Functions应用程序中,但我仍然得到相同的错误。

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

    0 回复  |  直到 4 年前
        1
  •  32
  •   binaryDi    4 年前

    萨姆的评论应该被接受为正确答案。我试着降级 Microsoft.Extensions* (就我而言 Microsoft.Extensions.Logging.Console )从 5.0.0 3.1.0 错误就消失了。 好极了!

        2
  •  29
  •   janw arman aramesh    3 年前

    如果您正在从升级。NET Core 3.1到.NET Core 3.0。NET 6,如果你遇到此错误,你需要将Azure函数版本更改为v4,它会修复此错误。

        3
  •  24
  •   Daniel    3 年前

    作为参考,这 GitHub link 确切地解释了为什么会发生这种情况。

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

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

        4
  •  9
  •   Dan Cook    2 年前

    添加此答案,以防有人从升级。NET 3.1到。NET 6.0。

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

    <AzureFunctionsVersion>v4</AzureFunctionsVersion>

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

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

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

    Azure Functions Core Tools
    Core Tools Version:       4.0.3928 Commit hash: 7d1d4a32700695bbf290a871c7492fde84bb767e  (64-bit)
    Function Runtime Version: 4.0.1.16815
    

    就我而言,我实际上是 跑步 用于e2e测试目的的Azure DevOps管道中的Azure功能。为了实现这一点,我首先使用以下npm命令在构建代理上安装Azure功能核心工具:

    npm install azure-functions-core-tools -g

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

    然后,我安装了Azure功能核心工具(v4),例如通过使用此npm命令进行安装。

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

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

    无论这是否是您的确切场景,如果使用Azure Function Runtime v4和,请确保您使用的是Azure Function Core Tools v4.x。网6。

        5
  •  8
  •   Newteq Developer    3 年前

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

    这可能有点痛苦,因为它没有告诉你哪些包实际上是引用的 微软。扩展。配置。抽象 包/命名空间。

    对我来说,我必须更新 Microsoft.Extensions.Caching.Memory Microsoft.EntityFrameworkCore.SqlServer 5之前的版本。任何引用.NET 5的东西都应该降级才能运行Azure函数。

        6
  •  3
  •   neeohw    2 年前

    我在寻找升级到的问题的答案时偶然发现了这个问题。NET 6.0。已经没有回头路了,因为我买了一台配备M1处理器的Macbook,Arm支持只能正常工作。NET 6.0

    <AzureFunctionsVersion>v4</AzureFunctionsVersion> 这还不够,因为这不会增加Azure上的运行时版本。

    我的功能已经在3.0版本上运行了,奇怪的是,我无法在门户中选择v4.0。我必须通过Azure CLI更改版本。

    关于如何做到这一点的更多信息可以在这里找到: https://learn.microsoft.com/en-us/azure/azure-functions/set-runtime-version?tabs=azurecli

        7
  •  3
  •   Juan P. Garces    2 年前

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

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

    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    

    AND还更改了功能应用程序配置部分(Azure门户)中的应用程序设置值

    "FUNCTIONS_EXTENSION_VERSION" from "~3" to "~4"
    

    这为我解决了问题。

        8
  •  2
  •   Jonas    2 年前

    我在将c#func项目从版本3升级到版本4时也遇到了这个错误。

    我已经设定好了 <AzureFunctionsVersion>v4</AzureFunctionsVersion> 但这并没有解决问题。

    @neeohw的回答为我指出了解决方案,但我必须进一步挖掘,这就是为我解决问题的方法:

    执行此处指定的Azure cli命令: https://learn.microsoft.com/en-us/azure/azure-functions/functions-versions?tabs=in-process%2Cv4&pivots=programming-language-csharp#azure

    我建议你阅读该部分以了解背景,但运行的命令如下:

    az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -n <APP_NAME> -g <RESOURCE_GROUP_NAME>

    # For Windows function apps only, also enable .NET 6.0 that is needed by the runtime az functionapp config set --net-framework-version v6.0 -n <APP_NAME> -g <RESOURCE_GROUP_NAME>

        9
  •  1
  •   Tarun Bhatt    2 年前

    我遇到了同样的问题,Azure FunctionsVersion的配置已经存在。

    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    

    我通过降低微软的版本来解决这个问题。扩展。Http从7到6

    <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
    
        10
  •  0
  •   Prem    2 年前

    当我试图在Azure函数中托管升级的函数时,我遇到了这个问题。上一个版本的目标是netcoreapp3.1,我将其升级到目标net6.0,并将v4设置为Azure Function版本。

    错误是 " 无法加载文件或程序集“Microsoft”。扩展。配置',Azure函数中的版本=6.0.0.0 "

    花了几个小时后,我想这是 启动 导致问题的班级,因为这是唯一的地方 配置 被使用。

    更改 启动 继承自 功能启动 而不是 网络工作启动 ,解决了这个问题。 稍加调整,它就奏效了。

    [assembly: FunctionsStartup(typeof(Startup))]
    

    ...

    public class Startup : FunctionsStartup { ... 
    
    public override void Configure(IFunctionsHostBuilder builder)
        {
    
            var configuration = new ConfigurationBuilder()
                .AddEnvironmentVariables()
                .Build();
    
            builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    
            builder.Services.AddHttpClient();
    
            ...
         }
    

    就是这样!

        11
  •  0
  •   Andres Talavera    2 年前

    当我试图在本地运行我的函数(.NET6)时,我的Mac(手臂)出现了这个错误。

    在我的情况下,我尝试了你的解决方案,但功能仍然无法启动,我在控制台中仍然有这个日志: Could not load file or assembly 'Microsoft.Extensions.Configuration.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified. .

    我意识到我已经安装了2个azure工具实例(v3使用HomeBrew,v4使用npm)。 当我奔跑时 func start 为了启动我的函数,我观察到使用了v3。所以我卸载了HomeBrew的v3工具,使用npm的v4)。

        12
  •  -1
  •   jflaga    3 年前

    就我而言,原因是 Microsoft.EntityFrameworkCore 版本 5.0.2 .

    我没有把它升级到版本 3.1.18 .

    (其他相关软件包,如 Microsoft.EntityFrameworkCore.Design , Microsoft.EntityFrameworkCore.SqlServer ,以及 Microsoft.EntityFrameworkCore.Tools 也应降级为 3.1.18 .

        13
  •  -1
  •   Raffy    3 年前

    我在使用最新版本时遇到了这个错误 Npgsql.EntityFrameworkCore.PostgreSQL 这是 5.0.7 正如这次写作。我不得不降级到 3.1.11 因为当前版本依赖于 5.0.0.0 版本 Microsoft.Extensions.Configuration.Abstractions .

    推荐文章