aws / aws-lambda-dotnet

Libraries, samples and tools to help .NET Core developers develop AWS Lambda functions.
Apache License 2.0
1.58k stars 477 forks source link

JsonSerializer.Deserialize<T> returns invalid object when called by TypeConverter within AWS Lambda Test Tool #1453

Open alex-bolenok-centralreach opened 1 year ago

alex-bolenok-centralreach commented 1 year ago

Describe the bug

When I'm running some code in the test tool, I come across an issue, when System.Text.Json.JsonSerializer.Deserialize returns different results depending on whether it's being called from the top level or from a System.ComponentModel.TypeConverter method.

This is best illustrated with code (see attachment)

lambda-test-tool.zip

Run:

dotnet tool restore
dotnet build
dotnet dotnet-lambda-test-tool-6.0 --no-ui --function-handler Lambda::Main.Lambda::Handler --pause-exit false

Output:

AWS .NET Core 6.0 Mock Lambda Test Tool (0.12.7)
Loaded local Lambda runtime from project output /home/alex.bolenok/Projects/lambda-test-tool/bin/Debug/net6.0
Executing Lambda function without web interface
... Using function handler Lambda::Main.Lambda::Handler
... No payload configured. If a payload is required set the --payload switch to a file path or a JSON document.
... Setting AWS_PROFILE environment variable to default.
... No default AWS region configured. The --region switch can be used to configure an AWS Region.
Captured Log information:
test
True
Main.S3Bucket
Main.S3Bucket
>>>> False <<<<

Request executed successfully
Response:

This issue seems to be specific to the test tool (when I run this code in an actual Lambda, or in a console app, it works as expected).

Expected Behavior

TypeDescriptor.GetConverter(typeof T).ConvertFrom and JsonSerializer.Deserialize<T> both return objects of the same type T.

Current Behavior

TypeDescriptor.GetConverter(typeof T).ConvertFrom and JsonSerializer.Deserialize<T> return objects of different types.

Reproduction Steps

Run:

dotnet tool restore
dotnet build
dotnet dotnet-lambda-test-tool-6.0 --no-ui --function-handler Lambda::Main.Lambda::Handler --pause-exit false

Output:

AWS .NET Core 6.0 Mock Lambda Test Tool (0.12.7)
Loaded local Lambda runtime from project output /home/alex.bolenok/Projects/lambda-test-tool/bin/Debug/net6.0
Executing Lambda function without web interface
... Using function handler Lambda::Main.Lambda::Handler
... No payload configured. If a payload is required set the --payload switch to a file path or a JSON document.
... Setting AWS_PROFILE environment variable to default.
... No default AWS region configured. The --region switch can be used to configure an AWS Region.
Captured Log information:
test
True
Main.S3Bucket
Main.S3Bucket
>>>> False <<<<

Request executed successfully
Response:

Possible Solution

There is something weird in the way the test tool calles the framework methods. The actual lambda runtime works fine.

Additional Information/Context

No response

AWS .NET SDK and/or Package version used

{
    "version": 1,
    "isRoot": true,
    "tools": {
        "amazon.lambda.testtool-6.0": {
            "version": "0.12.7",
            "commands": [
                "dotnet-lambda-test-tool-6.0"
            ]
        }
    }
}
    <PackageReference Include="Amazon.Lambda.Core" Version="2.1.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />
    <PackageReference Include="Amazon.Lambda.SQSEvents" Version="2.1.0" />

Targeted .NET Platform

.NET 6

Operating System and version

Amazon Linux

ashishdhingra commented 1 year ago

Reproducible using below code in test tool (code is ported to Lambda project type for easy debugging): .csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <AWSProjectType>Lambda</AWSProjectType>
    <!-- This property makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. -->
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <!-- Generate ready to run images during publishing to improve cold start time. -->
    <PublishReadyToRun>true</PublishReadyToRun>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="2.1.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.3.1" />
    <PackageReference Include="Amazon.Lambda.SQSEvents" Version="2.1.0" />
    <PackageReference Include="JetBrains.Annotations" Version="2022.3.1" />
  </ItemGroup>
</Project>

Function.cs

using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Text.Json;
using Amazon.Lambda.Core;
using Amazon.Lambda.SQSEvents;
using JetBrains.Annotations;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace LambdaNet6Test;

public static class JsonOptions
{
    public static readonly JsonSerializerOptions JsonSerializerOptions = new()
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase
    };
}

internal class JsonTypeConverterAdapter<T> : TypeConverter
{
    public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
        => value is string stringValue
            ? JsonSerializer.Deserialize<T>(stringValue, JsonOptions.JsonSerializerOptions)
            : base.ConvertFrom(context, culture, value);

    public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value,
        Type destinationType)
        => value is T tValue && destinationType == typeof(string)
            ? JsonSerializer.Serialize(tValue)
            : base.ConvertTo(context, culture, value, destinationType);

    public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
        => sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);

    public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destinationType)
        => destinationType == typeof(T) || base.CanConvertTo(context, destinationType);
}

[TypeConverter(typeof(JsonTypeConverterAdapter<S3Bucket>))]
[Serializable]
internal class S3Bucket
{
    public string Bucket { get; set; } = string.Empty;
}

public class Function
{

    [PublicAPI]
    [SuppressMessage("Performance", "CA1822", Justification = "Lambda API")]
    [SuppressMessage("Style", "IDE0060", Justification = "Lambda API")]
    public string FunctionHandler(SQSEvent sqsEvent, ILambdaContext lambdaContext)
    {
        const string json = "{\"bucket\":\"test\"}";

        var s3BucketWorks = JsonSerializer.Deserialize<S3Bucket>(json, JsonOptions.JsonSerializerOptions);
        if (s3BucketWorks == null)
        {
            return string.Empty;
        }
        Console.WriteLine(s3BucketWorks.Bucket);
        Console.WriteLine((s3BucketWorks.GetType() == typeof(S3Bucket)).ToString());

        var s3BucketFails = TypeDescriptor.GetConverter(typeof(S3Bucket)).ConvertFrom(json);
        if (s3BucketFails == null)
        {
            return string.Empty;
        }
        Console.WriteLine(s3BucketFails.GetType());
        Console.WriteLine(typeof(S3Bucket));
        Console.WriteLine((s3BucketFails is S3Bucket).ToString());
        return string.Empty;
    }
}

While executing under Lambda Test tool, the statement (s3BucketFails is S3Bucket).ToString() returns False. Executing the same statement in immediate window when breakpoint is hit during debugging using Lambda Test tool returns correct value of True.

ashishdhingra commented 2 weeks ago

Reproducible in latest Lambda .NET Empty function blueprint. .csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <AWSProjectType>Lambda</AWSProjectType>
    <!-- This property makes the build directory similar to a publish directory and helps the AWS .NET Lambda Mock Test Tool find project dependencies. -->
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
    <!-- Generate ready to run images during publishing to improve cold start time. -->
    <PublishReadyToRun>true</PublishReadyToRun>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="2.3.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="2.4.4" />
  </ItemGroup>
</Project>

Function.cs

using Amazon.Lambda.Core;
using System.ComponentModel;
using System.Globalization;
using System.Text.Json;

// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class.
[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer))]

namespace LambdaNet8Test
{
    public static class JsonOptions
    {
        public static readonly JsonSerializerOptions JsonSerializerOptions = new()
        {
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
        };
    }

    internal class JsonTypeConverterAdapter<T> : TypeConverter
    {
        public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value)
            => value is string stringValue
                ? JsonSerializer.Deserialize<T>(stringValue, JsonOptions.JsonSerializerOptions)
                : base.ConvertFrom(context, culture, value);

        public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value,
            Type destinationType)
            => value is T tValue && destinationType == typeof(string)
                ? JsonSerializer.Serialize(tValue)
                : base.ConvertTo(context, culture, value, destinationType);

        public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType)
            => sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);

        public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destinationType)
            => destinationType == typeof(T) || base.CanConvertTo(context, destinationType);
    }

    [TypeConverter(typeof(JsonTypeConverterAdapter<S3Bucket>))]
    [Serializable]
    internal class S3Bucket
    {
        public string Bucket { get; set; } = string.Empty;
    }

    public class Function
    {
        public string FunctionHandler(string input, ILambdaContext context)
        {
            const string json = "{\"bucket\":\"test\"}";

            var s3BucketWorks = JsonSerializer.Deserialize<S3Bucket>(json, JsonOptions.JsonSerializerOptions);
            if (s3BucketWorks == null)
            {
                return string.Empty;
            }
            Console.WriteLine(s3BucketWorks.Bucket);
            Console.WriteLine((s3BucketWorks.GetType() == typeof(S3Bucket)).ToString());

            var s3BucketFails = TypeDescriptor.GetConverter(typeof(S3Bucket)).ConvertFrom(json);
            if (s3BucketFails == null)
            {
                return string.Empty;
            }
            Console.WriteLine(s3BucketFails.GetType());
            Console.WriteLine(typeof(S3Bucket));
            Console.WriteLine((s3BucketFails is S3Bucket).ToString());
            Console.WriteLine();

            var currentAssemblies = AppDomain.CurrentDomain.GetAssemblies();
            Console.WriteLine($"Total Assemblies in current AppDomain: {currentAssemblies.Count()}");
            foreach (var assembly in currentAssemblies.OrderBy(a => a.FullName))
            {
                Console.WriteLine($"    {assembly.FullName} -> {assembly.Location}");
            }
            return input.ToUpper();
        }
    }
}

Lambda Test Tool Execution log

test
True
LambdaNet8Test.S3Bucket
LambdaNet8Test.S3Bucket
False
Total Assemblies in current AppDomain: 141
    Amazon.Lambda.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> C:\Users\ashdhin\.dotnet\tools\.store\amazon.lambda.testtool-8.0\0.15.2\amazon.lambda.testtool-8.0\0.15.2\tools\net8.0\any\Amazon.Lambda.Core.dll
    Amazon.Lambda.Serialization.SystemTextJson, Version=0.0.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> D:\source\repros\LambdaNet8Test\LambdaNet8Test\src\LambdaNet8Test\bin\Debug\net8.0\Amazon.Lambda.Serialization.SystemTextJson.dll
    Amazon.Lambda.TestTool, Version=0.0.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> C:\Users\ashdhin\.dotnet\tools\.store\amazon.lambda.testtool-8.0\0.15.2\amazon.lambda.testtool-8.0\0.15.2\tools\net8.0\any\Amazon.Lambda.TestTool.dll
    Amazon.Lambda.TestTool.BlazorTester, Version=0.0.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> C:\Users\ashdhin\.dotnet\tools\.store\amazon.lambda.testtool-8.0\0.15.2\amazon.lambda.testtool-8.0\0.15.2\tools\net8.0\any\Amazon.Lambda.TestTool.BlazorTester.dll
    Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null -> 
    AWSSDK.Core, Version=3.3.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> C:\Users\ashdhin\.dotnet\tools\.store\amazon.lambda.testtool-8.0\0.15.2\amazon.lambda.testtool-8.0\0.15.2\tools\net8.0\any\AWSSDK.Core.dll
    Blazored.Modal, Version=3.1.2.0, Culture=neutral, PublicKeyToken=null -> C:\Users\ashdhin\.dotnet\tools\.store\amazon.lambda.testtool-8.0\0.15.2\amazon.lambda.testtool-8.0\0.15.2\tools\net8.0\any\Blazored.Modal.dll
    LambdaNet8Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null -> D:\source\repros\LambdaNet8Test\LambdaNet8Test\src\LambdaNet8Test\bin\Debug\net8.0\LambdaNet8Test.dll
    LambdaNet8Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null -> D:\source\repros\LambdaNet8Test\LambdaNet8Test\src\LambdaNet8Test\bin\Debug\net8.0\LambdaNet8Test.dll
    Microsoft.AspNetCore.Antiforgery, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Antiforgery.dll
    Microsoft.AspNetCore.Authentication.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Authentication.Abstractions.dll
    Microsoft.AspNetCore.Authentication.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Authentication.Core.dll
    Microsoft.AspNetCore.Authorization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Authorization.dll
    Microsoft.AspNetCore.Authorization.Policy, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Authorization.Policy.dll
    Microsoft.AspNetCore.Components, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Components.dll
    Microsoft.AspNetCore.Components.Authorization, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Components.Authorization.dll
    Microsoft.AspNetCore.Components.Endpoints, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Components.Endpoints.dll
    Microsoft.AspNetCore.Components.Server, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Components.Server.dll
    Microsoft.AspNetCore.Components.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Components.Web.dll
    Microsoft.AspNetCore.Connections.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Connections.Abstractions.dll
    Microsoft.AspNetCore.Cors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Cors.dll
    Microsoft.AspNetCore.Cryptography.Internal, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Cryptography.Internal.dll
    Microsoft.AspNetCore.DataProtection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.DataProtection.dll
    Microsoft.AspNetCore.DataProtection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.DataProtection.Abstractions.dll
    Microsoft.AspNetCore.DataProtection.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.DataProtection.Extensions.dll
    Microsoft.AspNetCore.Diagnostics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Diagnostics.dll
    Microsoft.AspNetCore.Diagnostics.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Diagnostics.Abstractions.dll
    Microsoft.AspNetCore.Hosting, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Hosting.dll
    Microsoft.AspNetCore.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Hosting.Abstractions.dll
    Microsoft.AspNetCore.Hosting.Server.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll
    Microsoft.AspNetCore.Html.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Html.Abstractions.dll
    Microsoft.AspNetCore.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Http.dll
    Microsoft.AspNetCore.Http.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Http.Abstractions.dll
    Microsoft.AspNetCore.Http.Connections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Http.Connections.dll
    Microsoft.AspNetCore.Http.Connections.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Http.Connections.Common.dll
    Microsoft.AspNetCore.Http.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Http.Extensions.dll
    Microsoft.AspNetCore.Http.Features, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Http.Features.dll
    Microsoft.AspNetCore.Metadata, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Metadata.dll
    Microsoft.AspNetCore.Mvc, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.dll
    Microsoft.AspNetCore.Mvc.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.Abstractions.dll
    Microsoft.AspNetCore.Mvc.ApiExplorer, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.ApiExplorer.dll
    Microsoft.AspNetCore.Mvc.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.Core.dll
    Microsoft.AspNetCore.Mvc.Cors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.Cors.dll
    Microsoft.AspNetCore.Mvc.DataAnnotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.DataAnnotations.dll
    Microsoft.AspNetCore.Mvc.Razor, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.Razor.dll
    Microsoft.AspNetCore.Mvc.RazorPages, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.RazorPages.dll
    Microsoft.AspNetCore.Mvc.TagHelpers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.TagHelpers.dll
    Microsoft.AspNetCore.Mvc.ViewFeatures, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Mvc.ViewFeatures.dll
    Microsoft.AspNetCore.Razor, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Razor.dll
    Microsoft.AspNetCore.Razor.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Razor.Runtime.dll
    Microsoft.AspNetCore.Routing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Routing.dll
    Microsoft.AspNetCore.Routing.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Routing.Abstractions.dll
    Microsoft.AspNetCore.Server.Kestrel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Server.Kestrel.dll
    Microsoft.AspNetCore.Server.Kestrel.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Server.Kestrel.Core.dll
    Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Server.Kestrel.Transport.NamedPipes.dll
    Microsoft.AspNetCore.Server.Kestrel.Transport.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Server.Kestrel.Transport.Quic.dll
    Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll
    Microsoft.AspNetCore.SignalR, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.SignalR.dll
    Microsoft.AspNetCore.SignalR.Common, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.SignalR.Common.dll
    Microsoft.AspNetCore.SignalR.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.SignalR.Core.dll
    Microsoft.AspNetCore.SignalR.Protocols.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.SignalR.Protocols.Json.dll
    Microsoft.AspNetCore.StaticFiles, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.StaticFiles.dll
    Microsoft.AspNetCore.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.WebSockets.dll
    Microsoft.AspNetCore.WebUtilities, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.AspNetCore.WebUtilities.dll
    Microsoft.Extensions.Caching.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Caching.Abstractions.dll
    Microsoft.Extensions.Caching.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Caching.Memory.dll
    Microsoft.Extensions.Configuration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Configuration.dll
    Microsoft.Extensions.Configuration.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Configuration.Abstractions.dll
    Microsoft.Extensions.Configuration.EnvironmentVariables, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Configuration.EnvironmentVariables.dll
    Microsoft.Extensions.Configuration.FileExtensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Configuration.FileExtensions.dll
    Microsoft.Extensions.DependencyInjection, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.DependencyInjection.dll
    Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.DependencyInjection.Abstractions.dll
    Microsoft.Extensions.DependencyModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Users\ashdhin\.dotnet\tools\.store\amazon.lambda.testtool-8.0\0.15.2\amazon.lambda.testtool-8.0\0.15.2\tools\net8.0\any\Microsoft.Extensions.DependencyModel.dll
    Microsoft.Extensions.Diagnostics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Diagnostics.dll
    Microsoft.Extensions.Features, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Features.dll
    Microsoft.Extensions.FileProviders.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.FileProviders.Abstractions.dll
    Microsoft.Extensions.FileProviders.Embedded, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.FileProviders.Embedded.dll
    Microsoft.Extensions.FileProviders.Physical, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.FileProviders.Physical.dll
    Microsoft.Extensions.FileSystemGlobbing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.FileSystemGlobbing.dll
    Microsoft.Extensions.Hosting.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Hosting.Abstractions.dll
    Microsoft.Extensions.Localization.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Localization.Abstractions.dll
    Microsoft.Extensions.Logging, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Logging.dll
    Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Logging.Abstractions.dll
    Microsoft.Extensions.ObjectPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.ObjectPool.dll
    Microsoft.Extensions.Options, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Options.dll
    Microsoft.Extensions.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.Primitives.dll
    Microsoft.Extensions.WebEncoders, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Extensions.WebEncoders.dll
    Microsoft.JSInterop, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.JSInterop.dll
    Microsoft.Net.Http.Headers, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\Microsoft.Net.Http.Headers.dll
    Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\Microsoft.Win32.Primitives.dll
    Microsoft.Win32.Registry, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\Microsoft.Win32.Registry.dll
    netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\netstandard.dll
    System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.dll
    System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.Concurrent.dll
    System.Collections.NonGeneric, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.NonGeneric.dll
    System.Collections.Specialized, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.Specialized.dll
    System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.dll
    System.ComponentModel.Annotations, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.Annotations.dll
    System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.Primitives.dll
    System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.TypeConverter.dll
    System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Console.dll
    System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.DiagnosticSource.dll
    System.Diagnostics.Process, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.Process.dll
    System.Diagnostics.TraceSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.TraceSource.dll
    System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.Tracing.dll
    System.IO.Pipelines, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.10\System.IO.Pipelines.dll
    System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Linq.dll
    System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Linq.Expressions.dll
    System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Memory.dll
    System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Net.Primitives.dll
    System.Net.Quic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Net.Quic.dll
    System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Net.Security.dll
    System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Net.Sockets.dll
    System.Net.WebSockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Net.WebSockets.dll
    System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Numerics.Vectors.dll
    System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ObjectModel.dll
    System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.CoreLib.dll
    System.Private.Uri, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.Uri.dll
    System.Private.Xml, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.Xml.dll
    System.Private.Xml.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.Xml.Linq.dll
    System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Reflection.Emit.ILGeneration.dll
    System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Reflection.Emit.Lightweight.dll
    System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Reflection.Primitives.dll
    System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.dll
    System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.InteropServices.dll
    System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Intrinsics.dll
    System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Loader.dll
    System.Runtime.Numerics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Numerics.dll
    System.Security.Claims, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Security.Claims.dll
    System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Security.Cryptography.dll
    System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Text.Encoding.Extensions.dll
    System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Text.Encodings.Web.dll
    System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Text.Json.dll
    System.Text.RegularExpressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Text.RegularExpressions.dll
    System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.dll
    System.Threading.Channels, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.Channels.dll
    System.Threading.Overlapped, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.Overlapped.dll
    System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.Thread.dll
    System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.ThreadPool.dll
    System.Xml.ReaderWriter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Xml.ReaderWriter.dll
    System.Xml.XDocument, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Xml.XDocument.dll

Lambda environment execution log

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   timestamp   |                                                                                                                                  message                                                                                                                                   |
|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1730831919469 | INIT_START Runtime Version: dotnet:8.v26 Runtime Version ARN: arn:aws:lambda:us-east-2::runtime:44bcd21a5019cdb2a069cc3811f2c01b6c70a947718d9e03acc6030b6f454805                                                                                                           |
| 1730831919721 | START RequestId: 0080588b-d212-45ec-aca4-077f13b78574 Version: $LATEST                                                                                                                                                                                                     |
| 1730831919876 | 2024-11-05T18:38:39.857Z 0080588b-d212-45ec-aca4-077f13b78574 info test                                                                                                                                                                                                    |
| 1730831919877 | 2024-11-05T18:38:39.876Z 0080588b-d212-45ec-aca4-077f13b78574 info True                                                                                                                                                                                                    |
| 1730831919895 | 2024-11-05T18:38:39.895Z 0080588b-d212-45ec-aca4-077f13b78574 info LambdaNet8Test.S3Bucket                                                                                                                                                                                 |
| 1730831919895 | 2024-11-05T18:38:39.895Z 0080588b-d212-45ec-aca4-077f13b78574 info LambdaNet8Test.S3Bucket                                                                                                                                                                                 |
| 1730831919895 | 2024-11-05T18:38:39.895Z 0080588b-d212-45ec-aca4-077f13b78574 info True                                                                                                                                                                                                    |
| 1730831919895 | 2024-11-05T18:38:39.895Z 0080588b-d212-45ec-aca4-077f13b78574 info                                                                                                                                                                                                         |
| 1730831919895 | 2024-11-05T18:38:39.895Z 0080588b-d212-45ec-aca4-077f13b78574 info Total Assemblies in current AppDomain: 38                                                                                                                                                               |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     Amazon.Lambda.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> /var/task/Amazon.Lambda.Core.dll                                                                           |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     Amazon.Lambda.RuntimeSupport, Version=1.11.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> /var/runtime/Amazon.Lambda.RuntimeSupport.dll                                                   |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     Amazon.Lambda.Serialization.SystemTextJson, Version=0.0.0.0, Culture=neutral, PublicKeyToken=885c28607f98e604 -> /var/task/Amazon.Lambda.Serialization.SystemTextJson.dll                           |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null ->                                                                                                |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     LambdaNet8Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null -> /var/task/LambdaNet8Test.dll                                                                                               |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     Microsoft.Win32.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/Microsoft.Win32.Primitives.dll                    |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Collections.dll                                    |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Collections.Concurrent.dll              |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.ComponentModel.TypeConverter, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.ComponentModel.TypeConverter.dll  |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Console, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Console.dll                                            |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Diagnostics.DiagnosticSource, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Diagnostics.DiagnosticSource.dll  |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Diagnostics.Tracing, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Diagnostics.Tracing.dll                    |
| 1730831919899 | 2024-11-05T18:38:39.899Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Linq.dll                                                  |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Linq.Expressions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Linq.Expressions.dll                          |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Memory.dll                                              |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Net.Http, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Net.Http.dll                                          |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Net.NameResolution, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Net.NameResolution.dll                      |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Net.Primitives.dll                              |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Net.Security, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Net.Security.dll                                  |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Net.Sockets.dll                                    |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Numerics.Vectors, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Numerics.Vectors.dll                          |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.ObjectModel.dll                                    |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Private.CoreLib.dll                            |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Private.Uri, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Private.Uri.dll                                    |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Reflection.Emit.ILGeneration, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Reflection.Emit.ILGeneration.dll  |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Reflection.Emit.Lightweight, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Reflection.Emit.Lightweight.dll    |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Reflection.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Reflection.Primitives.dll                |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Runtime.dll                                            |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Runtime.InteropServices, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Runtime.InteropServices.dll            |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Runtime.Intrinsics, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Runtime.Intrinsics.dll                      |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Runtime.Loader, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Runtime.Loader.dll                              |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Security.Cryptography, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Security.Cryptography.dll                |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Text.Encoding.Extensions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Text.Encoding.Extensions.dll          |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Text.Encodings.Web, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Text.Encodings.Web.dll                      |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Text.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Text.Json.dll                                        |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Threading.dll                                        |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Threading.Thread, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Threading.Thread.dll                          |
| 1730831919900 | 2024-11-05T18:38:39.900Z 0080588b-d212-45ec-aca4-077f13b78574 info     System.Threading.ThreadPool, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -> /var/lang/bin/shared/Microsoft.NETCore.App/8.0.8/System.Threading.ThreadPool.dll                  |
| 1730831919999 | END RequestId: 0080588b-d212-45ec-aca4-077f13b78574                                                                                                                                                                                                                        |
| 1730831919999 | REPORT RequestId: 0080588b-d212-45ec-aca4-077f13b78574 Duration: 277.37 ms Billed Duration: 278 ms Memory Size: 512 MB Max Memory Used: 68 MB Init Duration: 248.91 ms                                                                                                     |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

If we look at Lambda Test tool execution log, LambdaNet8Test assembly is loaded twice. It could be the reason on why Console.WriteLine((s3BucketFails is S3Bucket).ToString()); is returning inconsistent result as compared to actual Lambda environment.