.NET Core 3.1 - 组件的依赖项解析失败 - AWS Mock Lambda 测试工具

.NET Core 3.1 - Dependency resolution failed for component - AWS Mock Lambda Test Tools

我创建了一个新的 AWS Lambda .NET Core 3.1 项目,然后 运行 它使用 AWS Lambda 测试工具,然后我按预期获得了这个页面:

但是,如果我安装这些软件包之一:

Microsoft.EntityFrameworkCore.SqlServer

Microsoft.Data.SqlClient

当我 运行 时,出现此错误并且无法打开测试页面:

AWS .NET Core 3.1 Mock Lambda Test Tool (0.10.0)
Unknown error occurred causing process exit: Dependency resolution failed for component C:\Users\siri\repos\bolao-futebol\website-core\AWSLambda1\bin\Debug\netcoreapp3.1\AWSLambda1.dll with error code -2147450740. Detailed error: Error:
An assembly specified in the application dependencies manifest (AWSLambda1.deps.json) was not found:
package: 'runtime.win-x64.runtime.native.System.Data.SqlClient.sni', version: '4.4.0'
path: 'runtimes/win-x64/native/sni.dll'

at System.Runtime.Loader.AssemblyDependencyResolver..ctor(String componentAssemblyPath)
at Amazon.Lambda.TestTool.Runtime.LambdaAssemblyLoadContext..ctor(String lambdaPath) in C:\codebuild\tmp\output\src142363207\src\Tools\LambdaTestTool\src\Amazon.Lambda.TestTool\Runtime\LambdaAssemblyLoadContext.cs:line 28
at Amazon.Lambda.TestTool.Runtime.LocalLambdaRuntime.Initialize(String directory, IAWSService awsService) in C:\codebuild\tmp\output\src142363207\src\Tools\LambdaTestTool\src\Amazon.Lambda.TestTool\Runtime\LocalLambdaRuntime.cs:line 71
at Amazon.Lambda.TestTool.Runtime.LocalLambdaRuntime.Initialize(String directory) in C:\codebuild\tmp\output\src142363207\src\Tools\LambdaTestTool\src\Amazon.Lambda.TestTool\Runtime\LocalLambdaRuntime.cs:line 46
at Amazon.Lambda.TestTool.TestToolStartup.Startup(String productName, Action`2 uiStartup, String[] args, RunConfiguration runConfiguration) in C:\codebuild\tmp\output\src142363207\src\Tools\LambdaTestTool\src\Amazon.Lambda.TestTool\TestToolStartup.cs:line 77

我有一个包含此包的 .NET Core 2.1 Lambda 项目,它运行良好,仅在 .NET Core 3.1 中失败。

下面是我的 .csproj,以防有人想尝试一下。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <AWSProjectType>Lambda</AWSProjectType>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="1.0.0" />
    <PackageReference Include="Amazon.Lambda.SQSEvents" Version="1.1.0" />
    <PackageReference Include="Amazon.Lambda.AspNetCoreServer" Version="5.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" />
  </ItemGroup>
</Project>

部署在 AWS Lambda 上运行良好,它只是失败了 运行使用 Mock 工具本地化它。

删除 Microsoft.EntityFrameworkCore.SqlServer 使其再次工作。


This was also posted in github a while ago, I'm hoping someone else ran into this and has a fix.

你能为我做实验并在你的 csproj 文件中添加值为 true 的 属性 CopyLocalLockFileAssemblies 看看这是否会改变你的行为?

这是一个完整的 csproj 文件示例。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <AWSProjectType>Lambda</AWSProjectType>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Amazon.Lambda.Core" Version="1.1.0" />
    <PackageReference Include="Amazon.Lambda.Serialization.SystemTextJson" Version="1.0.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.8.1" />
  </ItemGroup>
</Project>

我在尝试使用 Terraform 将我的 AWS lambda 函数部署到 AWS 时遇到了同样的问题。

将这个 属性 添加到我的 lambda 函数 .csproj 文件中解决了这个问题。它允许将插件所需的所有 nuget 包依赖项复制到输出目录 -

<PropertyGroup>
  <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>

我有同样的问题,但在我的情况下,我安装了该工具,但不知为何它坏了,所以我必须卸载它,删除文件 "C:\Users\{USERNAME}\.dotnet\tools\dotnet-lambda-test-tool-3.1.exe"

然后我可以重新安装它运行 "dotnet tool install -g Amazon.Lambda.TestTool-3.1"