2016-12-20 32 views
3

我正在尝试使用.NET Core CLI使用System.Data.SqlClient.dll构建C#AWS Lambda包。我正在构建C#AWS Lambda包。我如何正确包含System.Data.SqlClient.dll?

在我的C#Lambda函数我试图连接到外部SQL Server实例。为此,我在代码中使用了“使用System.Data.SqlClient”语句,并使用其中的一些类。

AWS提供了一些使用'dotnet restore'和'dotnet publish'来构建软件包的例子。经过一番工作,这些工作完美无缺地与我的项目。运行后发布,发布的目录结构具有以下目录:

* \ BIN \调试\ netcoreapp1.0 \发布\运行时间*

含目录'UNIX', '双赢',“WIN7-64 '和'win7-x86'

更深

这些目录里面,我找到该模块 'System.Data.SqlClient.dll' 内,如:

\ BIN \调试\ netcoreapp1.0 \发布\运行时间\ UNIX \ LIB \ netstandard1.3 \ BIN \调试\ netcoreapp1.0 \发布\运行时间\ WIN \ LIB \ netstandard1.3

的问题是,AWS拉姆达似乎无法找到此目录结构内的模块。当试图测试代码中,我得到以下错误:

"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函数非常新,我发现这很难找到更多信息。

在此先感谢!

回答

3

我会推荐使用与dotnet CLI集成的Amazon.Lambda.Tools包来执行打包。基本上你添加NuGet包的工具和执行:

dotnet lambda package 

还有其他的命令,以及你可以发现通过执行

dotnet lambda help 

包命令可以帮助一些我们已经与发现粗糙的斑点只使用dotnet发布命令。例如,对于System.Data.SqlClient的情况,package命令会进行一些额外的文件复制。

有关它检查了GitHub的仓库 https://github.com/aws/aws-lambda-dotnet/tree/master/Libraries/src/Amazon.Lambda.Tools

+0

我认为这是我错过了。看起来太棒了! – theoneandonly2

+0

@Norm Johanson任何想法是什么“额外的文件复制”是? – CamHart

+0

我在Visual Studio 2015中创建了一个新的Lambda C#,它有Amazon.Lambda.Tools,但找不到System.Data和System.Data.SqlClient。有任何想法吗? – NealWalters

0

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

+0

谢谢你的详细信息,我很欣赏的反馈。我在考虑基于操作系统的目录结构必须适用于具有操作系统特定实现的模块,并且在还原过程中,.NET Core CLI不会对操作系统进行任何假设以试图保持应用程序的可移植性? AWS不能很好地播放,但我想我明白了。 – theoneandonly2