AWS Lambda TargetInvocationException: Datei oder Assembly „System.Data.SqlClient, Version=4.6.1.6“ konnte nicht geladen C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 AWS Lambda TargetInvocationException: Datei oder Assembly „System.Data.SqlClient, Version=4.6.1.6“ konnte nicht geladen

Post by Anonymous »

Ich habe eine .NET 8-basierte Multiprojekt-Backend-Lösung. Es verwendet GitHub-Aktionen, um das Build-/Veröffentlichungsprojekt mit Release zu erstellen, das später von AWS Lambda verwendet wird, um es bei jedem Aufruf auszuführen.
Die CI/CD-Pipeline führt diesen Befehl aus, um ein Projekt mit Release-Konfiguration zu erstellen:

Code: Select all

dotnet publish -c Release -r linux-x64 --self-contained false -o ./publish
In einigen Projekten innerhalb dieser .NET-Lösung benötige ich SqlClient und verwende daher das Paket System.Data.SqlClient mit Version 4.8.6. Da dieses Projekt vom API-Projekt (meinem Startprojekt) referenziert wird, habe ich das SqlClient-Paket in seiner .csproj-Datei wie folgt erwähnt: Das Ausführen der Backend-Lösung auf einem beliebigen lokalen Computer funktioniert einwandfrei, aber nach erfolgreichen GitHub Actions-Builds kann Lambda in einigen Builds das erstellte Image nicht ausführen, während Lambda in anderen Builds das Image erfolgreich ausführt.
Ich habe unten das Cloudwatch-Protokoll geteilt, wenn Lambda versucht, die Release-Builds mit Problemen auszuführen, und bei keinem der Lambda-Aufrufe ausgeführt werden kann:

Code: Select all

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types.
Could not load file or assembly 'System.Data.SqlClient, Version=4.6.1.6, Culture=neutral, PublicKeyToken=b03xxxxx11xxxxxx'. The system cannot find the file specified.
at System.Reflection.RuntimeModule.GetTypes(RuntimeModule module)
at MediatR.Registration.ServiceRegistrar.c.b__1_0(Assembly a)
at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at MediatR.Registration.ServiceRegistrar.ConnectImplementationsToTypesClosing(Type openRequestInterface, IServiceCollection services, IEnumerable`1 assembliesToScan, Boolean addIfAlreadyExists, MediatRServiceConfiguration configuration)
at MediatR.Registration.ServiceRegistrar.AddMediatRClasses(IServiceCollection services, IEnumerable`1 assembliesToScan, MediatRServiceConfiguration configuration)
at MediatR.ServiceCollectionExtensions.AddMediatR(IServiceCollection services, IEnumerable`1 assemblies, Action`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 invokeAttr)
at System.Reflection.MethodBaseInvoker.InvokeWithOneArg(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(Object instance, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services, Object instance)
at Microsoft.Extensions.Hosting.HostBuilder.InitializeServiceProvider()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2.Start()
at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2..ctor(StartupMode startupMode)
at Amazon.Lambda.AspNetCoreServer.AbstractAspNetCoreFunction`2..ctor()
at Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction..ctor()
at platform_jjz_service_api.LambdaEntryPoint..ctor()
at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions)
Die Untersuchung, die ich durchgeführt habe:
  • Ich habe die GitHub-Aktionen mehrmals auf demselben Git-Zweig ohne Codeänderungen ausgeführt. Bei einigen Builds wurde das Lambda erfolgreich ausgeführt, während bei einigen Builds das Image nicht ausgeführt werden konnte.
  • Ich habe das Artefakt heruntergeladen, das GitHub-Aktionen erstellen (das einen Fehler auslöst, wenn Lambda versucht, es auszuführen) und es lokal mit Dotnet ausgeführt platform_jjz_service_api.dll und es wurde derselbe Fehler auf meinem lokalen Computer ausgegeben.
  • Überprüft, ob die Datei „System.Data.SqlClient.dll“ im entpackten Artefaktordner vorhanden ist.
  • Überprüfte die Assemblyversion von „System.Data.SqlClient.dll“. [System.Reflection.AssemblyName]::GetAssemblyName("System.Data.SqlClient.dll").Version und es wurde 4.6.1.6 zurückgegeben
Was mich an diesem zeitweiligen Fehler stört:
  • Warum tritt dieser Fehler nur bei zeitweise auftretenden Build-Images auf?
  • Gemäß der Vierter Punkt meines Abschnitts „Untersuchungen“ oben, in den Build-Bildern, die einen Fehler ausgeben, obwohl sich die System.Data.SqlClient-Assembly mit Version 4.6.1.6 in diesem Build befindet. Warum gibt AWS Lambda diesen Fehler aus?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post