我正在尝试在针对 .NET Framework 4.8 的 v1 Azure Functions 项目中运行计时器触发函数,但主机从未接收它:
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}");
}
}
}
我的 csproj 目前包含以下内容:
<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>
我尝试过:
添加/删除 Microsoft.Azure.WebJobs.Extensions(v2.x、v3.x、v4.x)
删除 Microsoft.Azure.WebJobs.Extensions.Http
清除 bin/obj、dotnet nuget locals 全部 --clear、恢复、
重建以及使用 --no-debug 和不同端口运行
每次我都会得到“0 个工作功能”或 Microsoft.Azure.WebJobs 之间的 NU1107 版本冲突(主机需要 2.3.x,扩展需要 3.x/4.x)。
我想知道的是:
在 v1/.NET-4.8 Functions 应用程序中我究竟需要哪些 NuGet 包(和版本)才能发现 [TimerTrigger]?
我在 host.json 中是否缺少任何额外的配置,或者在 v1 下注册计时器绑定所需的启动钩子?
提前感谢任何指导!