我正在构建一个 C# AWS Lambda 包。如何正确包含 System.Data.SqlClient.dll?

I'm building a C# AWS Lambda package. How do I properly include System.Data.SqlClient.dll?

我正在尝试使用 System.Data.SqlClient.dll 使用 .NET Core CLI 构建 C# AWS Lambda 程序包。

在我的 C# Lambda 函数中,我正在尝试连接到外部 SQL 服务器实例。在这样做的过程中,我的代码中有 'using System.Data.SqlClient' 语句,并在其中使用了一些 类。

AWS 提供了一些使用 'dotnet restore' 和 'dotnet publish' 构建程序包的示例。经过一些工作后,这些可以完美地用于我的项目。 运行发布后,发布目录结构有如下目录:

*\bin\Debug\netcoreapp1.0\publish\runtimes*

包含目录 'unix'、'win'、'win7-x64' 和 'win7-x86'.

在这些目录的更深处,我发现里面有模块'System.Data.SqlClient.dll',例如:

\bin\Debug\netcoreapp1.0\publish\runtimes\unix\lib\netstandard1.3 \bin\Debug\netcoreapp1.0\publish\runtimes\win\lib\netstandard1.3

问题是 AWS Lambda 似乎无法在此目录结构中找到模块。尝试测试代码时出现以下错误:

"errorMessage": "Could not load file or assembly 'System.Data.SqlClient, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The system cannot find the file specified.",

我没有找到任何关于此问题的参考资料,但假设我需要修改目录结构以帮助 AWS 找到正确的文件。我想这意味着选择正确的运行时模块。

我走在正确的轨道上吗?有没有人有更好的理解和一些指示? C# Lambda 函数太新了,我发现很难找到有关它的更多信息。

提前致谢!

我遇到了与 System.Data.SqlClient.dll 相同的问题。不知道为什么,但它有时不会在构建后复制到输出目录。您可以将此 dll 作为文件添加到项目中,并将 copy to output 属性 设置为 true.

我建议使用与 dotnet CLI 集成的 Amazon.Lambda.Tools 包来执行打包。基本上,您将 NuGet 包添加为工具并执行:

dotnet lambda package

还有其他命令,您可以通过执行

来发现
dotnet lambda help

package 命令有助于解决我们仅使用 dotnet publish 命令时发现的一些问题。例如,对于 System.Data.SqlClient.

的情况,package 命令会进行一些额外的文件复制

有关它的更多信息,请查看 GitHub 存储库 https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.Tools