【问题标题】:.NET Core 3.1 - Dependency resolution failed for component - AWS Mock Lambda Test Tools.NET Core 3.1 - 组件的依赖关系解析失败 - AWS Mock Lambda 测试工具
【发布时间】:2020-08-04 21:16:05
【问题描述】:

我创建了一个新的 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 使其再次工作。


这也是不久前在in github 上发布的,我希望其他人遇到此问题并进行修复。

【问题讨论】:

    标签: c# aws-lambda .net-core-3.1


    【解决方案1】:

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

    这是一个完整的 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>
    

    【讨论】:

    • 是的,添加CopyLocalLockFileAssemblies 有效。我的理解是this will add all nuget package DLL's to the output (bin) folder,但我仍然不清楚为什么这只是System.Data.SqlClient 而不是其他软件包的问题。
    • Amazon 自己的项目模板现在默认执行此操作,并带有注释“此属性使构建目录类似于发布目录并帮助 AWS .NET Lambda 模拟测试工具查找项目依赖项。”跨度>
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      相关资源
      最近更新 更多