Сбой привязки среды выполнения функций 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.