"sni.dll" 使用 Azure C# 使用 System.Data.SqlClient 时未找到
"sni.dll" not found while using System.Data.SqlClient using Azure C#
我正在尝试通过 Azure Function App 从我的 sql 服务器 运行 进行 SELECT 查询,以便稍后处理从中提取的数据。我是 Azure 的新手,所以我可能会遗漏一些东西。我的运行时版本是~3。这是一个 C# HTTP 触发器函数。
我的代码完全基于这篇博文https://randypaulo.com/2018/12/19/querying-azure-sql-database-using-azure-functions-2-0-to-return-json-data/
这是它中断的部分,在 conn.Open();
try
{
var str = Environment.GetEnvironmentVariable("sqldb_connection");
using(SqlConnection conn =new SqlConnection(str))
{
using(SqlCommand cmd =new SqlCommand())
{
SqlDataReader dataReader;
cmd.CommandText = "SELECT TOP 10 ID FROM CATALOG";
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
dataReader = cmd.ExecuteReader();
var r = Serialize(dataReader);
json = JsonConvert.SerializeObject(r, Formatting.Indented);
}
}
}
函数编译成功,大约有 10 多个警告,如下所示。
2021-02-01T21:54:58.159 [Warning] warning CS1701: Assuming assembly reference 'System.Data.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' used by 'System.Data.SqlClient' matches identity 'System.Data.Common, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' of 'System.Data.Common', you may need to supply runtime policy
但是,当涉及到实际 运行 查询时,在 conn.Open();线。我收到一条很长的错误消息。但它说“无法加载 DLL 'sni.dll' 或其依赖项之一:”
2021-02-01T21:57:29.802 [Information] The type initializer for 'System.Data.SqlClient.TdsParser' threw an exception.
2021-02-01T21:57:29.803 [Information] System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.TdsParser' threw an exception.---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SNILoadHandle' threw an exception.---> System.DllNotFoundException: Unable to load DLL 'sni.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)at System.Data.SqlClient.SNINativeMethodWrapper.SNIInitialize(IntPtr pmo)at System.Data.SqlClient.SNILoadHandle..ctor()at System.Data.SqlClient.SNILoadHandle..cctor()--- End of inner exception stack trace
我运行正在考虑一些限制,所以我要列出它们:
- 无法使用 Visual Studio/Visual Studio 代码。
- 只能在门户网站上开发
- 无法切换到运行时间~2
- 无法创建新资源
这是我到目前为止尝试过的方法
- 改用 Microsoft.Data.SqlClient > 我无法安装软件包。 (Package Reference安装成功,编译时显示缺失)
- 创建了一个 function.proj 文件并列出了包参考 > 它 运行 并恢复了包,但我的 run.csx 似乎没有使用它们。
- 使用 dotnet 添加包删除和添加包 System.Data.SqlClient
什么有效:
- 连接字符串 > 我在控制台中使用 sqlcmd 成功 运行 查询。
我的问题:
有没有办法将 sni.dll 从 \shared\Microsoft.AspNetCore.App.2.14 文件夹复制到 \shared\Microsoft.AspNetCore. App.1.11文件夹? (通过控制台没有成功,forbidden)
如何通过 Azure 门户 reference/install 自定义或特定库? (如#r“Newtonsoft.Json”或#load“file.csx”)
我是否需要提及我在 run.csx 文件中创建的 function.proj 文件才能正常工作?怎么样?
我手动将应用程序设置 "FUNCTION_EXTENSION_VERSION" 切换为 2 而不是 3。将函数运行时版本设置更改为 ~2.
现在功能正常运行了!
我正在尝试通过 Azure Function App 从我的 sql 服务器 运行 进行 SELECT 查询,以便稍后处理从中提取的数据。我是 Azure 的新手,所以我可能会遗漏一些东西。我的运行时版本是~3。这是一个 C# HTTP 触发器函数。
我的代码完全基于这篇博文https://randypaulo.com/2018/12/19/querying-azure-sql-database-using-azure-functions-2-0-to-return-json-data/
这是它中断的部分,在 conn.Open();
try
{
var str = Environment.GetEnvironmentVariable("sqldb_connection");
using(SqlConnection conn =new SqlConnection(str))
{
using(SqlCommand cmd =new SqlCommand())
{
SqlDataReader dataReader;
cmd.CommandText = "SELECT TOP 10 ID FROM CATALOG";
cmd.CommandType = CommandType.Text;
cmd.Connection = conn;
conn.Open();
dataReader = cmd.ExecuteReader();
var r = Serialize(dataReader);
json = JsonConvert.SerializeObject(r, Formatting.Indented);
}
}
}
函数编译成功,大约有 10 多个警告,如下所示。
2021-02-01T21:54:58.159 [Warning] warning CS1701: Assuming assembly reference 'System.Data.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' used by 'System.Data.SqlClient' matches identity 'System.Data.Common, Version=4.2.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' of 'System.Data.Common', you may need to supply runtime policy
但是,当涉及到实际 运行 查询时,在 conn.Open();线。我收到一条很长的错误消息。但它说“无法加载 DLL 'sni.dll' 或其依赖项之一:”
2021-02-01T21:57:29.802 [Information] The type initializer for 'System.Data.SqlClient.TdsParser' threw an exception.
2021-02-01T21:57:29.803 [Information] System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.TdsParser' threw an exception.---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SNILoadHandle' threw an exception.---> System.DllNotFoundException: Unable to load DLL 'sni.dll' or one of its dependencies: The specified module could not be found. (0x8007007E)at System.Data.SqlClient.SNINativeMethodWrapper.SNIInitialize(IntPtr pmo)at System.Data.SqlClient.SNILoadHandle..ctor()at System.Data.SqlClient.SNILoadHandle..cctor()--- End of inner exception stack trace
我运行正在考虑一些限制,所以我要列出它们:
- 无法使用 Visual Studio/Visual Studio 代码。
- 只能在门户网站上开发
- 无法切换到运行时间~2
- 无法创建新资源
这是我到目前为止尝试过的方法
- 改用 Microsoft.Data.SqlClient > 我无法安装软件包。 (Package Reference安装成功,编译时显示缺失)
- 创建了一个 function.proj 文件并列出了包参考 > 它 运行 并恢复了包,但我的 run.csx 似乎没有使用它们。
- 使用 dotnet 添加包删除和添加包 System.Data.SqlClient
什么有效:
- 连接字符串 > 我在控制台中使用 sqlcmd 成功 运行 查询。
我的问题:
有没有办法将 sni.dll 从 \shared\Microsoft.AspNetCore.App.2.14 文件夹复制到 \shared\Microsoft.AspNetCore. App.1.11文件夹? (通过控制台没有成功,forbidden)
如何通过 Azure 门户 reference/install 自定义或特定库? (如#r“Newtonsoft.Json”或#load“file.csx”)
我是否需要提及我在 run.csx 文件中创建的 function.proj 文件才能正常工作?怎么样?
我手动将应用程序设置 "FUNCTION_EXTENSION_VERSION" 切换为 2 而不是 3。将函数运行时版本设置更改为 ~2.
现在功能正常运行了!