从 Visual Studio 发布代码时如何将文件上传到 Azure 函数?

How do I upload file to Azure function while publishing the code from Visual Studio?

我创建了一个 Azure Function,它依赖于 ini 文件。

 public class DataProcessingFunction
 {
    FunctionName("DataProcessingFunction")]
    public async Task Run([EventGridTrigger]EventGridEvent eventGridEvent,ILogger log)
    {
        string iniFolderPath = $@"{Directory.GetCurrentDirectory()}\Ini\";
        string iniFileName = "Sample.ini";
        var iniConfig = FileManager.ReadFile(iniFolderPath, iniFileName);
    }
 }

我在将代码发布到 Azure 函数时选择了 Visual Studio 中的 Copy if never 选项 另外,我尝试选择 Embedded Resource。但是我找不到文件

我遇到异常

File not found.

Azure 门户中的

Add/Upload 选项被禁用,因为我从 Visual studio

发布函数

问题:我是否需要将文件上传到 blob,然后在代码中引用它?

最终结论是文件上传成功,问题是读取路径出错。看来在 Azure 中使用 Directory.GetCurrentDirectory() 并不靠谱。

刚刚试了一下Directory.GetCurrentDirectory()azure中路径错误(我打印出来显示"D:\Program Files (x86)\SiteExtensions\Functions.0.12961bit",这显然不是当前文件夹),最终还是找不到Sample.ini 文件。由于该函数是您自己的,因此您可以将路径设置为类似 "D:\home\site\wwwroot>\Ini\Sample.ini" 的内容。这应该读取 Sample.ini 文件。

方法如下。

ExecutionContext context; // 您可以修改您的函数方法以采用 ExecutionContext

类型的附加参数

public static async Task Run(<.... Other parameters>, ILogger log, ExecutionContext context)

然后通过组合函数目录构建路径,"templates"是我在与其他代码一起部署的函数应用程序项目中的目录,emails.html是模板中的文件(对于每个这些文件你必须在属性中设置,copy-always 或 copy-if-newer。)。您可以拥有 .ini 文件而不是模板。

string templatePath = Path.Combine(context.FunctionAppDirectory, "Templates", "emails.html");