0

I use Azure Functions v2 I try to create Startup file:

[assembly: FunctionsStartup(typeof(AzureAppDomainRegistration.Startup))]
namespace AzureAppDomainRegistration
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var config = new ConfigurationBuilder()
                .AddJsonFile("config.json")
                .Build();

            var connString = config["ConnectionStrings:DataContext"];
            builder.Services.AddDbContext<DataContext>(options => options
                .UseLazyLoadingProxies()
                .UseSqlServer(connString));

            builder.Services.AddTransient<IActionsRegistrationInfo, EfActionsRegistrationInfo>();
        }
    }
}

File "config.json" exists and has option Always to copy:

<None Update="config.json">
  <CopyToPublishDirectory>Always</CopyToPublishDirectory>
  <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

But when I start Azure Function (locally or publish to Azure) I get an error:

Microsoft.Extensions.Configuration.FileExtensions: The configuration file 'config.json' was not found and is not optional.

what is wrong?

Oleg Sh
  • 8,496
  • 17
  • 89
  • 159

1 Answers1

0

Before .AddJsonFile() method, add this line of code: .SetBasePath(Environment.CurrentDirectory). Then in your project, right click "config.json" -> select properties -> then set "copy to output directory" to "copy always".

And note that I'm using IWebJobsStartup instead of FunctionsStartup.

Here is the code works for me:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;
using System.IO;

//using WebJobsStartup instead of FunctionsStartup
[assembly: WebJobsStartup(typeof(FunctionApp20.Startup))]
namespace FunctionApp20
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
        {
            log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
        }
    }

    //using IWebJobsStartup instead of FunctionsStartup
    public class Startup : IWebJobsStartup
    {
        public void Configure(IWebJobsBuilder builder)
        {            
            var config = new ConfigurationBuilder()   
                .SetBasePath(Environment.CurrentDirectory)
                .AddJsonFile("config.json",true,true)
                .Build();            
        }
    }

}
Ivan Glasenberg
  • 29,865
  • 2
  • 44
  • 60
  • This breaks with Unit Tests using mstest. – Going-gone Feb 07 '20 at 20:42
  • tried it and it didn't fix the error. It certainly looks like the code is looking in the wrong place, but `Environment.CurrentDirectory` and `Directory.GetCurrentDirectory()` do not point to the folder where these files are – Devis L. Dec 07 '22 at 05:37