Функции Azure, не создающие extension.json

У меня есть проект функций Azure с множеством функций, запускаемых ServiceBus и BlobStorage.

Они собирают и развертывают в Azure Fine в течение пары месяцев.
Что-то произошло недавно, и они больше не развертываются с моей машины сборки с ошибкой в ​​Azure при нажатии на функцию Error: The binding type(s) 'blobTrigger' are not registered.
Тем не менее, он все еще отлично развертывается с моей машины разработчика. Они используют WEBSITE_RUN_FROM_ZIP для развертывания самого кода.

Я вытащил каталог публикации как с моей машины разработки, так и с машины сборки, и оказалось, что файл extensions.json создается локально, но не находится на машине сборки, вместе с пустыми папками локализации, которые не существуют на машине сборки, и около 10 МБ разница в размере, которую я пока не могу учесть.
Функции Azure нацелены на .Net Standard 2.0. При проверке версий .Net ядро ​​.Net является одной и той же версией на машинах сборки и разработки.

Что вызывает создание этого файла?


person Chris    schedule 17.09.2018    source источник


Ответы (3)


Одной из возможных причин могло быть обновление до версии 2.0 Функций Azure.

Это может объяснить внезапное изменение, вызывающее ошибки для функций, которые, как вы упомянули, работали еще пару месяцев назад.

Взгляните на эту проблему https://github.com/Azure/azure-functions-host/issues/3363#issuecomment-417926456

он очень похож на ваш.

Одно из изменений в версии 2.0 заключается в том, что вам нужно ссылаться на расширения хранилища при работе с триггерами, связанными с хранилищем.

При необходимости укажите расширение хранилища. Если у вас есть функции, которые работают с хранилищем Azure (очередь / таблицы / большой двоичный объект) с триггерами, привязками ввода или привязками вывода, вам необходимо указать новый Microsoft.Azure .WebJobs.Extensions.Storage расширение.

Вот ссылка, которая документирует все критические изменения - Среда выполнения функций Azure 2.0.12050- Уведомление об изменении альфа-версии

person Rohit Saigal    schedule 17.09.2018
comment
Спасибо, копаюсь в них. Я считаю, что приложение было переведено на бета-версии, поскольку оно отлично упаковывается и развертывается с машины разработчика. Просто нужно выяснить, какие из этих новых библиотек отсутствуют на моих машинах для сборки. - person Chris; 18.09.2018

Мне удалось обойти эту проблему, следуя советам в этом Github комментарий.

По сути, иногда вам нужно включить дополнительную зависимость, чтобы заставить msbuild / visual studio запускать шаги пост-сборки и генерировать файл расширений.
Добавьте Microsoft.Azure.Webjobs.Script.ExtensionsMetadataGenerator в качестве зависимости к вашему проекту функций, и он всегда должен (пока) правильно создайте каталог публикации.

Как обычно, оставляем вопрос открытым, чтобы кто-нибудь сказал нам, зачем это нужно.

person Chris    schedule 28.09.2018
comment
Чтобы быть предельно ясным: зависимость - это NuGet-пакет, который необходимо установить как зависимость. - person Jari Turkia; 04.09.2019

Лучший способ узнать, почему он не работает, - включить журналы диагностики в Visual Studio, а затем выполнить сборку.

введите описание изображения здесь

Затем, после сборки, вы можете искать слово extensions.json.

Что начнется так:

2>  Task "GenerateFunctionsExtensionsMetadata"
2>    Task Parameter:SourcePath=F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin
2>    Task Parameter:OutputPath=F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin
2>    Extensions generator working directory: 'C:\Users\jsgou\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\1.1.8\tools\net46\..\netstandard2.0\generator'
2>    Extensions generator path: 'dotnet'
2>    Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.Console.dll "F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin" "F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin\extensions.json"

Затем, чуть дальше, вы можете найти фактическую ошибку, почему она не работает:

2>      HBTI.ServiceTech.AzureFunctions.dll
2>        Resolving assembly: 'System.Runtime, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
2>        Assembly 'System.Runtime' loaded.
2>        Resolving assembly: 'Microsoft.Azure.Functions.Extensions, Version=1.1.0.0, Culture=neutral, PublicKeyToken=f655f4c90a0eae19'
2>        Assembly 'Microsoft.Azure.Functions.Extensions' loaded from 'F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin\Microsoft.Azure.Functions.Extensions.dll'.
2>        Resolving assembly: 'Microsoft.Azure.WebJobs.Host, Version=3.0.18.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
2>        Assembly 'Microsoft.Azure.WebJobs.Host' loaded from 'F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin\Microsoft.Azure.WebJobs.Host.dll'.
2>        Resolving assembly: 'Microsoft.AspNetCore.Mvc.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
2>        Resolving assembly: 'Microsoft.AspNetCore.Mvc.Core, Culture=neutral, PublicKeyToken=null'
2>        Cannot load 'Microsoft.AspNetCore.Mvc.Core'. Aborting assembly resolution.
2>        Unable to find fallback for assembly 'Microsoft.AspNetCore.Mvc.Core'. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
2>    File name: 'Microsoft.AspNetCore.Mvc.Core, Culture=neutral, PublicKeyToken=null'
2>       at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
2>       at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
2>       at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, StackCrawlMark& stackMark, IntPtr pPrivHostBinder)
2>       at System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, StackCrawlMark& stackMark)
2>       at System.Reflection.Assembly.Load(String assemblyString)
2>       at ExtensionsMetadataGenerator.Console.Program.AssemblyLoader.<>c__DisplayClass1_0.<Initialize>b__0(Object sender, ResolveEventArgs args) in d:\a\1\s\tools\ExtensionsMetadataGenerator\src\ExtensionsMetadataGenerator.Console\Program.cs:line 78
2>
2>
2>        Could not evaluate 'HBTI.ServiceTech.AzureFunctions.dll' for extension metadata. If this assembly contains a Functions extension, ensure that all dependent assemblies exist in 'F:\git\clients\hbti\Portal\hbti-web-master\HBTI.ServiceTech.AzureFunctions\bin\Debug\netcoreapp3.1\bin'. If this assembly does not contain any Functions extensions, this message can be ignored. Exception message: Could not load file or assembly 'Microsoft.AspNetCore.Mvc.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.

Мое решение в этом случае - просто создать свой собственный файл extensions.json и поместить его в сборщик мусора как таковой:

введите описание изображения здесь

person jsgoupil    schedule 16.10.2020