Создание и запуск кода .NET из стандартных рабочих процессов в Azure Logic Apps с помощью Visual Studio Code

Область применения: Azure Logic Apps (стандартная)

Если в сценарии интеграции требуются пользовательские задачи или логика за пределами встроенных операций и соединителей в Azure Logic Apps, создайте и запустите код .NET как функции custom в стандартных рабочих процессах. Затем рабочий процесс может выполнять такие задачи, как пользовательский анализ, проверка или даже применение бизнес-правил. С помощью этой возможности можно реализовать такие сценарии, как следующие задачи:

  • Настройка реализации бизнес-логики.
  • Настройте синтаксический анализ для извлечения информации из входящего сообщения.
  • Выполните проверку данных и простые преобразования.
  • Выполнение вычислений.
  • Формирование исходящих сообщений, отправленных в другую систему, например API.

В этом руководстве показано, как писать и запускать собственный код .NET непосредственно в стандартных рабочих процессах с помощью Visual Studio Code. Вы узнаете, как создавать, отлаживать и развертывать локальные функции с помощью Visual Studio Code, чтобы обеспечить совместную оркестрацию пользовательского кода и рабочего процесса, отлаживать их в одном сеансе и развертывать их в качестве единого решения.

Примечание.

Пользовательский встроенный .NET код не подходит для следующих сценариев:

  • Выполнение процессов, которые могут превышать 10 минут.
  • Попытка преобразования больших сообщений и данных.
  • Выполнение сложных сценариев пакетной обработки и дебатчинга.
  • Использование компонентов конвейера сервера BizTalk, реализующих потоковую передачу.

Дополнительные сведения см. в статье Ограничения.

Предварительные требования

  • Учетная запись и подписка Azure. Получите бесплатную учетную запись Azure.

  • Самая последняя версия Visual Studio Code с расширением Azure Logic Apps (Standard).

    Предварительные требования см. в разделе Создание стандартных рабочих потоков в одноарендных Azure Logic Apps с помощью Visual Studio Code.

    Расширение предоставляет следующие возможности и преимущества:

    • Создайте собственный код, создав функции, которые обладают гибкостью и контролем для решения наиболее сложных проблем интеграции.
    • Отладка кода локально в Visual Studio Code. Проходите через ваш код и рабочие процессы в одном сеансе отладки.
    • Разверните код одновременно с рабочими процессами. Другие планы обслуживания не нужны.
    • Поддержка сценариев миграции BizTalk Server, чтобы можно было перенести инвестиции в пользовательские .NET приложения из локальной среды в облако.
  • Локальная папка, используемая для проекта кода.

Ограничения

  • Вы можете использовать возможность пользовательских функций только в Visual Studio Code, работающей на Windows. Эта возможность поддерживает использование .NET Framework и .NET 8 для рабочих процессов приложений логики уровня "Стандартный", развернутых и размещенных в Azure.

  • Вы не можете использовать разработку пользовательских функций на портале Azure. Однако для работы с выходными данными из пользовательских функций в рабочем процессе выполните следующие действия:

    1. После развертывания функций в Azure выполните действия, описанные в разделе Вызов вашего кода из рабочего процесса на портале Azure.

    2. Добавьте встроенное действие с именем Вызвать локальную функцию в этом приложении логики в ваш рабочий процесс. Выберите развернутые пользовательские функции, которые вы хотите и запустите код.

    3. Используйте последующие действия рабочего процесса для ссылки на выходные данные пользовательских функций, например в любом другом рабочем процессе. Вы можете просмотреть журнал выполнения встроенного действия, входные и выходные данные.

Общие ограничения см. в разделе Limits и справочник по конфигурации для Azure Logic Apps.

1. Создание проекта кода

Расширение Azure Logic Apps (standard) для Visual Studio Code включает шаблон проекта кода, который обеспечивает упрощенный интерфейс для написания, отладки и развертывания собственного кода с помощью рабочих процессов. Этот шаблон проекта создает файл рабочей области и два примера проектов: один проект для написания кода и другого проекта для создания рабочих процессов.

Примечание.

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

Чтобы создать проект кода, выполните следующие действия.

  1. В Visual Studio Code войдите в свою учетную запись Azure.

    Если вход занимает больше времени, Visual Studio Code предложит выполнить вход через веб-сайт проверки подлинности Microsoft, предоставив код устройства. Чтобы выполнить вход с помощью кода, выполните следующие действия.

    1. Выберите "Использовать код устройства" и нажмите кнопку "Копировать" и "Открыть".

    2. Выберите "Открыть ссылку", чтобы открыть новое окно браузера и перейти на веб-сайт проверки подлинности.

    3. На странице Войдите в учетную запись введите код проверки подлинности и нажмите кнопку Далее.

  2. На панели действий выберите значок Azure.

  3. В окне Azure перейдите в раздел Workspace. Переместите указатель на область заголовка, чтобы появилась панель инструментов.

  4. В меню Azure Logic Apps выберите Create new logic app workspace.

    Скриншот отображает Visual Studio Code с окном Azure, панелью инструментов раздела рабочей области и выбором параметра создания новой рабочей области логического приложения.

  5. В окне "Выбор папки " перейдите к локальной папке проекта, выберите папку и выберите ее.

  6. В окне Создать новую рабочую область приложения логики в поле Имя рабочей области введите название вашей рабочей области, а затем нажмите клавишу ВВОД.

    В этом примере используется weather-app имя рабочей области:

    Снимок экрана: запрос на ввод имени рабочей области.

    В этом примере в качестве имени рабочей области используется weather-project.

  7. Чтобы выбрать шаблон для нового проекта, выберите логическое приложение с проектом пользовательского кода.

    Снимок экрана: запрос на выбор шаблона проекта.

  8. На запрос Выберите целевой фреймворк выберите .NET Framework или .NET 8.

  9. Следуйте последующим запросам, чтобы указать следующие сведения:

    Подсказка Пример значения
    Имя приложения логики weather-logic-app
    Function name для проекта функций для .NET WeatherForecast
    Namespace для проекта функций .NET Contoso.Enterprise
    Выберите шаблон для первого рабочего процесса проекта:

    - Состоящий рабочий процесс
    - Рабочий процесс без отслеживания состояния
    - Автономный агент
    - Агент беседы
    - Пропустить сейчас
    Рабочий процесс с отслеживанием состояния
    Имя рабочего процесса weather-workflow
  10. Чтобы выбрать, как открывать проект, выберите Открыть в текущем окне.

    После завершения этого шага Visual Studio Code создает рабочую область, которая включает проект функций .NET и проект приложения логики, например:

    Скриншот показывает созданную рабочую область с проектом логического приложения и проектом .NET функций.

    В окне обозревателя обратите внимание на следующие папки в рабочей области:

    Folder Описание
    < имя рабочей области> Содержит проект функций .NET и проект рабочего процесса логического приложения.
    < logic-app-name> Содержит файлы и другие артефакты для проекта приложения логики. Например, файлworkflow.json — это файл определения рабочего процесса, где можно создать рабочий процесс.
    < имя функции> Содержит файлы и другие артефакты для проекта функций .NET. Например, <файл function-name>.cs — это файл кода, в котором вы можете писать свой код.
  11. Для запроса Включение соединителей для Azure для Logic Apps <logic-app-name> выберите Использовать соединители из Azure.

  12. Для подсказки Select subscription выберите желаемую подписку Azure.

  13. Чтобы выбрать группу ресурсов для новых ресурсов , выберите нужную группу ресурсов или создайте новую группу ресурсов.

  14. Для запроса Select a location for new resources выберите регион Azure для развертывания.

  15. Для метода проверки подлинности Select для соединителей Azure выберите тип проверки подлинности, используемый для подключений, требующих проверки подлинности.

    Тип аутентификации Описание
    Манажируемая идентичность Выберите Managed Service Identity, чтобы использовать системное или назначенное пользователем удостоверение на ресурсе логического приложения.

    По умолчанию для ресурсов стандартного логического приложения уже включено системно назначенное удостоверение. Однако необходимо настроить учетную запись с доступом к роли на целевом ресурсе, а также выполнить любые другие требования.

    Дополнительные сведения см. в статье "Назначение доступа на основе ролей к управляемому удостоверению".
    Ключи подключения Настройте доступ к целевому ресурсу с помощью строк подключения и ключей доступа.

После выполнения этих действий перейдите к следующему разделу, чтобы создать код.

2. Написание кода

  1. В окне обозревателя разверните папку проекта функции и откройте < файл с именем> функции.cs.

    Этот файл содержит пример кода и определенные элементы кода со значениями, предоставленными ранее.

    В этом примере файл функции WeatherForecast.cs содержит эти элементы кода с примерами значений:

    Элемент кода Ценность
    Имя пространства имен Contoso.Enterprise
    Имя класса WeatherForecast
    Имя функции WeatherForecast
    Параметры функции zipcode, temperatureScale
    Возвращаемый тип Task
    Сложный тип Weather

    В следующем примере показан полный пример кода:

    //------------------------------------------------------------
    // Copyright (c) Microsoft Corporation. All rights reserved.
    //------------------------------------------------------------
    
    namespace Contoso.Enterprise
    {
        using System;
        using System.Collections.Generic;
        using System.Threading.Tasks;
        using Microsoft.Azure.Functions.Extensions.Workflows;
        using Microsoft.Azure.WebJobs;
        using Microsoft.Extensions.Logging;
    
        /// <summary>
        /// Represents the WeatherForecast flow invoked function.
        /// </summary>
        public class WeatherForecast
        {
    
            private readonly ILogger<WeatherForecast> logger;
    
            public WeatherForecast(ILoggerFactory loggerFactory)
            {
                logger = loggerFactory.CreateLogger<WeatherForecast>();
            }
    
            /// <summary>
            /// Executes the logic app workflow.
            /// </summary>
            /// <param name="zipCode">The zip code.</param>
            /// <param name="temperatureScale">The temperature scale (e.g., Celsius or Fahrenheit).</param>
            [FunctionName("WeatherForecast")]
            public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
            {
    
                this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
                // Generate random temperature within a range based on the temperature scale
                Random rnd = new Random();
                var currentTemp = temperatureScale == "Celsius" ? rnd.Next(1, 30) : rnd.Next(40, 90);
                var lowTemp = currentTemp - 10;
                var highTemp = currentTemp + 10;
    
                // Create a Weather object with the temperature information
                var weather = new Weather()
                {
                    ZipCode = zipCode,
                    CurrentWeather = $"The current weather is {currentTemp} {temperatureScale}",
                    DayLow = $"The low for the day is {lowTemp} {temperatureScale}",
                    DayHigh = $"The high for the day is {highTemp} {temperatureScale}"
                };
    
                return Task.FromResult(weather);
            }
    
            /// <summary>
            /// Represents the weather information for WeatherForecast.
            /// </summary>
            public class Weather
            {
                /// <summary>
                /// Gets or sets the zip code.
                /// </summary>
                public int ZipCode { get; set; }
    
                /// <summary>
                /// Gets or sets the current weather.
                /// </summary>
                public string CurrentWeather { get; set; }
    
                /// <summary>
                /// Gets or sets the low temperature for the day.
                /// </summary>
                public string DayLow { get; set; }
    
                /// <summary>
                /// Gets or sets the high temperature for the day.
                /// </summary>
                public string DayHigh { get; set; }
            }
        }
    }
    

    Определение функции включает метод по умолчанию Run , который можно использовать для начала работы. Этот пример метода Run демонстрирует некоторые возможности, доступные с помощью функции пользовательских функций, например передачу различных входных и выходных данных, включая сложные .NET типы.

    Файл <function-name>.cs также включает ILogger интерфейс, обеспечивающий поддержку отслеживания событий в ресурсе Application Insights. Вы можете отправлять данные трассировки в Application Insights и хранить эти сведения с информацией трассировки из рабочих процессов, например:

    private readonly ILogger<WeatherForecast> logger;
    
    public WeatherForecast(ILoggerFactory loggerFactory)
    {
        logger = loggerFactory.CreateLogger<WeatherForecast>();
    }
    
    [FunctionName("WeatherForecast")]
    public Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale)
    {
    
        this.logger.LogInformation("Starting WeatherForecast with Zip Code: " + zipCode + " and Scale: " + temperatureScale);
    
        <...>
    
    }
    
  2. Замените пример кода функции собственным и измените метод по умолчанию Run для конкретных сценариев. Также можно скопировать функцию вместе с декларацией [FunctionName("<function-name>")], а затем переименовать функцию, дав ей уникальное имя. Затем можно изменить переименованную функцию в соответствии с вашими потребностями.

Этот пример продолжается с оригинальным примером кода, предполагая отсутствие изменений.

3. Компиляция и сборка кода

Завершив написание кода, скомпилируйте его, чтобы убедиться, что ошибки сборки отсутствуют. Проект функций .NET автоматически включает задачи сборки, которые компилируют и добавляют код в папку lib\custom в проекте приложения логики, где рабочие процессы ищут пользовательские функции для выполнения. В зависимости от версии .NET эти задачи помещают сборки в папку lib\custom\net472 или lib\custom\net8.

Выполните следующие действия:

  1. В Visual Studio Code на панели действий выберите Explorer.

  2. В окне обозревателя откройте контекстное меню папки проекта функций и выберите проект "Сборка функций".

    Снимок экрана: контекстное меню проекта функций с выбранным параметром для проекта

    Задача сборки выполняется для проекта функций. Если сборка выполнена успешно, в окне терминалаотображается сообщение о успешной сборке .

  3. Убедитесь, что в проекте приложения логики существуют следующие элементы:

    • В рабочей области разверните следующие папки: <your-logic-app>>lib\\custom>net472 или net8 в зависимости от вашей версии .NET. Убедитесь, что вложенная папка с именем net472 или net8 содержит файлы сборки (DLL), необходимые для выполнения кода, включая < файла с именем> функции.dll.

    • В рабочей области разверните следующие папки: <ваше приложение Logic>>lib\custom><function-name>. Убедитесь, что имя вложенной папки с именем <функции> содержит файл function.json, который содержит метаданные о написанном коде функции. Конструктор рабочих процессов использует этот файл для определения необходимых входных и выходных данных при вызове кода.

    В следующем примере показаны примеры созданных сборок и других файлов в проекте приложения логики:

    Screenshot отображает рабочую область приложения логики с .NET функциями и проектами приложения логики. Недавно созданные сборки и другие необходимые файлы отображаются.

4. Вызов кода из рабочего процесса

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

  1. В окне обозревателя разверните <имя рабочей области>, <имя приложения логики> и <имя рабочего процесса>.

  2. Откройте контекстное меню для workflow.jsonи выберите "Открыть конструктор".

    Откроется конструктор рабочих процессов и отображается рабочий процесс по умолчанию со следующим триггером и действиями:

    Операция Описание
    Триггер Встроенный триггер запроса с именем "При получении HTTP-запроса".
    Действие Встроенное действие с именем Вызов локальной функции в этом логическом приложении.
    Действие Встроенное действие Ответа с именем Response, которое используется для того, чтобы ответить вызывающему абоненту, только если применяется триггер Request.
  3. В конструкторе выберите действие с именем "Вызвать локальную функцию" в этом приложении логики.

    Откроется область сведений о действии, чтобы можно было настроить вызов пользовательской функции, например:

    Снимок экрана: рабочий процесс по умолчанию и его триггер и действия, открытые в конструкторе рабочих процессов.

  4. Проверьте и убедитесь, что для параметра имени функции задано значение функции, которую требуется запустить. Просмотрите или измените другие значения параметров, которые использует ваша функция.

5. Отладка кода и рабочего процесса

  1. Для каждой из следующих служб служба хранилища Azure запустите эмулятор хранилища Azurite:

    • Служба Azure Blob
    • Служба очередей Azure
    • служба таблиц Azure
    1. В меню Visual Studio Code View выберите Command Palette.

    2. В появившемся запросе выберите Azurite: Запуск службы BLOB-объектов из списка.

    3. В появившемся списке рабочих каталогов выберите приложение логики.

    4. Повторите следующие действия для Azurite: служба очередей, запуск и Azurite: служба таблиц, запуск.

    При успешном выполнении панель задач Visual Studio Code в нижней части экрана отображает три работающие службы хранилища.

  2. Подключите отладчик как к проекту приложения логики, так и к проекту функций .NET, выполнив следующие действия:

    1. В Visual Studio Code на панели действий выберите Run and Debug (клавиатура: CTRL+SHIFT+D).

      Скриншот показывает панель действий Visual Studio Code с выбранными параметрами Run and Debug.

    2. В списке «Запуск и отладка» выберите «Запуск/отладка логического приложения с локальной функцией (<ваше логическое приложение>)», затем выберите «Воспроизвести» (зелёная стрелка).

      Снимок экрана: список запуска и отладки с параметром выбора для приложения логики Run/Debug с локальной функцией.

      Происходят следующие события:

      • Откроется окно терминала и отображается процесс отладки.
      • Откроется окно консоли отладки и отображается состояние отладки.
      • В нижней части Visual Studio Code панель задач становится оранжевым, указывая, что .NET отладчик загружается.
  3. Чтобы задать любые точки останова, в определении функции (< функции.cs) или определении рабочего процесса (>workflow.json), найдите номер строки, в котором требуется точка останова, и выберите смежный столбец, например:

    Снимок экрана показывает открытый файл с кодом функции с установленной на строку в коде точкой останова.

  4. Чтобы вручную запустить триггер запроса в рабочем процессе, откройте страницу обзора рабочего процесса:

    1. В проекте приложения логики откройте контекстное меню файла workflow.json и выберите "Обзор".

      На странице обзора рабочего процесса кнопка запуска триггера доступна, если вы хотите вручную запустить рабочий процесс. В разделе "Свойства рабочего процесса" значение URL-адреса обратного вызова — это URL-адрес вызываемой конечной точки, созданной триггером запроса в рабочем процессе. Вы можете отправлять запросы на этот URL-адрес, чтобы активировать рабочий процесс из других приложений, включая другие рабочие процессы логического приложения.

    2. На панели инструментов "Обзор" выберите "Запустить триггер".

      Скриншот показывает Visual Studio Code и открытую страницу сводки рабочего процесса.

      После запуска рабочего процесса отладчик активирует первую точку останова.

    3. В меню "Запуск" или на панели инструментов отладчика выберите действие отладки.

    После завершения выполнения рабочего процесса на странице обзора отображаются завершенный запуск и основные сведения об этом выполнении.

  5. Чтобы просмотреть дополнительные сведения о выполнении рабочего процесса, выберите завершенный запуск. Или в списке рядом с столбцом "Длительность " выберите "Показать запуск".

    Скриншот отображает Visual Studio Code и завершенный запуск рабочего процесса.

6. Развертывание кода

Разверните ваши пользовательские функции так же, как и проект вашего логического приложения. Независимо от того, разворачиваете ли вы из Visual Studio Code или используете DevOps процесс CI/CD, убедитесь, что вы компилируете код перед развертыванием. Кроме того, перед развертыванием убедитесь, что все зависимые сборки существуют в следующей папке проекта приложения логики:

  • .NET 4.7.2: папка lib/custom/net472

  • .NET 8: папка lib/custom/net8

Дополнительные сведения см. в разделе Deploy Standard workflows from Visual Studio Code to Azure.

Внедрение зависимостей

При выборе .NET 8 пользовательский код .NET в стандартных рабочих процессах поддерживает внедрение зависимостей (DI). Эта возможность позволяет зарегистрировать службы один раз, что делает их автоматически доступными для пользовательских функций кода во время выполнения, а не создавать зависимости внутри каждой функции.

Примечание.

Только .NET 8 проектов пользовательского кода в Visual Studio Code поддерживают внедрение зависимостей.

Без внедрения зависимостей пользовательские функции кода часто:

  • Создайте экземпляры служб непосредственно в функции.
  • Повторяющаяся логика в нескольких функциях или рабочих процессах.
  • Смешайте бизнес-логику с кодом установки и конфигурации.

По мере роста рабочих процессов пользовательский код становится сложнее тестировать, повторно использовать и поддерживать. С помощью внедрения зависимостей можно:

  • Отделите бизнес-логику от выполнения рабочего процесса.
  • Повторное использование общих служб в нескольких пользовательских кодовых функциях.
  • Выравнивайте пользовательский код со стандартными шаблонами разработки .NET.

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

Когда следует использовать внедрение зависимостей

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

  • Несколько рабочих процессов используют или совместно используют одни и те же пользовательские функции кода.
  • Пользовательские функции кода содержат бизнес-логику или логику маршрутизации, изменяющуюся с течением времени.
  • Вам требуется лучшая тестируемость или долгосрочная поддерживаемость.

Как внедрение зависимостей влияет на пользовательские функции .NET

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

  1. Azure Logic Apps загружает проект пользовательского кода.
  2. Azure Logic Apps создает экземпляры, регистрирует и внедряет необходимые службы в функцию.
  3. Функция выполняется с помощью внедренных зависимостей.

Разрешить внедрение зависимостей

Чтобы использовать внедрение зависимостей с пользовательским кодом .NET, выполните следующие требования:

  1. При создании проекта пользовательского кода выберите .NET 8.

    Только .NET 8 проектов пользовательского кода поддерживают внедрение зависимостей.

  2. В проекте добавьте StartupConfiguration класс для определения списка зависимостей. Реализуйте интерфейс IConfigureStartup и зарегистрируйте свои зависимости, используя IServiceCollection, например:

    using Microsoft.Azure.Functions.Extensions.Workflows;
    using Microsoft.Extensions.DependencyInjection;
    
    public class StartupConfiguration : IConfigureStartup
    {
        /// <summary>
        /// Configures services for the custom code function to use.
        /// </summary>
        /// <param name="services">The service collection to configure.</param>
        public void Configure(IServiceCollection services)
        {
            // Register the routing service with dependency injection
            services.AddSingleton<IRoutingService, OrderRoutingService>();
            services.AddSingleton<IDiscountService, DiscountService>();
        }
    }
    

    Интерфейс IConfigureStartup определен в Microsoft.Extensions.DependencyInjection. Дополнительные сведения см. в StartupConfiguration.cs

  3. В конструкторе класса пользовательского кода функции инициализируйте зарегистрированные службы, определяя их как параметры конструктора, а не создавая их непосредственно внутри функции, например:

    public class MySampleFunction
    {
        private readonly ILogger<MySampleFunction> logger;
        private readonly IRoutingService routingService;
        private readonly IDiscountService discountService;
    
        public MySampleFunction(ILoggerFactory loggerFactory, IRoutingService routingService, IDiscountService discountService)
        {
            this.logger = loggerFactory.CreateLogger<MySampleFunction>();
            this.routingService = routingService;
            this.discountService = discountService;
        }
    
        // Add your function logic here
    
    } 
    

Помимо создания и развертывания проекта пользовательского кода, вам не нужно выполнять другие действия, изменять рабочий процесс или вносить другие изменения в Azure Logic Apps, чтобы включить внедрение зависимостей.

Дополнительные сведения см. в примере внедрения зависимостей пользовательского кода.

Используйте свои пакеты NuGet

Для проектов пользовательского кода на основе NuGet, использующих .NET 8, можно включить собственные пакеты NuGet и управлять ими, не разрешая конфликты с зависимостями, используемыми узлом рабочей роли языка. Просто непосредственно добавьте зависимости сборки в отдельное местоположение для сборки в вашем проекте. В следующих исключениях можно привести любые версии зависимой сборки, совместимые с .NET 8, необходимые для проекта:

  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.DependencyInjection.Abstractions
  • Microsoft.Azure.Functions.Extensions.Workflows.Abstractions

Устранение неполадок

Ошибка области сведений о действии

При выборе встроенного действия с именем Вызов локальной функции в этом приложении Logic Apps в конструкторе рабочего процесса на панели информации об этом действии отображается следующее сообщение:

Failed to retrieve dynamic inputs. Error details:

В этом сценарии проверьте проект приложения логики, чтобы узнать, пуста ли папка LogicApp\lib\custom . Если она пуста, в меню Терминала выберите Запустить задачу>Функции сборки.

В настоящее время процесс с указанным именем не выполняется

Если при запуске рабочего процесса вы получите это сообщение об ошибке, скорее всего, прикрепите процесс отладчика к .NET Функциям, а не к приложению логики.

Чтобы устранить эту проблему, в списке "Запуск и отладка " выберите "Подключиться к приложению логики" (LogicApp) и выберите "Воспроизвести " (зеленый треугольник).

Пакет не импортирован правильно

Если в окне вывода отображается ошибка, аналогичная приведенному ниже сообщению, убедитесь, что установлен по крайней мере .NET 6.0. Если у вас установлена эта версия, попробуйте удалить и переустановить ее.

C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.targets(83,5): warning : The ExtensionsMetadataGenerator package was not imported correctly. Are you missing 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.targets' or 'C:\Users\yourUserName\.nuget\packages\microsoft.azure.webjobs.script.extensionsmetadatagenerator\4.0.1\build\Microsoft.Azure.WebJobs.Script.ExtensionsMetadataGenerator.props'? [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] WeatherForecast -> C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\\bin\Debug\net472\WeatherForecast.dll C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : It was not possible to find any compatible framework version [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : The specified framework 'Microsoft.NETCore.App', version '6.0.0' was not found. [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj] C:\Users\yourUserName\.nuget\packages\microsoft.net.sdk.functions\4.2.0\build\Microsoft.NET.Sdk.Functions.Build.targets(32,5): error : - Check application dependencies and target a framework version installed at: [C:\Desktop\...\custom-code-project\MyLogicAppWorkspace\Function\WeatherForecast.csproj]

Сбои сборки

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

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

Build FAILED.

C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1031: Type expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]
C:\Users\yourUserName\...\custom-code-project\Function\func.cs (24,64): error CS1001: Identifier expected [C:\Users\yourUserName\...\custom-code-project\Function\func.csproj]

0 Warning(s)
2 Error(s)

Чтобы устранить эту проблему, добавьте следующий параметр в методе кода Run :

string parameter1 = null

В следующем примере показано, как появляется сигнатура Run метода:

public static Task<Weather> Run([WorkflowActionTrigger] int zipCode, string temperatureScale, string parameter1 = null)

Создавайте стандартные рабочие процессы логических приложений в Visual Studio Code