Функция Azure работает локально, но не в Azure

Я создал проект Azure по умолчанию в Visual Studio с помощью HttpTrigger.

Это единственный код (он генерируется шаблоном).

public static class Function1
{
    [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        string responseMessage = string.IsNullOrEmpty(name)
            ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
            : $"Hello, {name}. This HTTP triggered function executed successfully.";

        return new OkObjectResult(responseMessage);
    }
}

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

27-06-2024, 15:05:54,230
Information
Executing 'Function1' (Reason='This function was programmatically called via the host APIs.', Id=d47ad353-d75f-4ae6-acf7-d560c1d31a73)
27-06-2024, 15:05:54,231

Error
Could not load file or assembly 'System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.

Все, что я пытаюсь сделать, связано с какой-то ошибкой, связанной с зависимостью. Как я могу это решить?

вы работаете в процессе или вне процесса?

Thiago Custodio 27.06.2024 18:36
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
1
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Не удалось загрузить файл или сборку «System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a». Система не может найти указанный файл.

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

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

Чтобы решить эту проблему, используйте механизм _FunctionsSkipCleanOutput в .csproj, который помогает пропустить удаление избыточных пакетов в рамках процесса очистки, см. статью.

<PropertyGroup>
    <_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
</PropertyGroup>
  • Используйте последнюю версию зависимости Microsoft.NET.Sdk.Functions в функции Azure:

.csproj:

<Project Sdk = "Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include = "Microsoft.NET.Sdk.Functions" Version = "4.4.0" />
  </ItemGroup>
  <ItemGroup>
    <None Update = "host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update = "local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

Фрагмент кода:

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string name = req.Query["name"];

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    name = name ?? data?.name;

    string responseMessage = string.IsNullOrEmpty(name)
        ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
        : $"Hello, {name}. This HTTP triggered function executed successfully.";

    return new OkObjectResult(responseMessage);
}
  • Развернули функцию в приложении-функции Azure.

Портал:

Я создал новый проект и сделал именно то, что вы сказали. Но все равно это не работает. Также нет function.json, как на вашем экране. Я использую .net 8.

NLAnaconda 03.07.2024 11:27

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

Pravallika KV 03.07.2024 11:34

Я думаю ты прав. Я создал проект .NET 6, обновил его до .NET 8, и весь проект выглядит иначе, чем при создании нового проекта .NET 8 из окна «Создать проект». Когда я обновляюсь с .NET 6 до .NET 8, все работает, в том числе при развертывании в Azure.

NLAnaconda 03.07.2024 14:18

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

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

KQL Query работает при расширенном поиске, но не работает, если превратить его в правило обнаружения
Как преобразовать общий файловый ресурс уровня «Премиум» в учетную запись хранения блочных BLOB-объектов уровня «Премиум» или стандартную учетную запись хранения общего назначения версии 2?
Ожидается модуль службы Azure Kubernetes — 4 Недостаточно процессора
Общий доступ Azure Key Vault отключен, как получить к нему доступ через портал через Интернет
Функции Azure: задание не найдено (Python)
Azure – RBAC для группы управления
Azure получает список EID с помощью API
AddDataProtection().PersistKeysToAzureBlobStorage().ProtectKeysWithAzureKeyVault() получает ошибку httpVerb при доступе к хранилищу BLOB-объектов
Развертывание веб-приложения Python (Dash) в Azure, конвейер работает слишком долго, а колесо создания сообщений для панд все еще работает. Как оптимизировать?
Синхронизация файлов Azure с хранилищем BLOB-объектов