Estou tentando executar uma função acionada por Timer em um projeto do Azure Functions v1 direcionado ao .NET Framework 4.8, mas o host nunca a detecta:
using System;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace ScreeningSync
{
public static class ScreeningSyncFunction
{
[FunctionName("ScreeningSyncFunction")]
public static async Task Run([TimerTrigger("*/5 * * * * *")] TimerInfo timer,ILogger log)
{
log.LogInformation($"Sync Triggered at {DateTime.UtcNow:O}");
var config = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("local.settings.json", optional: true)
.AddEnvironmentVariables()
.Build();
var services = new ServiceCollection()
.AddSingleton<IConfiguration>(config)
.Configure<OAuthSettings>(config.GetSection(nameof(OAuthSettings)))
.AddHttpClient()
.AddLogging(lb => lb.AddConsole())
.AddSingleton<ICrmHelper, CrmHelper>()
.AddSingleton<ICrmServiceClientService, CrmServiceClientService>()
.AddSingleton<IIntegrationLogService, CrmIntegrationLogService>()
.AddSingleton<IHttpClientWrapper, HttpClientWrapper>()
.AddSingleton<IScreeningRecordSyncService, ScreeningRecordSyncService>()
.BuildServiceProvider();
var syncSvc = services.GetRequiredService<IScreeningRecordSyncService>();
await syncSvc.GetAllScreeningRecords();
log.LogInformation($"Sync Completed at {DateTime.UtcNow:O}");
}
}
}
Quando executo func host start, vejo:
Meu csproj atualmente contém o seguinte:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<AzureFunctionsVersion>v1</AzureFunctionsVersion>
<LangVersion>10.0</LangVersion>
<OutputType>Library</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="2.3.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="1.2.0" />
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="1.0.39" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0" />
</ItemGroup>
</Project>
Eu tentei:
Adicionar/remover Microsoft.Azure.WebJobs.Extensions (v2.x, v3.x, v4.x)
Removendo Microsoft.Azure.WebJobs.Extensions.Http
Limpando bin/obj, dotnet nuget locals todos --clear, restaurando,
reconstruindo e também executando com --no-debug e portas diferentes
Toda vez que recebo “0 funções de trabalho” ou conflitos de versão NU1107 entre Microsoft.Azure.WebJobs (o host quer 2.3.x, as extensões puxam 3.x/4.x).
O que eu gostaria de saber:
Exatamente quais pacotes NuGet (e versões) eu preciso em um aplicativo v1/.NET-4.8 Functions para que [TimerTrigger] seja descoberto?
Há alguma configuração extra que esteja faltando no host.json ou um gancho de inicialização necessário para registrar a vinculação do temporizador na v1?
Agradecemos antecipadamente qualquer orientação!
Para resolver o problema acima, adicionei as linhas abaixo ao .csproj.
.csproj
Abaixo está o arquivo modificado completo .Saída :
Obtive a saída abaixo para minha função de exemplo Timer Trigger em um projeto v1 Functions usando o .NET Framework 4.8.