Azure / Azure/azure-functions-host
Binding placeholder for appsetting doesn't work for Linux isolated function
- Dominant language
- C#
- Stars
- 2k
- Forks
- 482
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 36
Description
Using an appsetting placeholder value for any binding (as documented [here](https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-timer?tabs=python-v2%2Cisolated-process%2Cnodejs-v4&pivots=programming-language-csharp#attributes)) 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:
```csharp
[Function("CleanupTrigger")]
public async Task RunAsync(
[TimerTrigger("%CleanupSchedule%")] TimerInfo timer,
CancellationToken cancellationToken) {}
```
appsettings.json:
```json
{
"CleanupSchedule": "0 0 18 * * 1-5"
}
```
Program.cs:
```csharp
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](https://stackoverflow.com/questions/78119200/appsettings-for-azurefunction-on-net-8-isolated) 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
Contributor guide
Assessment
This issue has not been assessed yet.