将函数部署到azure时无法加载appsettings.json文件
我正在azure function应用程序上工作,该应用程序引用了核心文件夹中的另一个项目,该项目包含以下类 在本文中,我尝试读取appsettings.json文件,它在本地工作正常,但当它部署到azure portal时,它找不到该文件,builder.Build()方法抛出FileNotFoundException将函数部署到azure时无法加载appsettings.json文件,azure,azure-web-app-service,azure-functions,Azure,Azure Web App Service,Azure Functions,我正在azure function应用程序上工作,该应用程序引用了核心文件夹中的另一个项目,该项目包含以下类 在本文中,我尝试读取appsettings.json文件,它在本地工作正常,但当它部署到azure portal时,它找不到该文件,builder.Build()方法抛出FileNotFoundException public static class ConfigurationSettings { public static IConfigurationRoot GetConf
public static class ConfigurationSettings
{
public static IConfigurationRoot GetConfigurationRoot()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
return builder.Build();
}
}
有人能告诉我我在这里做错了什么吗?azure function应用程序中是否还有其他文件 在Azure中执行函数时,
GetCurrentDirectory
设置为D:\Windows\system32
。该文件夹中没有appsettings.json
,因此存在异常
我希望您能够设置库从中加载设置的目录。如果是这样,您应该向类型为ExecutionContext
的函数添加一个额外的参数,并使用其FunctionDirectory
属性。看
当然,一定要将
appsettings.json
发布到Azure,作为部署的一部分。在Azure中执行函数时,GetCurrentDirectory
设置为D:\Windows\system32
。该文件夹中没有appsettings.json
,因此存在异常
我希望您能够设置库从中加载设置的目录。如果是这样,您应该向类型为ExecutionContext
的函数添加一个额外的参数,并使用其FunctionDirectory
属性。看
当然,作为部署的一部分,请确保将appsettings.json发布到Azure。我现在可以运行函数应用程序并读取appsettings.json文件。我是如何做到这一点的: 创建了自定义配置提供程序CustomConfigurationProvider,将类型分配给静态属性SettingsType,并在类库项目中嵌入了appsettings.json文件:
public class CustomConfigurationProvider : ConfigurationProvider, IConfigurationSource
{
public static Type SettingsType;
public override void Load()
{
var JsonString = GetResponse("appsettings.json");
var jsonObject = JObject.Parse(JsonString);
foreach (var settingsGroup in jsonObject)
{
var settingsGroupName = settingsGroup.Key;
foreach (var setting in settingsGroup.Value)
{
var jProperty = setting as JProperty;
Data.Add($"{settingsGroupName}:{jProperty.Name.ToString()}", jProperty.Value.ToString());
}
}
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return this;
}
protected string GetResponse(string resourceName)
{
var assembly = SettingsType.Assembly;
var resourceStream = assembly.GetManifestResourceStream(SettingsType.Namespace+'.'+ "appsettings.json");
using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
}
它对我有用,但仍在寻找更好的方法。我现在可以运行函数应用程序并读取appsettings.json文件。我是如何做到这一点的: 创建了自定义配置提供程序CustomConfigurationProvider,将类型分配给静态属性SettingsType,并在类库项目中嵌入了appsettings.json文件:
public class CustomConfigurationProvider : ConfigurationProvider, IConfigurationSource
{
public static Type SettingsType;
public override void Load()
{
var JsonString = GetResponse("appsettings.json");
var jsonObject = JObject.Parse(JsonString);
foreach (var settingsGroup in jsonObject)
{
var settingsGroupName = settingsGroup.Key;
foreach (var setting in settingsGroup.Value)
{
var jProperty = setting as JProperty;
Data.Add($"{settingsGroupName}:{jProperty.Name.ToString()}", jProperty.Value.ToString());
}
}
}
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return this;
}
protected string GetResponse(string resourceName)
{
var assembly = SettingsType.Assembly;
var resourceStream = assembly.GetManifestResourceStream(SettingsType.Namespace+'.'+ "appsettings.json");
using (var reader = new StreamReader(resourceStream, Encoding.UTF8))
{
return reader.ReadToEnd();
}
}
}
这对我来说很有效,但仍在寻找更好的方法。不是回答,而是更多的提示。不要使用
appsettings.json
文件加载应用程序的配置值。使用可用的适当功能,如ConfigurationManager
,并使用应用程序设置,这些设置可以手动设置,也可以通过一些部署工具(如VST)设置。我创建了一个自定义提供程序,之后我开始出错“未找到配置文件'appsettings.json',该文件不是可选文件。物理路径为“D:\Program Files(x86)\SiteExtensions\Functions\1.0.11388\appsettings.json”。“它正在查找azure门户中执行代码的文件,但我认为它在内容根目录中查找该文件。如果它是正常的.net核心项目,我可以使用IhostingEnvironment来实现,但不确定它是否能在function app中工作。@Jan_V我知道我们不应该使用appsettings.json文件,但问题是我的项目没有任何启动类,要绑定一些项目设置,这是我现在唯一能想到的方法。不是anser,但更多的是提示。不要使用appsettings.json
文件加载应用程序的配置值。使用可用的适当功能,如ConfigurationManager
,并使用应用程序设置,这些设置可以手动设置,也可以通过一些部署工具(如VST)设置。我创建了一个自定义提供程序,之后我开始出错“未找到配置文件'appsettings.json',该文件不是可选文件。物理路径为“D:\Program Files(x86)\SiteExtensions\Functions\1.0.11388\appsettings.json”。“它正在查找azure门户中执行代码的文件,但我认为它在内容根目录中查找该文件。如果它是正常的.net核心项目,我可以使用IhostingEnvironment实现,但不确定它是否能在函数应用程序中工作。@Jan_V我知道我们不应该使用appsettings.json文件,但问题是我的项目没有任何启动类,要绑定一些项目设置,这是我现在唯一能想到的方法。appsettings.json是我的函数应用程序的一部分,它执行run方法,但我正在从另一个类库加载appsettings.json文件。一旦我将功能应用程序发布到azure,所有文件和文件夹都将被复制,包括所有引用,如果我从门户下载内容,我可以看到文件,但我仍然不知道appsettings.json的路径是什么,一旦复制到azure,我不确定是否可以为此文件设置一些修复路径。我想我知道了,您的回答对我很有用,只是又传递了一个参数ExecutionContext来运行方法,然后我使用FunctionDirectory属性来检索文件位置。如果您复制appsettings.json文件,您应该使用FunctionAppDirectory
propertyappsettings.json是我的函数应用程序的一部分,它执行run方法,但我正在从另一个类库加载appsettings.json文件。一旦我将功能应用程序发布到azure,所有文件和文件夹都将被复制,包括所有引用,如果我从门户下载内容,我可以看到文件,但我仍然不知道appsettings.json的路径是什么,一旦复制到azure,我不确定是否可以为此文件设置一些修复路径。我想我知道了,您的回答对我很有用,只是又传递了一个参数ExecutionContext来运行方法,然后我使用FunctionDirectory属性来检索文件位置。如果您复制appsettings.json文件,您应该使用FunctionAppDirectory
属性