2

设置引用其他 netstandard 项目的 Azure 函数,这些项目又引用 Microsoft.Extensions.Logging。

当函数在本地运行而不引用其他项目时,一切都开始正常。但是,只要我添加对其他项目之一的引用,我就会在启动时收到以下异常:

TestTrigger:Microsoft.Azure.WebJobs.Host:索引方法“TestTrigger”时出错。Microsoft.Azure.WebJobs.Host:无法将参数“日志”绑定到 ILogger 类型。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等),请确保您已在启动代码中调用了扩展的注册方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。

这是我的 Timer 函数的初始代码

public class TestTrigger
{
    private ITester _tester;
    public TestTrigger(ITester tester)
    {
        _tester = tester;
    }

    [FunctionName("TestTrigger")]
    public void Run([TimerTrigger("* * * * * *")] TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.UtcNow}");
        _tester?.TestMethod().Wait();
    }
}

我在以下 Startup 类中注入了我的依赖项

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
            var cfgBuilder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile($"appsettings.json", true, true)
                .AddJsonFile($"appsettings.dev.json", true, true)
                .AddEnvironmentVariables();
            var configuration = cfgBuilder.Build();
            builder.Services
                .AddSingleton<ITester, Tester>()
                .AddLogging()
                .AddOptions();
    }
}

实现 ITester 的自定义类是引用 Microsoft.Extensions.Logging.Abstractions 3.0.0.0 nuget 包的 netstandard 2.0 项目的一部分。函数项目本身是一个 netcoreapp2.1 项目,它也引用了相同的 nuget 包,以及 Microsoft.NET.Sdk.Functions 1.0.29、Microsoft.Azure.Functions.Extensions 1.0.0 和 Microsoft.NETCore。应用 2.1.0 包。

作为参考,csproj 文件:

功能项目

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netcoreapp2.1</TargetFramework>
        <AzureFunctionsVersion></AzureFunctionsVersion>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.0.0" />
        <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.29" />
    </ItemGroup>
    <ItemGroup>
        <None Update="host.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
        <None Update="local.settings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
            <CopyToPublishDirectory>Never</CopyToPublishDirectory>
        </None>
    </ItemGroup>
    <ItemGroup>
      <ProjectReference Include="..\TestLibrary\TestLibrary.csproj" />
    </ItemGroup>
</Project>

参考项目:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Microsoft.Extensions.Logging" Version="2.2.0" />
      <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="3.0.0" />
    </ItemGroup>

</Project>

我很确定这是参考问题,但不能动手。有什么帮助吗?

4

1 回答 1

2

已重现您的错误:

在此处输入图像描述

似乎错误来自参考项目。

解决方案:

将版本降级Microsoft.Extensions.Logging.Abstractions到 2.2.0。

原因:

绑定引擎不会将您的参数类型识别为相同,因为它们来自不同的程序集。

于 2019-11-04T06:42:52.220 回答