Не удалось загрузить файл или сборку System.Fabric с функциями Azure.

Существуют ли какие-либо ограничения для пакетов, которые вы можете использовать с функциями Azure. Я исследовал столько, сколько смог, и это не так, однако, когда я пытаюсь создать функцию Azure, которая ссылается на пакет "Microsoft.ServiceFabric", я получаю следующую ошибку:

System.Private.CoreLib: Исключение при выполнении функции: ScaleDownServiceFabrics. FunctionApp2: не удалось загрузить файл или сборку 'System.Fabric, Version=6.0.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35'. Не удалось найти или загрузить определенный файл. (Исключение из HRESULT: 0x80131621). System.Private.CoreLib: не удалось загрузить файл или сборку 'System.Fabric, Version=6.0.0.0, Culture= нейтральный, PublicKeyToken=31bf3856ad364e35'.

Я попробовал и Azure Func и.1 и 2, и.Net Framework и.Net Core без удачи.

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using System.Fabric;

namespace FunctionApp5
{
  public static class Function1
  {
    [FunctionName("Function1")]
    public static void Run([TimerTrigger("*/5 * * * * *")]TimerInfo myTimer, ILogger log)
    {
      log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
      FabricClient client = new FabricClient();
    }
  }
}

Возможно ли это или ограничение функций Azure в Visual Studio - если да, то какие пакеты приемлемы?

4 ответа

Решение
  • Пакеты ServiceFabric x64 битные, если ваша целевая функция 32-битная, она не будет работать. Попробуйте решение, предложенное Джерри Лю
  • Пакеты Service Fabric должны быть добавлены в виде пакетов вместо ссылки на dll напрямую в проекте из-за зависимостей от других библиотек. Вы должны добавить пакет NuGet Microsoft.ServiceFabric,
  • Microsoft.ServiceFabric цели последней версии 6.3.x .Net Standard 2.0 а также .Net Framework от 4.5 в 4.7.1Убедитесь, что вы используете любой из них в своем проекте.
  • Убедитесь, что Microsoft.ServiceFabric Библиотеки DLL копируются в папку bin при сборке \ развертывании.
  • Когда вы используете FabricClient вне кластера, вы должны указать параметры и учетные данные, иначе вы не сможете подключиться к кластеру. Смотрите этот пример и эту документацию.
  • FabricClient использует Service Fabric API для взаимодействия с кластером. Если возникают проблемы с пакетами, другой вариант - использовать HttpClient и выполнять запросы к API и избегать конфликтов пакетов.

Диего и Сурадж указали причину, конфликт между 64 и 32 битами.

Две точки для исправления

  1. Установите платформу сборки на x64 так, как вы сделали.
  2. Получить x64 Function runtime. Функции работают во время выполнения функций (содержится в основных инструментальных средствах функций Azure), но бит по умолчанию - x86, загружаемый VS.

Чтобы получить x64 бит простым способом, давайте с помощью Nodejs установим базовые инструменты функций Azure из NPM.

После установки в cmd ввод npm i -g azure-functions-core-tools --unsafe-perm true получить функциональность основных инструментов.

Затем установите свойства отладки проекта (щелкните правой кнопкой мыши ваш проект> Свойства> Отладочный блейд).

  1. Установите тип запуска на Executable

  2. Установить путь к исполняемому файлу в %appdata%\npm\node_modules\azure-functions-core-tools\bin\func.exe,

  3. Добавить аргументы приложения start,

Я столкнулся с точно такой же проблемой, как @tank140, прокомментированный в оригинальном сообщении

Unable to load DLL 'FabricClient.dll' or one of its dependencies: The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Более подробно в другом вопросе, который я уволил по этому вопросу. В ответ было подтверждено, что SF Client API для.NET требует, чтобы среда SF была установлена ​​на платформе, что не поддерживается в функциях Azure.

В моем случае я просто обновляю конфигурацию платформы Azure до 64-разрядной версии. Тем не менее, я использовал функциональное приложение .net core 3.1 на платформе win.

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