EPPlus: System.Text.Encoding.CodePages.dll не найден в функции Azure .Net Core 3.1

Используя VS2019, я создал проект функции Azure. Функция Azure запускается HTTP-запросом для преобразования содержимого CSV в файл XLSX с помощью EPPlus.

Код действительно очень прост:

[FunctionName("Function1")]
public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, ILogger log)
{
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    // line below will raise "System.Text.Encoding.CodePages.dll" not found exception
    ExcelPackage xcel = new ExcelPackage();
// ... some other code
}

Экземпляр ExcelPackage вызовет следующую ошибку: «Не удалось загрузить файл или сборку «System.Text.Encoding.CodePages, версия = 5.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a». Системе не удается найти указанный файл». EPPlus полагается на System.Text.Encoding.CodePages 5.0.0.0, но похоже, что .Net core 3.1 полагается на 4.x. версия.

Обходной путь, который я придумал и успешно протестировал, заключался в том, чтобы просто скопировать System.Text.Encoding.CodePages.dll в папку bin моего решения. Но очень неудовлетворительно, потому что каждый раз, когда я перестраиваю решение, мне приходится развертывать System.Text.Encoding.CodePage.dll вручную.

Я пробовал разные вещи, которые я читал о перенаправлении привязки, но безуспешно. Не очень удивительно, поскольку перенаправление привязки больше связано с .net framework.

Это сводит меня с ума.

Это не ваша вина, вы можете взглянуть на мой ответ. И, возможно, вам нужно оставить отзыв командам разработчиков функций Azure.

Cindy Pau 21.12.2020 12:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
1
4 578
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Экземпляр ExcelPackage вызовет следующую ошибку: «Может не загружать файл или сборку 'System.Text.Encoding.CodePages, Версия = 5.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a'. Система не может найти указанный файл." EPPlus полагается System.Text.Encoding.CodePages 5.0.0.0, но похоже, что .Net core 3.1 полагаясь на версию 4.x.

Это не имеет значения с версией пакета System.Text.Encoding.CodePages. Я могу объяснить вам эту ситуацию (на самом деле это связано с работой после сборки инструментов лазурных функций в VS 2019.).

На самом деле файл System.Text.Encoding.CodePage.dll уже был скопирован в папку .\bin\Release\netcoreapp3.1\bin после создания приложения функции Azure. Но инструменты функций Azure выполнили операцию, удалив много файлов из .\bin\Release\netcoreapp3.1\bin после создания приложения функции Azure.

Обходной путь, который я придумал и успешно протестировал, заключался в том, чтобы просто скопировать System.Text.Encoding.CodePages.dll в папке bin моего решения. Но очень неудовлетворительно, потому что каждый раз, когда я перестраиваю решение, я должен развернуть System.Text.Encoding.CodePage.dll вручную.

Вы можете попробовать использовать операцию «сборка» вместо операции «пересборка». Операция сборки не удалит System.Text.Encoding.CodePage.dll после того, как вы поместите его в папку bin.

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

А еще вы можете дать отзыв по этой проблеме.

(Думаю код вам не нужен, поэтому не буду его выкладывать. Проверил, работает нормально.)

Спасибо за это объяснение. На самом деле я увидел в подробном выводе сборки, что файл System.Text.Encoding.CodePage.dll был явно скопирован в мою локальную папку bin и что в конце процесса сборки файла там больше не было. При публикации в Azure из VS2019 выполняется повторная сборка. Итак, все еще копируя (я должен сказать, загружая) отсутствующую System.Text.Encoding.CodePage.dll в папку bin службы приложений в Azure. Я предоставлю обратную связь, как вы предложили.

L. Herveleu 21.12.2020 14:07

@L.Herveleu Вы можете использовать сборку вместо перестройки.

Cindy Pau 21.12.2020 14:09

@L.Herveleu Привет, если мой ответ ответил на ваши сомнения, можете ли вы отметить его как ответ? Это поможет другим людям, которых беспокоит эта проблема. Спасибо.:)

Cindy Pau 22.12.2020 02:54

Большое спасибо, я скопировал «System.Text.Encoding.CodePage.dll» в папку «ProfileQueueTriggerFunction\bin\Debug\netcoreapp3.1\bin» моего проекта, и это решило мою проблему.

Tekin 30.12.2020 15:19

У меня была та же проблема, когда я пробовал аналогичный подход. Решение было «довольно простым» и немного отличалось от ответа, который дал Боуман.

System.Text.Encoding.CodePages, Version=5.0.0.0 — это пакет, созданный для платформы .NET5. Он ссылается:

Microsoft.NETCore.Platforms (>= 5.0.0)
System.Runtime.CompilerServices.Unsafe (>= 5.0.0)

Я думаю, что пакет не полностью совместим с .NetCore 3.1, как, видимо, написано.

Решение, которое я нашел, довольно простое: просто укажите версию 4.71, которая поддерживает среду выполнения, используемую функциями Azure в NetCore 3.1 (не NET5).

В обозревателе решений Visual Studio щелкните правой кнопкой мыши Проект функций Azure и выберите "Редактировать файл проекта". Затем добавьте ItemGroup, чтобы сохранить зависимость System.Text.Encoding.CodePages.dll, например:

<ItemGroup>
    <PackageReference Include = "Microsoft.NET.Sdk.Functions" Version = "3.0.13" />
    <PackageReference Include = "System.Text.Encoding.CodePages" Version = "5.0.0" />
</ItemGroup>
<ItemGroup>
    <FunctionsPreservedDependencies Include = "System.Text.Encoding.CodePages.dll" />
</ItemGroup>

Будь счастлив!

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

«Авторизованные диапазоны IP-адресов должны быть определены в службах Kubernetes» блокирует конвейер развертывания
Диск данных Azure — получение файлов из экспортированного файла диска
Потребитель концентратора событий в Service Fabric
Как передать мой код с локального компьютера в Azure devops в другой ветке, отличной от основной, с помощью GIT?
Команда AzCopy Sync не работает с ключом доступа, но передает ключ SAS, когда контейнер является частным
Crontab с командой flask в службе приложений Azure с Linux ASP
Внедрить переменные окружения ADO в сценарий внутри того же конвейера сборки ADO
Ошибка синхронизации azcopy с сообщением «409 Общий доступ не разрешен для этой учетной записи хранения». на личном контейнере
Как заменить NULL пробелом в фабрике данных Azure для всех типов данных?
Как использовать теги концентратора уведомлений Azure для push-сообщений в приложениях UWP