Я создал проект 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.
Все, что я пытаюсь сделать, связано с какой-то ошибкой, связанной с зависимостью. Как я могу это решить?
Не удалось загрузить файл или сборку «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);
}
Портал:
Я создал новый проект и сделал именно то, что вы сказали. Но все равно это не работает. Также нет function.json, как на вашем экране. Я использую .net 8.
Ваш код выглядит как внутрипроцессный код. Код изолированной функции .NET 8 должен быть похож на код, показанный на изображении .
Я думаю ты прав. Я создал проект .NET 6, обновил его до .NET 8, и весь проект выглядит иначе, чем при создании нового проекта .NET 8 из окна «Создать проект». Когда я обновляюсь с .NET 6 до .NET 8, все работает, в том числе при развертывании в Azure.
вы работаете в процессе или вне процесса?