Предупреждение «Функции задания не найдены» при обновлении Microsoft.Azure.Functions.Worker.Sdk до версии 1.16.1 или выше

Фон

Я пытаюсь перенести свои приложения функций Azure, запускаемые по протоколу HTTP, в изолированный процесс. Чтобы понять, как работает приложение «Функции» с изолированным процессом, я начал с шаблона, предоставленного основными инструментами Azure Functions (версия 4.0.5348 — последняя версия NixOS на момент написания), следуя официальному Краткому руководству .

Шаблон работает без обновления каких-либо библиотек, входящих в его комплектацию. Можно зайти по местному адресу http://localhost:7071/api/HttpExample и посмотреть HTTP-ответ Welcome to Azure Functions!.

Однако, если после того, как я обновил библиотеки до последней версии, API, активируемый HTTP, перестал работать и выдал следующее предупреждающее сообщение.

No job functions found. Try making your job classes and methods public. If you're using binding extensions (e.g. Azure Storage, ServiceBus, Timers, etc.) make sure you've called the registration method for the extension(s) in your startup code (e.g. builder.AddAzureStorage(), builder.AddServiceBus(), builder.AddTimers(), etc.).

Вопрос

Как мне изменить базу кода из шаблонов, чтобы решить эту проблему и позволить Приложение «Функции Azure» запустить под последней Microsoft.Azure.Functions.Worker.Sdk?

Причина

Версии библиотеки, поставляемые вместе с фреймворком, на момент написания таковы:

   [net8.0]:
   Top-level Package                                       Requested   Resolved
   > Microsoft.Azure.Functions.Worker                      1.19.0      1.19.0
   > Microsoft.Azure.Functions.Worker.Extensions.Http      3.0.13      3.0.13
   > Microsoft.Azure.Functions.Worker.Sdk                  1.14.0      1.14.0

Последние версии библиотеки на момент написания:

   [net8.0]:
   Top-level Package                                       Requested   Resolved
   > Microsoft.Azure.Functions.Worker                      1.21.0      1.21.0
   > Microsoft.Azure.Functions.Worker.Extensions.Http      3.1.0       3.1.0
   > Microsoft.Azure.Functions.Worker.Sdk                  1.17.2      1.17.2

После нескольких проб и ошибок я обнаружил, что проблема в обновлении Microsoft.Azure.Functions.Worker.Sdk и его последняя рабочая версия с шаблоном 1.15.1 - обновление до 1.16.0, следующая версия воспроизведет ошибку.

Возможные корни проблемы - мои подозрения

  1. Ошибка в Microsoft.Azure.Functions.Worker.Sdk с версии 1.16.0.
  2. Основные инструменты функций Azure устарели
  3. Шаблон проекта/функции устарел – нам что-то нужно

Краткое описание действий по воспроизведению проблемы

  1. Установите Основные инструменты Azure Functions версии 4.0.5348 в системе Linux.
  2. Создать проект из шаблона
    • func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
  3. Создать функцию из шаблона
    • cd LocalFunctionProj
    • func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
  4. Обновите Microsoft.Azure.Functions.Worker.Sdk
    • dotnet add package Microsoft.Azure.Functions.Worker.Sdk
  5. Запустите приложение «Функции» локально
    • func start --debug --verbose

Кодовая база

Кодовая база указана в этом репозитории GitHub.

Похожие вопросы

Этот вопрос наиболее близок, но речь идет об обновлении существующего проекта, а не о создании совершенно нового.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
245
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Изолированная функция работает при использовании последних библиотек.

  • Я также создал функцию, используя следующие команды:
 - func init LocalFunctionProj --worker-runtime dotnet-isolated --target-framework net8.0
 - cd LocalFunctionProj
 - func new --name HttpExample --template "HTTP trigger" --authlevel "anonymous"
  • Он создает все файлы, связанные с функциями, в которых есть код ниже.

HttpExample.cs-

using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;

namespace LocalFunctionProj
{
    public class HttpExample
    {
        private readonly ILogger _logger;

        public HttpExample(ILoggerFactory loggerFactory)
        {
            _logger = loggerFactory.CreateLogger<HttpExample>();
        }

        [Function("HttpExample")]
        public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req)
        {
            _logger.LogInformation("C# HTTP trigger function processed a request.");

            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Headers.Add("Content-Type", "text/plain; charset=utf-8");

            response.WriteString("Welcome to Azure Functions!");

            return response;
        }
    }
}

local.settings.json-

{
    "IsEncrypted": false,
    "Values": {
        "AzureWebJobsStorage": "UseDevelopmentStorage=true",
        "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
    }
}

программа.cs-

using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .Build();

host.Run();

хост.json-

{
    "version": "2.0",
    "logging": {
        "applicationInsights": {
            "samplingSettings": {
                "isEnabled": true,
                "excludedTypes": "Request"
            },
            "enableLiveMetricsFilters": true
        }
    }
}
  • После обновления пакетов .csproj выглядит следующим образом:
<Project Sdk = "Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include = "Microsoft.Azure.Functions.Worker" Version = "1.21.0" />
    <PackageReference Include = "Microsoft.Azure.Functions.Worker.Extensions.Http" Version = "3.1.0" />
    <PackageReference Include = "Microsoft.Azure.Functions.Worker.Sdk" Version = "1.17.3-preview1" />
  </ItemGroup>
  <ItemGroup>
    <None Update = "host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update = "local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
  <ItemGroup>
    <Using Include = "System.Threading.ExecutionContext" Alias = "ExecutionContext" />
  </ItemGroup>
</Project>
  • Теперь, когда я выполнил функцию, я получаю ожидаемый ответ.

  • Если вы все еще не получаете результат, я бы посоветовал вам попробовать создать функцию с нуля.

Все работает после обновления The Functions Core Tools из нестабильного канала на NixOS.

kumkee 10.04.2024 01:20

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