Skip to content

Binding placeholder for appsetting doesn't work for Linux isolated function #11659

@DJ4ddi

Description

@DJ4ddi

Using an appsetting placeholder value for any binding (as documented here) doesn't work for isolated functions hosted on a dedicated Linux App Service.

The placeholder works as expected for in-process functions and when using environment variables.

Investigative information

  • Timestamp: 2026-03-18T12:56:18
  • Function App version: 4.1047.100.0
  • Invocation ID: 6e92eedc-2ae0-4738-b8ee-d87e995d481f (last working invocation before update from in-process to isolated)
  • Region: West Europe

Repro steps

Create a function with the following syntax to load the timer CRON expression from the appsettings:

[Function("CleanupTrigger")]
public async Task RunAsync(
  [TimerTrigger("%CleanupSchedule%")] TimerInfo timer,
  CancellationToken cancellationToken) {}

appsettings.json:

{
  "CleanupSchedule": "0 0 18 * * 1-5"
}

Program.cs:

Host.CreateDefaultBuilder(args)
  .ConfigureFunctionsWebApplication()
  .ConfigureServices(
    services =>
    {
      services.AddApplicationInsightsTelemetryWorkerService();
      services.ConfigureFunctionsApplicationInsights();
    }).Build().Run();

Deploy the function on a dedicated Linux App Service and attempt to start it.

Various other startup variants suggested on StackOverflow resulted in the same behavior.

The issue is also reproducable with various other triggers that accept string parameters.

Expected behavior

The function should be invoked every workday at 6 pm UTC.

Actual behavior

The function fails to start:

2026-03-18T12:56:30.646 [Error] Error indexing method 'Functions.CleanupTrigger'
Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException : Error indexing method 'Functions.CleanupTrigger' ---> System.InvalidOperationException : '%CleanupSchedule%' does not resolve to a value.
   at Microsoft.Azure.WebJobs.Host.NameResolverExtensions.ResolveWholeStringCore(INameResolver resolver,String resolve,Boolean throwOnFailure) at /_/src/Microsoft.Azure.WebJobs.Host/NameResolverExtensions.cs : 96
   at Microsoft.Azure.WebJobs.Extensions.Timers.TimerSchedule.Create(TimerTriggerAttribute attribute,INameResolver nameResolver,ILogger logger) at /_/src/WebJobs.Extensions/Extensions/Timers/Scheduling/TimerSchedule.cs : 67
   at Microsoft.Azure.WebJobs.Extensions.Timers.Bindings.TimerTriggerAttributeBindingProvider.TryCreateAsync(TriggerBindingProviderContext context) at /_/src/WebJobs.Extensions/Extensions/Timers/Bindings/TimerTriggerAttributeBindingProvider.cs : 50
   at async Microsoft.Azure.WebJobs.Host.Triggers.CompositeTriggerBindingProvider.TryCreateAsync(TriggerBindingProviderContext context) at /_/src/Microsoft.Azure.WebJobs.Host/Triggers/CompositeTriggerBindingProvider.cs : 20
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexMethodAsyncCore(MethodInfo method,IFunctionIndexCollector index,CancellationToken cancellationToken) at /_/src/Microsoft.Azure.WebJobs.Host/Indexers/FunctionIndexer.cs : 172
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexMethodAsync(MethodInfo method,IFunctionIndexCollector index,CancellationToken cancellationToken) at /_/src/Microsoft.Azure.WebJobs.Host/Indexers/FunctionIndexer.cs : 149
   End of inner exception
   at async Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexMethodAsync(MethodInfo method,IFunctionIndexCollector index,CancellationToken cancellationToken) at /_/src/Microsoft.Azure.WebJobs.Host/Indexers/FunctionIndexer.cs : 157
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at async Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexer.IndexTypeAsync(Type type,IFunctionIndexCollector index,CancellationToken cancellationToken) at /_/src/Microsoft.Azure.WebJobs.Host/Indexers/FunctionIndexer.cs : 85

Known workarounds

Set the desired value in the function's environment variables (instead of the appsettings file).

Related information

  • Programming language used: C#
  • Bindings used: TimerTrigger

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions