Сбой привязки среды выполнения функций Azure для System.IO.Packaging с использованием OpenXML SDK

У меня есть проект, который нормально работал как функция Azure в v1 среды выполнения функций, но я занят переписыванием его для v2, и я застрял.

Моя функция Azure основана на моей библиотеке, которая, в свою очередь, зависит от другой библиотеки. Обе библиотеки зависят от Open XML SDK, который я установил в этих проектах через NuGet. У них обоих также есть System.IO.Packaging, установленный через NuGet.

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

System.Private.CoreLib: Исключительная ситуация при выполнении функции: getWorkbook. ExcelGenerator: не удалось загрузить файл или сборку 'System.IO.Packaging, версия =0.0.0.0, культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a'. Система не может найти указанный файл.

Я попытался добавить System.IO.Packaging в проект функции Azure (что, как я понимаю, делать не нужно), но затем он падает с новой ошибкой:

System.Private.CoreLib: Исключительная ситуация при выполнении функции: getWorkbook. ExcelGenerator: не удалось загрузить тип "System.IO.Packaging.CompressionOption" из сборки "WindowsBase, версия =4.0.0.0, культура = нейтральная, PublicKeyToken=31bf3856ad364e35".

Я с подозрением отношусь к номеру версии 0.0.0.0 в первой ошибке и действительно не понимаю вторую (или, если честно, почему добавление System.IO.Packaging в функцию Azure вообще имеет какое-либо значение, учитывая, что это просто запускаю скомпилированный библиотечный код).

Еще одна любопытная вещь заключается в том, что WindowsBase не отображается в списке зависимостей "Сборки" для моей функции Azure, но она отображается в диалоговом окне "Добавить ссылку". Если снять флажок, я получаю загадочную ошибку, говорящую: "В проекте не найдена ссылка на сборку с именем"{0}"".

Я почти уверен, что System.IO.Packaging или WindowsBase просто не дошли до развертывания Azure, но я не уверен, как это сделать. Я быстро обнаруживаю, что не очень разбираюсь в том, как работают зависимости DLL, не говоря уже о Azure. Есть идеи?

1 ответ

Решение

Чтобы переписать функцию v1 в v2, щелкните правой кнопкой мыши по проекту функции и выберите Edit FunctionProjectName.csproj, менять TargetFramework Функциональный проект для netcoreapp2.1, AzureFunctionsVersion в v2,

И нам, возможно, придется установить пакеты для функции v2, так как они больше не являются встроенными, как в v1.

Рефакторинг кода необходим, если мы столкнемся с какой-либо проблемой сборки, попробуйте код в консольном приложении.Net Core, чтобы определить, является ли это проблемой ядра.net или она связана с временем выполнения функции.

Если в host.json есть какие-то конфигурации, нужно обратить внимание, так как некоторые из их форматов были изменены.

Обычно рекомендуется создать функцию шаблона v2 и сравнить старое содержимое с новым шаблоном v2.

Другие вопросы по тегам