【问题标题】:The configuration file 'config.json' was not found and is not optional未找到配置文件“config.json”且不是可选的
【发布时间】:2019-11-12 22:51:34
【问题描述】:

我使用 Azure Functions v2 我尝试创建启动文件:

[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>();
        }
    }
}

文件“config.json”存在并且有选项总是要复制:

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

但是当我启动 Azure Function(本地或发布到 Azure)时,我得到一个错误:

Microsoft.Extensions.Configuration.FileExtensions:配置 找不到文件 'config.json' 且不是可选的。

怎么了?

【问题讨论】:

    标签: azure configuration azure-functions azure-function-app


    【解决方案1】:

    .AddJsonFile()方法之前,添加这行代码:.SetBasePath(Environment.CurrentDirectory)。然后在您的项目中,右键单击“config.json”-> 选择属性-> 然后将“复制到输出目录”设置为“始终复制”。

    请注意,我使用的是IWebJobsStartup 而不是FunctionsStartup

    以下是适合我的代码:

    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();            
            }
        }
    
    }
    

    【讨论】:

    • 这与使用 mstest 的单元测试中断。
    【解决方案2】:

    在以后的 .net 核心版本中,使用 *.csproj 文件而不是 project.json 文件。 您可以通过添加以下内容来修改文件以获得所需的结果:

       <ItemGroup>
          <Content Update="config.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>
       </ItemGroup>
    

    【讨论】:

      猜你喜欢
      • 2017-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-08-21
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      相关资源
      最近更新 更多