Не удалось загрузить файл или сборку 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 битами.
Две точки для исправления
- Установите платформу сборки на x64 так, как вы сделали.
- Получить x64 Function runtime. Функции работают во время выполнения функций (содержится в основных инструментальных средствах функций Azure), но бит по умолчанию - x86, загружаемый VS.
Чтобы получить x64 бит простым способом, давайте с помощью Nodejs установим базовые инструменты функций Azure из NPM.
После установки в cmd ввод npm i -g azure-functions-core-tools --unsafe-perm true
получить функциональность основных инструментов.
Затем установите свойства отладки проекта (щелкните правой кнопкой мыши ваш проект> Свойства> Отладочный блейд).
Установите тип запуска на
Executable
Установить путь к исполняемому файлу в
%appdata%\npm\node_modules\azure-functions-core-tools\bin\func.exe
,Добавить аргументы приложения
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.