AWS Lambda TargetInvoctionException: не удалось загрузить файл или сборку «System.Data.SqlClient, Version = 4.6.1.6».C#

Место общения программистов C#
Anonymous
AWS Lambda TargetInvoctionException: не удалось загрузить файл или сборку «System.Data.SqlClient, Version = 4.6.1.6».

Сообщение Anonymous »

У меня есть многопроектное серверное решение на базе .NET 8. Он использует действия GitHub для создания проекта сборки/публикации с выпуском, который позже используется AWS Lambda для его запуска при каждом вызове.
Конвейер CI/CD запускает эту команду для сборки проекта с конфигурацией выпуска:

Код: Выделить всё

dotnet publish -c Release -r linux-x64 --self-contained false -o ./publish
В некоторых проектах этого решения .NET мне требуется SqlClient, поэтому я использую пакет System.Data.SqlClient версии 4.8.6. Поскольку на этот проект ссылается проект API (мой стартовый проект), у меня есть пакет SqlClient, упомянутый в его файле .csproj, например: Запуск серверной службы на любом локальном компьютере работает нормально, но после успешных сборок GitHub Actions в некоторых сборках лямбда не может запустить созданный образ, тогда как в остальных сборках лямбда успешно запускает образ.
Я поделился журналом CloudWatch ниже, когда лямбда пытается запустить выпускные сборки, имеющие проблемы, и не запускается ни для одного из вызовов лямбда:
/>
System.Reflection.TargetInvocationException: исключение создано целью вызова.
System.Reflection.ReflectionTypeLoadException: невозможно загрузить один или несколько запрошенных типов.
Не удалось загрузить файл или сборку «System.Data.SqlClient, Version=4.6.1.6, Culture=neutral, PublicKeyToken=b03xxxxx11xxxxxx'. Системе не удается найти указанный файл.

в System.Reflection.RuntimeModule.GetTypes(модуль RuntimeModule)

в MediatR.Registration.ServiceRegistrar.c.b__1_0(Assembly a)

в System.Linq.Enumerable.SelectManySingleSelectorIterator

Код: Выделить всё

2.MoveNext()   at System.Linq.Enumerable.WhereEnumerableIterator
1.MoveNext()

в System.Linq.Enumerable.WhereEnumerableIterator

Код: Выделить всё

1.MoveNext()   at MediatR.Registration.ServiceRegistrar.ConnectImplementationsToTypesClosing(Type openRequestInterface, IServiceCollection services, IEnumerable
1 assembliesToScan, логическое значение addIfAlreadyExists, конфигурация MediatRServiceConfiguration)

at MediatR.Registration.ServiceRegistrar.AddMediatRClasses (службы IServiceCollection, IEnumerable

Код: Выделить всё

1 assembliesToScan, MediatRServiceConfiguration configuration)   at MediatR.ServiceCollectionExtensions.AddMediatR(IServiceCollection services, IEnumerable
1 сборка, Действие

Код: Выделить всё

1 configuration)   at MediatR.ServiceCollectionExtensions.AddMediatR(IServiceCollection services, Assembly[] assemblies)   at platform_jjz_service_api.Startup.ConfigureServices(IServiceCollection services) in /runner/_work/JJZClin/JJZClin/platform_jjz_service_api/Startup.cs:line 292   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void**  arguments, Signature sig, Boolean isConstructor)   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span
1 copyOfArgs, BindingFlags вызоваAttr)

at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags ignoreAttr, Binderbinder, параметры Object[], CultureInfo Culture)

at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(экземпляр объекта, службы IServiceCollection)

at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(Тип startType, контекст HostBuilderContext, службы IServiceCollection, экземпляр объекта)

at Microsoft.Extensions.Hosting.HostBuilder.InitializeServiceProvider()

в Microsoft.Extensions.Hosting.HostBuilder.Build()

в Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction

Код: Выделить всё

2.Start()   at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction
2..ctor(StartupMode StartupMode)

в Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2..ctor()

в Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction..ctor()

at Platform_jjz_service_api.LambdaEntryPoint..ctor()

at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean WrapExceptions)

Расследование, которое я провел:
  • Выполнял действия github несколько раз в одной и той же ветке git без изменений кода, в некоторых сборках лямбда-выражение выполнялось успешно, тогда как в некоторых сборках ему не удавалось запустить образ.
  • Загрузил артефакт, который собирает действия GitHub (который выдает ошибку при попытке лямбда-выражения запустить его), и запустил его локально с помощью dotnet Platform_jjz_service_api.dll, и на моем локальном компьютере возникла та же ошибка.
  • Проверено наличие файла «System.Data.SqlClient.dll» в разархивированная папка артефакта
  • Проверил версию сборки "System.Data.SqlClient.dll" с помощью [System.Reflection.AssemblyName]::GetAssemblyName("System.Data.SqlClient.dll").Version и вернул 4.6.1.6
4-й маркер точка меня еще больше смутила: если в образе сборки уже присутствует сборка для System.Data.SqlClient с версией 4.6.1.6, то почему лямбда-выражение AWS выдает эту ошибку?

Подробнее здесь: https://stackoverflow.com/questions/798 ... y-system-d

Вернуться в «C#»