Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在RPi 3(控制台应用程序)上运行的Windows IoT上的实体框架核心_C#_.net_Entity Framework Core_Windowsiot_Windows Iot Core 10 - Fatal编程技术网

C# 在RPi 3(控制台应用程序)上运行的Windows IoT上的实体框架核心

C# 在RPi 3(控制台应用程序)上运行的Windows IoT上的实体框架核心,c#,.net,entity-framework-core,windowsiot,windows-iot-core-10,C#,.net,Entity Framework Core,Windowsiot,Windows Iot Core 10,我成功地将.NET Core控制台应用程序部署到运行在Raspberry Pi 3上的Windows IoT上 应用程序从Web服务提取数据并将其存储在数据库中。我使用了实体框架核心 当我通过远程powershell启动已部署的控制台应用程序(.exe)时,除了访问Azure上运行的数据库外,其他一切都正常工作。当应用程序尝试从数据库读取时,会引发以下异常: System.TypeInitializationException: The type initializer for 'System.

我成功地将.NET Core控制台应用程序部署到运行在Raspberry Pi 3上的Windows IoT上

应用程序从Web服务提取数据并将其存储在数据库中。我使用了实体框架核心

当我通过远程powershell启动已部署的控制台应用程序(.exe)时,除了访问Azure上运行的数据库外,其他一切都正常工作。当应用程序尝试从数据库读取时,会引发以下异常:

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': The specified module could not be found. (Exception from HRESULT: 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 ---
   at System.Data.SqlClient.TdsParser..cctor()
   --- End of inner exception stack trace ---
   at System.Data.SqlClient.TdsParser..ctor(Boolean MARS, Boolean fAsynchronous)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, TimeoutTimer timeout)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   at System.Data.SqlClient.SqlConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open()
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.BufferlessMoveNext(Boolean buffer)
   at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](Func`2 operation, Func`2 verifySucceeded, TState state)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IExecutionStrategy strategy, Func`2 operation, TState state)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.MoveNext()
   at Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.<_ShapedQuery>d__3`1.MoveNext()
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Boolean& found)
   at System.Linq.Enumerable.First[TSource](IEnumerable`1 source)
   at lambda_method(Closure , QueryContext )
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass20_0`1.<CompileQueryCore>b__0(QueryContext qc)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](Expression query)
   at Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](Expression expression)
   at System.Linq.Queryable.First[TSource](IQueryable`1 source)
System.TypeInitializationException:“System.Data.SqlClient.TdsParser”的类型初始值设定项引发异常。-->System.TypeInitializationException:“System.Data.SqlClient.SNILoadHandle”的类型初始值设定项引发异常。-->System.DllNotFoundException:无法加载DLL“sni.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E)
位于System.Data.SqlClient.SNINativeMethodWrapper.SNIInitialize(IntPtr pmo)
位于System.Data.SqlClient.SNILoadHandle..ctor()处
位于System.Data.SqlClient.SNILoadHandle..cctor()处
---内部异常堆栈跟踪的结束---
在System.Data.SqlClient.TdsParser..cctor()中
---内部异常堆栈跟踪的结束---
位于System.Data.SqlClient.TdsParser..ctor(布尔MARS,布尔fAsynchronous)
位于System.Data.SqlClient.SqlInternalConnectionDS.LoginOfAliver(ServerInfo ServerInfo、布尔重定向EduceInstance、SqlConnectionString connectionOptions、TimeoutTimer timeout)
位于System.Data.SqlClient.SqlInternalConnectionDS.OpenLoginList(超时超时、SqlConnectionString连接选项、布尔重定向EduceResistance)
位于System.Data.SqlClient.SqlInternalConnectionDS..ctor(DbConnectionPoolIdentity,SqlConnectionString connectionOptions,Object providerInfo,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData,Boolean applyTransientFaultHandling)
位于System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions、DbConnectionPoolKey、Object poolGroupProviderInfo、DbConnectionPool、DBConnectionOwningConnection、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池、DbConnectionOwningObject、DbConnectionOptions选项、DbConnectionPoolKey池键、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection-owningObject、DbConnectionOptions-userOptions、DbConnectionInternal-oldConnection)
位于System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject、DbConnectionOptions userOptions、DbConnectionInternal oldConnection)
位于System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、UInt32 waitForMultipleObjectsTimeout、Boolean allowCreate、Boolean OnlyOnEckConnection、DbConnectionOptions userOptions、DbConnectionInternal和connection)
位于System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal和connection)
位于System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection、TaskCompletionSource`1重试、DbConnectionOptions用户选项、DbConnectionInternal oldConnection、DbConnectionInternal&connection)
位于System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource`1重试,DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource`1重试、DbConnectionOptions用户选项)
位于System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1重试)
在System.Data.SqlClient.SqlConnection.Open()处
在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open()中
位于Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.BufferlessMovenText(布尔缓冲区)
在Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](Func`2操作,Func`2验证成功,TState)
在Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.Execute[TState,TResult](IEExecutionStrategy策略,Func`2操作,TState状态)
在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.MoveNext()中
在Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.d_u3`1.MoveNext()中
在System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source,Boolean&found)
在System.Linq.Enumerable.First[TSource](IEnumerable`1 source)处
at lambda_方法(闭包、查询上下文)
在Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.c__显示类20_0`1.b__0(QueryContext qc)
在Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.Execute[TResult](表达式查询)中
在Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryProvider.Execute[TResult](表达式)中
在System.Linq.Queryable.First[TSource](IQueryable`1 source)处
应用程序文件夹中没有“sni.dll”

使用“win8 arm”运行时部署应用程序

  • netcoreapp2.0
  • .NET Core 2.0 SDK(运行时和工具)
你知道怎么了吗

更新:


复制System.Data.SqlClient.dll(unix lib)并覆盖应用程序文件夹中的现有dll解决了此问题。请参阅下面的答案。

ARM没有本机
sni.dll
库。(见附件)

我希望能告诉您如何使用
System.Data.SqlClient
(Linux上使用的)的完全托管实现,但不幸的是,它使用的是
System.Threading.Thread
,这在UWP上不可用

[更新1]
等等,您没有使用UWP.:)试试g