Azure Function App VS 2019 .NET 3.0 中的错误 - 找不到方法:'IFunctionsHostBuilder.get_Services()'

Posted

技术标签:

【中文标题】Azure Function App VS 2019 .NET 3.0 中的错误 - 找不到方法:\'IFunctionsHostBuilder.get_Services()\'【英文标题】:Error in Azure Function App VS 2019 .NET 3.0 - Method not found: 'IFunctionsHostBuilder.get_Services()'Azure Function App VS 2019 .NET 3.0 中的错误 - 找不到方法:'IFunctionsHostBuilder.get_Services()' 【发布时间】:2020-02-03 02:14:23 【问题描述】:

Azure Functions/EFSQLSERVER .NET CORE 3.0 的问题:

复制:

使用 Visual Studio 2019 16.2.1 使用 Azure Function 模板创建项目。 将目标框架更改为 .NET Core 3.0 添加 Microsoft.EntityFrameworkCore.SqlServer" 版本="3.0.0" 通过 Nuget 包管理器进行参考。 使用 F5 执行函数应用程序

导致错误,如以下 sn-ps 所示。有人遇到过这个问题吗?

Azure Functions Core Tools (2.7.1633 Commit hash: 45c7d86a3bbc9ed0a80a8f4199aa7ea80ccfb24e)
Function Runtime Version: 2.0.12673.0
[10/4/2019 6:13:14 PM] Building host: startup suppressed:False, configuration suppressed: False
[10/4/2019 6:13:14 PM] Loading startup extension 'Startup'
[10/4/2019 6:13:14 PM] Loaded extension 'Startup' (1.0.0.0)
[10/4/2019 6:13:14 PM] Loading startup extension 'DurableTask'
[10/4/2019 6:13:14 PM] Loaded extension 'DurableTask' (1.0.0.0)
[10/4/2019 6:13:14 PM] A host error has occurred
[10/4/2019 6:13:14 PM] FunctionApp5: Method not found: 'Microsoft.Extensions.DependencyInjection.IServiceCollection Microsoft.Azure.Functions.Extensions.DependencyInjection.IFunctionsHostBuilder.get_Services()'.
Value cannot be null.
Parameter name: provider

我的 nuget 包来自 csproj 文件。

<ItemGroup>
    <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="1.8.2" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.29" />
  </ItemGroup>
using Microsoft.Azure.Functions.Extensions.DependencyInjection;


[assembly: FunctionsStartup(typeof(FunctionApp5.Startup))]
namespace FunctionApp5

    public class Startup : FunctionsStartup
    
        public override void Configure(IFunctionsHostBuilder builder)
        
            **var x = builder.Services;**

        
    


【问题讨论】:

这一定是包问题,因为我有类似的问题。只需添加 http 扩展包 (Microsoft.Http.Extensions),我就会收到此错误(不使用该包中的任何代码)。通过删除它,错误消失了。我在 16.3.2 上使用相同的 webjobs 版本。 【参考方案1】:

目前,ASP.NET Core 3.0 目前不适用于 Azure 应用服务,请查看此Microsoft doc。

将与 Core 3.0 完全兼容的 Azure Functions 3.0 将于 10 月推出,请查看 here。但是现在还没有发布。

从issue,您可以发现 Azure Function 2.0 目前无法与任何 Microsoft.Extensions.* 3.* 包一起使用,并且无法与 .Net Core 3.0 服务共享代码。

有关 Azure Fuction 3.0 的更多信息,请查看discussion。

【讨论】:

知道了。谢谢。 有传言说发布预览版将于 10 月 25 日推出【参考方案2】:

您现在可以使用 .net core 3.0 创建 azure 函数。将Microsoft.NET.Sdk.Functions 更新为1.0.30-beta2 并将AzureFunctionsVersion 设置为v3-preview

阅读有关使用 .NET Core 3.0 开发 Azure Functions 的更多信息here

您现在可以通过 IFunctionsHostBuilder 使用 DI

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(BI_Geo.AzureFunctions.Startup))]
namespace BI_Geo.AzureFunctions

    public class Startup : FunctionsStartup
    
        public override void Configure(IFunctionsHostBuilder builder)
        
            builder.Services.AddScoped<IProcess, Process>();
        
    

【讨论】:

这对我有用 - 如果上述修复不起作用并且函数项目使用 nuget Microsoft.EntityFrameworkCore 3.1.0,请降级到 3.0.1,否则会出现相同的错误【参考方案3】:

在 Azure Functions 3.0 作为稳定版本发布之前,最简单的方法似乎是将 Microsoft.Extensions.Http 包降级到 2.2.0:

它帮助我解决了同样的问题,因为目前似乎没有其他解决方法。即使是可用的 beta 包也不能在构建服务器上运行。

更多细节在这里:Azure functions dependency injection - error when referencing class library(Github)。

【讨论】:

【参考方案4】:

这拯救了我的一天

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  </PropertyGroup>

【讨论】:

【参考方案5】:

要添加其他需要注意的内容,以下是我们的问题:

我们的函数应用引用了域项目 我们的域项目引用了"Microsoft.Extensions.Localization 版本5.0.1,而后者又引用了Microsoft.Extensions.DependencyInjection5.x 版本,它与我们的3.x 运行时不兼容。一旦我们降级到参考Microsoft.Extensions.Localization 版本3.1.10Microsoft.Extensions.DependencyInjection 参考也随之降级并且一切正常。

【讨论】:

我花了很长时间来解开这个问题,但基本上没有 v5.x 依赖项与 .Net Core 3 兼容。这些是 .Net 5 运行时。令人讨厌的是,Nuget 似乎并不关心您的目标版本并提供将程序集升级到 v5,即使它们会破坏您的构建 我正在尝试获取Nuget to address this issue

以上是关于Azure Function App VS 2019 .NET 3.0 中的错误 - 找不到方法:'IFunctionsHostBuilder.get_Services()'的主要内容,如果未能解决你的问题,请参考以下文章

Azure Function 1.x和VS17的Nuget问题

发布后似乎没有触发 Azure Function App

从 Azure Function App 调用 Snowflake 过程

从 Azure Function App 访问带有防火墙的 Azure Blob 存储

Azure Blob Storage V2,来自 Azure Function App 的异常 API 调用,升级后

Azure Function App 不由事件中心触发