无法加载 DLL 'sni.dll' - Entity Framework Core

The*_*rEB 14 c# entity-framework-core asp.net-core-mvc visual-studio-2017

在 Visual Studio 2017 上的 ASP.Net Core 应用程序中使用 Entity Framework Core 时,我间歇性地收到错误“无法加载‘sni.dll’。

奇怪的是,虽然我找到了一个临时修复方法:重新启动我的电脑。

我不知道为什么错误不断发生,我不知道变量可能是什么。任何人都可以阐明可能的原因吗?我会提供一个完整的堆栈跟踪,但自从决定在这里发帖后就没有发生过,下次发生时我一定会更新这个。我肯定知道(因为调试捕获异常)当 EF 有原因从数据库获取数据并转换为实体时会发生这种情况。

在此先感谢您的任何建议。

--EDIT 这仍在发生。设法记住捕获堆栈跟踪:

System.DllNotFoundException 发生 HResult=0x80131524 消息=无法加载 DLL 'sni.dll':指定的网络名称不再可用。(来自 HRESULT 的异常:0x80070040)Source= StackTrace:在 System.Data.SqlClient.SNINativeMethodWrapper.UnmanagedIsTokenRestricted(IntPtr token, Boolean& isRestricted) at System.Data.Win32NativeMethods.IsTokenRestrictedWrapper(IntPtr token) at System.Data.SqlClient. () 在 System.Data.ProviderBase.DbConnectionPoolGroup.GetConnectionPool(DbConnectionFactory connectionFactory) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPool(DbConnection owningObject, DbConnectionPoolGroup connectionPoolGroup) 在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 次重试,DbConnectionOptions userOptions) 在 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](Func2 操作,Func 2 verifySucceeded, TState state) at Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.<_ShapedQuery>d__31.MoveNext() 在 Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.<_Include>d__30 1.MoveNext() at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 源) 在 Microsoft.EntityFrameworkCore.Query。 Internal.QueryCompiler.<>c__DisplayClass20_0 1.<CompileQueryCore>b__0(QueryContext qc) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable1 源)

reg*_*gik 11

添加 nuget 包 System.Data.SqlClient v4.4.0 为我解决了同样的问题。该问题并非特定于实体框架。这是由于旧版本的 SqlClient 依赖于 dotnet Core 2 中不可用的 API。


小智 6

在某些情况下,此问题可能是由于 IIS 没有足够的权限来访问 %USERPROFILE%.nuget 的区域

这可以通过以下两种简单方法之一解决:

授予 IIS appPool(如 DefaultAppPool 或 FooAppPool)的权限,不仅可以访问 .Nuget 文件夹(这通常是自动完成的)。

将用于运行的 AppPool 设置为 Identity 下的“LocalSystem”,这样 appPool 将被视为具有更高的权限并且应该具有访问权限。

以下是其他用户在几年前“解决”此错误的地方的一系列参考资料:

https://github.com/Azure/app-service-announcements-discussions/issues/9
https://github.com/dotnet/cli/issues/5262
https://github.com/dotnet/corefx/issues/5252
https://github.com/dotnet/corefx/issues/30518
Run Code Online (Sandbox Code Playgroud)

所有这些都引用了 SQLClient 的版本(虽然这是相关的,但它是一个遗留问题),但是一个聪明的人@azisoft这个链接)意识到了这一点,并且非常感谢它。


jsa*_*oke 6

对于 Entity Framework Core 3.x,安装 Microsoft.Data.SqlClient Nuget 包而不是 System.Data.SqlClient。


小智 6

我在使用 EF Core 3.15 的带有 MVC5 和 WebApi 的 .NET 4.8 WebApplication 中遇到了同样的问题。

输出代码分为几个项目。我只将 EF Core 引用添加到需要访问 DB 的项目中。这会导致与你们这里遇到的问题相同的问题。

在我将 EF Core 引用也添加到启动项目后,它按预期工作。

希望这对某人有帮助。