Как загрузить файл в функцию Azure при публикации кода из Visual Studio? - PullRequest
1 голос
/ 20 февраля 2020

Я создал 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);
    }
 }

Я выбрал Copy if never в Visual Studio при публикации кода в функции Azure Также я попытался выбрать Embedded Resource. Но я не могу найти файл

enter image description here

Я получаю исключение

Файл не найден.

Функция добавления / выгрузки на портале Azure отключена, поскольку я публикую функцию из Visual studio

Вопрос. Нужно ли загружать файл в BLOB-объект, а затем ссылаться на него в коде?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Окончательный вывод: файл был успешно загружен, проблема в том, что при чтении пути произошла ошибка. Кажется, что использование Directory.GetCurrentDirectory() в Azure не надежно.

Я только что попробовал и Directory.GetCurrentDirectory() получил неправильный путь в azure (я распечатал его, и он показал "D:\Program Files (x86)\SiteExtensions\Functions\2.0.12961\32bit", это очевидно, это не текущая папка), и в конце концов он не может найти файл Sample.ini. Поскольку функция является вашей собственной, вы можете установить путь к чему-то вроде "D:\\home\\site\\wwwroot>\\Ini\\Sample.ini". Это должно прочитать файл Sample.ini.

1 голос
/ 20 февраля 2020

Вот способ сделать это.

ExecutionContext context; // Вы можете изменить метод своей функции, чтобы получить дополнительный параметр типа ExecutionContext

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

Затем создайте путь, объединив каталог функций, «шаблоны» - это каталог, который у меня есть в проекте приложения функций, который развернут вместе с другим кодом, электронными письмами. html - это файл в шаблонах (Для каждого из эти файлы вы должны установить, копировать всегда или копировать, если новее в свойствах.). Вместо шаблонов вы можете иметь свой INI-файл.

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

...