无法加载 DLL 'SqlServerSpatial140.dll': 找不到指定的模块

Unable to load DLL 'SqlServerSpatial140.dll': The specified module could not be found

这对我来说是全新的,所以请多多包涵...

我正在做一个 Visual Studio 项目;这是一个 returns 一些数据的网络服务。

我刚刚尝试在我的本地计算机 (IIS) 上对 Web 服务器进行特定调用,但出现此错误:

Unable to load DLL 'SqlServerSpatial140.dll': The specified module could not be found

在任何人说之前 - 是的,显然我丢失了这个 DLL 文件。我在网上搜索过,但看不到可以从哪里下载它(我安装了 Microsoft SQL Server System CLR Types (x64) 和非 X64。我有 Microsoft System CLR Types for SQL 已安装服务器 2014 和 2016)

有谁知道如何解决这个问题?有谁知道我是否可以从某个地方下载这个文件?

C:\Users\<User>\.nuget\packages\Microsoft.SqlServer.Types.0.314.76\nativeBinaries\x86 中的 dll 复制到您的项目中。右键单击该文件,然后单击属性。将 "Copy To Output Directory" 设置为 "Copy Always"。

安装 Microsoft.SqlServer.Types nuget 包时,应在根目录中创建一个新文件夹:

\SqlServerTypes
   |_x64
   |_x86

其中应包含适当的 dll。它还会自动设置为 copy if newer.

然后,确保您的应用加载适当的程序集:

  • 对于 ASP.NET Web 应用程序:SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
  • 对于桌面应用程序/其他:SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

虽然不确定这是否适用于 .NET Core。

我的问题与 git 相关:一个新的解决方案克隆(保存在 TFS 上)似乎已损坏,但我的开发人员同事没有遇到任何问题。在我的例子中 "resetting" 成功了:

  • 卸载 nuget Microsoft.SqlServer.Types 14.0.314.76
  • 清除/重建项目
  • 安装 nuget Microsoft.SqlServer.Types 14.0.314.76
  • 清除/重建项目

我有一个类似的问题,我的文件来自子文件夹 \SqlServerTypes(按照 @Pure.Krome 的描述安装),其中 missing/discarded 由我在 NuGet.Config 中的设置。我不得不卸载并重新安装 Nuget 包 Microsoft.SqlServer.Types

对于那些看到一组非常相似的错误的人,例如:

Could not copy the file "…\SqlServerTypes\x64\SqlServerSpatial140.dll" because it was not found

如果您通过 NuGet 安装 Microsoft.SqlServer.Types 并且您的应用程序在本地运行,但在通过 Azure DevOps 构建时遇到错误,那么您只需将 dll 添加到源代码管理。正如@Pure.Krome 所指出的,这些 dll 存在于本地:

但是,请注意默认情况下这些 dll 将被忽略(左侧的红色图标)。右键单击忽略的 dll 和 select Add Ignored File to Source Control…,然后提交并推送您的更改,然后将新构建加入队列!注意:您的解决方案可能包含多个项目,每个项目都可能有自己的 SqlServerTypes 文件夹。

非常感谢。它对我很有效。我在这上面浪费了很多时间,但你救了我! :)

我已将此添加到我的 Global.asax.cs =>

 `protected void Application_Start()
    {
     SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));`

然后在我的解决方案资源管理器中 => 切换显示所有文件 并将忽略的文件添加到源代码管理...如 Pure.Krone 所述。

我通过在程序包管理器控制台中发出以下命令解决了这个问题:

Update-Package -Reinstall Microsoft.SqlServer.Types

输出包括一些看起来很可怕的警告和错误,但最后它表明包已成功安装。构建错误消失了。

我遇到了这个问题,但我找到了解决方案。我有一些 System.Data.Entity.Spatial.DbGeometry 类型的新实体,当我 运行 添加迁移命令时,我一直收到 System.DllNotFoundException: 无法加载 DLL 'SqlServerSpatial140.dll'。我已经从 nuget 安装了 SqlServerTypes 库,它在我的解决方案中放置了一个文件夹,如 @mattavatar 的 post 所示,但我仍然遇到异常。

为我修复的是将这些 DLL 复制到 C:\Windows\SysWOW64。这取决于您机器的体系结构和您的 IIS 配置。对于我,我在 64 位机器上 运行ning,但 IIS 配置为 运行 32 位应用程序。在这种情况下,我必须将 32 位 dll 复制到 C:\Windows\SysWOW64。如果您运行正在使用 32 位机器,您需要将 32 位 dll 复制到 C:\Windows\System32。如果您在需要 32 位 dll 的地方复制 64 位 dll,并且您 运行 添加迁移命令,您将获得 System.BadImageFormatException.

希望这对某人有所帮助。我花了太长时间试图弄清楚这一点。感谢@pflous 的评论

对我有用的是转到下面的这个文件位置并将 SqlServerSpatial240.dll 复制到我的项目 bin 文件夹。

C:\Users<用户>.nuget\packages\microsoft.sqlserver.types.0.1016.290\nativeBinaries\x64

通过执行以下操作最终解决了该问题。

  1. 卸载了 SqlServer.Types Nuget 包

  2. 重新安装了 SqleErver.Types Nuget 包(这样做主要是为了确保 dll 正确上传)

  3. 确认您已经创建了 SqlServerTypes 文件夹,并确认您有 x64/x86 并且里面有您的 dll,如果它们没有加载,右键单击,单击 git,然后单击添加

  4. 确认您在该文件夹中有一个 Loader.cs,打开它并确认它引用了正确的 dll。

  5. 最后,这一步为我解决了问题,转到您的 Global.asax.cs 文件。在里面,Application_Start() 添加这一行

#if DEBUG

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~"));

#endif