Можем ли мы иметь две отдельные папки bin в одном приложении Function?
У нас есть два разных проекта приложения-функции Azure, каждый с одной функцией. Мы хотели бы разместить их все под одним приложением-функцией в Azure, и у каждого из них будет своя собственная корзина. Я хотел бы иметь возможность для каждой функции иметь дело со своими версиями внешних ссылок, т.е. function1
может использовать json.net 10.0, а function2
оставайтесь на json.net 9.0.
Создание хоста приложения-функции Azure для каждой функции может стать очень неуправляемым, особенно если нам нужно умножить х3 для каждой среды: dev, staging, prod.
Мы попытались выполнить обычное развертывание двух проектов, но оба они используют один и тот же блок (что привело к проблеме с ссылками):
wwwroot
- bin
- function1
--- function.json (pointing to ../bin/function1.dll)
- function2
--- function.json (pointing to ../bin/function2.dll)
- host.json
Мы также попытались создать каталоги виртуальных приложений и развернуть их, но портал не находит эти функции. Конечная структура:
wwwroot
- function1
--- bin
--- function1
------ function.json
--- host.json
- function2
--- bin
--- function2
------ function.json
--- host.json
перемещая function.json
файл каждой функции в корень виртуального каталога и исправление ссылки на DLL устраняет проблему.
Похоже, что виртуальные каталоги могут удовлетворить эту потребность, но портал не поддерживает поиск function.json
два уровня глубиной.
Возможно ли то, что мы хотим сделать?
2 ответа
Отсутствует изоляция процессов между функциями в одном приложении-функции: все они выполняются в одном и том же процессе и в одном домене приложения.
Если вам нужна полная изоляция, единственный способ добиться этого - использовать функции в отдельных приложениях функций.
Я полагаю, что решение состоит в том, чтобы автоматизировать управление Function App до приемлемого уровня.
Эта документация подразумевает, что вы можете определять пользовательские сборки для каждой отдельной функции, хотя я не знаю, как будет работать управление версиями.
Частные сборки являются частью контекста данной функции и поддерживают боковую загрузку разных версий. Частные сборки должны быть загружены в папку bin в каталоге функций. Ссылка с использованием имени файла, например #r "MyAssembly.dll".