我正在尝试使用.net core cli使用system.data.sqlclient.dll构建C#AWS lambda软件包。
在我的C#lambda函数中,我正在尝试连接到外部SQL Server实例。这样,我的代码中有"使用system.data.sqlclient"语句,并使用其中的某些类。
aws提供了一些有关使用" dotnet Restore"one_answers" dotnet Publish"来构建软件包的示例。经过一番工作,这些工作与我的项目完美无缺。运行发布后,发布目录结构具有以下目录:
* bin debug netcoreapp1.0 Publish runtimes*
包含目录'unix','win','win7-x64'和'win7-x86'。
在这些目录内部更深入的内部,我发现模块' system.data.sqlclient.dll '内部,例如:
bin debug netcoreapp1.0 prublish runtimes unix lib 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功能是如此的新功能,以至于我发现很难找到有关更多信息的难以置信。
预先感谢!
我建议使用与dotnet cli集成以执行包装的amazon.lambda.tools软件包。基本上,您将Nuget软件包添加为工具并执行:
dotnet lambda package
还有其他命令,您可以通过执行
来发现这些命令dotnet lambda help
package命令帮助我们发现的一些粗糙点仅使用 dotnet Publish 命令。例如,软件包命令为system.data.sqlclient的情况进行一些额外的文件复制。
有关它的更多信息,请查看GitHub存储库https://github.com/aws/aws-lambda-dotnet/tree/master/libraries/src/amazon.lambda.tools
我在 System.Data.SqlClient.dll
上也有同样的问题。不知道为什么,但有时不会在构建后复制到输出目录。您可以在项目中将此dll添加为文件,并将copy to output
属性设置为true
。