Функция Azure с внедрением зависимости не запускается из-за конфликтующих ссылок с ILogger - PullRequest
1 голос
/ 03 ноября 2019

Настройка функции Azure, которая ссылается на другие нестандартные проекты, которые в свою очередь ссылаются на Microsoft.Extensions.Logging.

Когда функция запускается локально без каких-либо ссылок на другие проекты, все начинается нормально. Но как только я добавляю ссылку на один из других проектов, при запуске я получаю следующее исключение:

TestTrigger: Microsoft.Azure.WebJobs.Host: Ошибка индексации метода «TestTrigger». Microsoft.Azure.WebJobs.Host: Невозможно привязать параметр 'log' к типу ILogger. Убедитесь, что параметр Type поддерживается привязкой. Если вы используете привязки расширений (например, хранилище Azure, ServiceBus, таймеры и т. Д.), Убедитесь, что вы вызвали метод регистрации расширений в вашем коде запуска (например, builder.AddAzureStorage (), builder.AddServiceBus (), builder.AddTimers () и т. д.).

Это исходный код, который у меня есть для моей функции таймера

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();
    }
}

У меня вставлены зависимости в следующем запускеclass

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, является частью проекта netstandard 2.0, который ссылается на пакет nuget Microsoft.Extensions.Logging.Abstractions 3.0.0.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>

Я совершенно уверен, что это справочный вопрос, но не могу на него положиться. Любая помощь?

1 Ответ

1 голос
/ 04 ноября 2019

Воспроизведена ваша ошибка:

enter image description here

Кажется, ошибка произошла из эталонного проекта.

Решение:

Понижение версии Microsoft.Extensions.Logging.Abstractions до 2.2.0.

Причина:

Механизм привязки не распознает тип вашего параметракак одно и то же, поскольку они из разных сборок.

...