0

我使用 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”且不是可选的。

怎么了?

4

2 回答 2

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

}
于 2019-11-13T01:15:12.863 回答
0

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

   <ItemGroup>
      <Content Update="config.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
   </ItemGroup>
于 2019-11-13T00:59:40.727 回答