我能否以及如何向 Azure 函数提供设置文件?
Can I, how do I, supply a settings file to an Azure Function?
将使用设置文件的应用程序移植到 Azure Functions 时,是否需要消除对文件的依赖?
我想编写一个函数应用程序以将数据从 Xero 导入到 Azure sql 数据库中。
我正在使用的 Xero SDK 需要一个 appsettings.json 文件。
因此当函数运行时我得到错误
System.Private.CoreLib: Exception while executing function:
FunctionXeroSync. Xero.Api: The type initializer for
'Xero.Api.Infrastructure.Applications.Private.Core' threw an exception.
Microsoft.Extensions.Configuration.FileExtensions: The configuration file
'appsettings.json' was not found and is not optional. The physical path is
'C:\Users\kirst\AppData\Local\AzureFunctionsTools\Releases.6.0\cli\appsettings.json'.
我尝试通过 VS2017 项目发布选项卡上的管理应用程序设置 link 进行相关设置。显然这失败了。我可以使用其他方法吗?
这里是api中的相关代码。我宁愿不必修改它,这样我就可以使用官方的 nuget 包。
namespace Xero.Api
{
public class XeroApiSettings : IXeroApiSettings
{
public IConfigurationSection ApiSettings { get; set; }
public XeroApiSettings(string settingspath)
{
var builder = new ConfigurationBuilder()
.AddJsonFile(settingspath)
.Build();
ApiSettings = builder.GetSection("XeroApi");
}
public XeroApiSettings() : this("appsettings.json")
{
}
public string BaseUrl => ApiSettings["BaseUrl"];
public string CallbackUrl => ApiSettings["CallbackUrl"];
public string ConsumerKey => ApiSettings["ConsumerKey"];
public string ConsumerSecret => ApiSettings["ConsumerSecret"];
public string SigningCertificatePath => ApiSettings["SigningCertPath"];
public string SigningCertificatePassword => ApiSettings["SigningCertPassword"];
public string AppType => ApiSettings["AppType"];
public bool IsPartnerApp => AppType?.Equals("partner", StringComparison.OrdinalIgnoreCase) ?? false;
}
}
当我添加
log.LogInformation("base directory: "+AppDomain.CurrentDomain.BaseDirectory);
到我得到的函数
D:\Program Files (x86)\SiteExtensions\Functions.0.12095-alphabit\
当 运行 在门户中时
This Jon Gallant's blog建议你需要在AddJsonFile中添加可选参数,因为它在部署时不存在:
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
请注意,在 Azure 中,这将引用 'appsettings.json' 文件
When porting an application that uses a settings file to an Azure Function, is it necessary to remove reliance on the file?
不需要,我们仍然可以使用应用程序需要的设置文件。我们只需要确保设置文件的路径是正确的即可。
将appsettings.json
放在函数项目下,设置复制到output/publish目录
在Azure Function方法签名中添加ExecutionContext context
,用于查找当前函数应用目录(appsettings.json所在目录)。
在Azure Function中传递appsettings.json的有效路径来初始化XeroApiSettings。
var xeroApiSettings = new XeroApiSettings(context.FunctionAppDirectory+"/appsettings.json");
将使用设置文件的应用程序移植到 Azure Functions 时,是否需要消除对文件的依赖?
我想编写一个函数应用程序以将数据从 Xero 导入到 Azure sql 数据库中。 我正在使用的 Xero SDK 需要一个 appsettings.json 文件。
因此当函数运行时我得到错误
System.Private.CoreLib: Exception while executing function:
FunctionXeroSync. Xero.Api: The type initializer for
'Xero.Api.Infrastructure.Applications.Private.Core' threw an exception.
Microsoft.Extensions.Configuration.FileExtensions: The configuration file
'appsettings.json' was not found and is not optional. The physical path is
'C:\Users\kirst\AppData\Local\AzureFunctionsTools\Releases.6.0\cli\appsettings.json'.
我尝试通过 VS2017 项目发布选项卡上的管理应用程序设置 link 进行相关设置。显然这失败了。我可以使用其他方法吗?
这里是api中的相关代码。我宁愿不必修改它,这样我就可以使用官方的 nuget 包。
namespace Xero.Api
{
public class XeroApiSettings : IXeroApiSettings
{
public IConfigurationSection ApiSettings { get; set; }
public XeroApiSettings(string settingspath)
{
var builder = new ConfigurationBuilder()
.AddJsonFile(settingspath)
.Build();
ApiSettings = builder.GetSection("XeroApi");
}
public XeroApiSettings() : this("appsettings.json")
{
}
public string BaseUrl => ApiSettings["BaseUrl"];
public string CallbackUrl => ApiSettings["CallbackUrl"];
public string ConsumerKey => ApiSettings["ConsumerKey"];
public string ConsumerSecret => ApiSettings["ConsumerSecret"];
public string SigningCertificatePath => ApiSettings["SigningCertPath"];
public string SigningCertificatePassword => ApiSettings["SigningCertPassword"];
public string AppType => ApiSettings["AppType"];
public bool IsPartnerApp => AppType?.Equals("partner", StringComparison.OrdinalIgnoreCase) ?? false;
}
}
当我添加
log.LogInformation("base directory: "+AppDomain.CurrentDomain.BaseDirectory);
到我得到的函数
D:\Program Files (x86)\SiteExtensions\Functions.0.12095-alphabit\
当 运行 在门户中时
This Jon Gallant's blog建议你需要在AddJsonFile中添加可选参数,因为它在部署时不存在:
var config = new ConfigurationBuilder()
.SetBasePath(context.FunctionAppDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
请注意,在 Azure 中,这将引用 'appsettings.json' 文件
When porting an application that uses a settings file to an Azure Function, is it necessary to remove reliance on the file?
不需要,我们仍然可以使用应用程序需要的设置文件。我们只需要确保设置文件的路径是正确的即可。
将
appsettings.json
放在函数项目下,设置复制到output/publish目录在Azure Function方法签名中添加
ExecutionContext context
,用于查找当前函数应用目录(appsettings.json所在目录)。在Azure Function中传递appsettings.json的有效路径来初始化XeroApiSettings。
var xeroApiSettings = new XeroApiSettings(context.FunctionAppDirectory+"/appsettings.json");