Функции Azure со средой выполнения 2; расширения привязки не создаются автоматически

Когда я развертываю свой проект функции Azure в своем приложении-функции на основе среды выполнения v2, расширения привязки, от которых зависит мой проект (в моем случае - служба хранилища Azure), не создаются автоматически.

Я развертываю свой проект с файлом extension.csproj в корне, но после развертывания мне нужно вручную запустить следующую команду, чтобы создать папку bin и obj на wwwroot.

dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget

Если я правильно понял, это должно произойти автоматически.


person Ramon    schedule 08.10.2018    source источник
comment
Вы используете правильную версию пакетов / расширений? Версия должна быть ›= 3.0.0.   -  person Boris Wilhelms    schedule 09.10.2018
comment
Я использую версию 3.0 пакетов Nuget: <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Http" Version="3.0.0" /> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="3.0.0" /> <PackageReference Include="Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator" Version="1.0.0" />   -  person Ramon    schedule 09.10.2018
comment
@Ramon Как вы генерируете функциональный код и развертываете его с помощью инструментов функционального ядра?   -  person Jerry Liu    schedule 09.10.2018
comment
@JerryLiu, да, я использую инструменты ядра функций версии 2. Время выполнения - nodejs, кстати.   -  person Ramon    schedule 09.10.2018


Ответы (2)


Для развертывания с помощью интерфейса командной строки func azure functionapp publish

Инструменты ядра функций используют развертывание zip для развертывания функций, таким образом, kudu не создает проект по умолчанию. Чтобы включить эту функцию, установите SCM_DO_BUILD_DURING_DEPLOYMENT на true в настройках приложения на портале.

Что касается того, почему параметр по умолчанию - false, для развертывания zip-архива обычно требуется развернуть контент, включая все связанные файлы, поэтому нет необходимости создавать заново.

Для инструментов ядра функций Azure мы обычно используем команду func extensions install для зарегистрируйте расширения для привязки ввода / вывода, когда расширения не устанавливаются автоматически, как мы создаем триггер из шаблона. Вот почему команды func start и func azure functionapp publish не собирают extensions.csproj, расширения должны быть установлены до того, как мы запустим или опубликуем функции.

Обновление для развертывания DevOps

При использовании конвейера Azure нам нужно построить extensions.csporj перед файлами архива. Добавьте задачу сборки .NET Core, аргументы - -o bin.

Если вы хотите, чтобы kudu создавал проект, перейдите в Центр развертывания в разделе «Возможности платформы». Выберите VSTS в качестве репозитория CI, и kudu создаст и развернет проект за вас.

person Jerry Liu    schedule 09.10.2018
comment
Я не вижу связи между инструментами функционального ядра и развертываниями в этом случае. Я использую Azure DevOps (VSTS) для создания своего проекта (транспиляция TypeScript), после чего zip-архив передается в приложение-функцию. Чтобы это работало, я добавил dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget к моему определению сборки после того, как папки bin / obj добавлены в zip-архив. Теперь это заставляет его работать. Довольно сбивает с толку, как все это должно сочетаться со всеми существующими сценариями. - person Ramon; 10.10.2018
comment
@Ramon Понял, вы говорите, что используете инструменты функционального ядра, поэтому я предполагаю, что вы используете его для развертывания своего кода непосредственно в Azure (код создается kudu), и это тот случай, который я описал выше. Проведем расследование и ответим вам позже. - person Jerry Liu; 10.10.2018
comment
Я понимаю путаницу. С помощью инструментов функционального ядра я имел в виду только во время разработки, что мы разрабатываем локально с помощью инструментов функционального ядра (вместо того, чтобы вручную создавать функции в приложении-функции в Azure). Остальное обрабатывается нашим конвейером CI / CD в Azure DevOps. Рад слышать от вас о ваших открытиях! - person Ramon; 10.10.2018
comment
@Ramon Простите за задержку. Расширения должны быть установлены точно под functionappfolder/bin, команде сборки нужны -o bin аргументы. У меня этот процесс работает, вы пропустили этот аргумент, так что bin, включенный ранее, не работает? - person Jerry Liu; 11.10.2018
comment
Я предоставил эту команду: dotnet build extensions.csproj -o bin --no-incremental --packages D:\home\.nuget. Поэтому я включил аргумент корзины. Сборка в VSTS работает нормально (если VSTS действительно работает, в наши дни это большая проблема ...). Мой вопрос был больше; Должен ли я вообще включать папку bin / obj в свою сборку, или Azure справляется с этим на основе extension.csproj. - person Ramon; 11.10.2018
comment
@Ramon Если вы определяете собственное определение сборки в vsts, это означает, что вы хотите, чтобы все находилось под контролем, поэтому Azure не обрабатывает расширения (т. Е. Повторную сборку) за вас. Публикуемый контент должен включать bin папку, созданную командой сборки. Если вы передаете процесс сборки на сервер Azure (kudu), bin не требуется, таким образом, vsts используется только как репозиторий. - person Jerry Liu; 11.10.2018
comment
@Ramon Рад слышать это, не могли бы вы принять мой ответ, чтобы другие могли сослаться на него? - person Jerry Liu; 11.10.2018

При использовании Visual Studio вы будете ссылаться на пакеты расширений непосредственно из своего проекта, чтобы использовать их атрибуты и другие типы, поэтому Visual Studio обрабатывает процесс установки, но регистрация все равно должна быть выполнена.

Это обрабатывается специальной задачей сборки, добавленной Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator пакетом NuGet, на который должна быть явная ссылка (это будет автоматически добавлено инструментами SDK / Visual Studio в будущем обновлении).

Вот шаги, которые вы должны выполнить, чтобы использовать расширение CosmosDB, упомянутое в нашем предыдущем примере:

1. Добавьте ссылку на пакет Microsoft.Azure.WebJobs.Extensions.Storage NuGet.

2. Добавьте ссылку на Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator

3. построить проект

Для получения дополнительной информации вы можете обратиться к этой статье .

person Joey Cai    schedule 09.10.2018
comment
Спасибо. Думаю, я правильно ссылаюсь на пакет Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator. Кстати, я не использую Visual Studio. Верно ли мое предположение, что вам не нужно развертывать проект с включенной папкой bin / obj и что среда выполнения функций Azure (v2) выполнит установку расширений? Или мне следует создать свой проект самостоятельно и включить папки obj / bin перед развертыванием в Azure? - person Ramon; 09.10.2018