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

时间:2017-03-07 17:47:33

标签: .net sql-server dll geospatial

这对我来说都是新的,所以请耐心等待......

我正在开发一个Visual Studio项目;它是一个返回一些数据的Web服务。

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

  

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

在有人说之前 - 是的,显然我错过了这个DLL文件。我在网上搜索过,看不到我从哪里下载它(我安装了Microsoft SQL Server系统CLR类型(x64)和非X64。我安装了SQL Server 2014和2016的Microsoft System CLR类型)

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

10 个答案:

答案 0 :(得分:8)

将dll从C:\Users\<User>\.nuget\packages\Microsoft.SqlServer.Types\14.0.314.76\nativeBinaries\x86复制到您的项目中。右键单击该文件,然后单击“属性”。将“复制到输出目录”设置为“始终复制”。

答案 1 :(得分:8)

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

\SqlServerTypes
   |_x64
   |_x86

应该包含适当的dll&#39。如果更新,它也会自动设置为复制。

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

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

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

答案 2 :(得分:6)

对于那些看到非常相似的错误的人,类似:

  

无法复制文件“ ... \ SqlServerTypes \ x64 \ SqlServerSpatial140.dll”   因为没有找到

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

enter image description here

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

答案 3 :(得分:1)

我的问题与git有关:尽管我的其他开发人员都没遇到问题,但新的解决方案克隆(保留在TFS上)似乎已损坏。在我的情况下,“重置”就可以了:

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

答案 4 :(得分:1)

我通过在Package Manager控制台中发出以下命令来解决此问题:

Axios

输出中包含一些看上去很可怕的警告和错误,但最后表明该软件包已成功安装。并且构建错误消失了。

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

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

  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 调试

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

#endif

答案 7 :(得分:0)

我遇到了类似的问题,我的子文件夹\SqlServerTypes中的文件(描述为@ Pure.Krome安装)在NuGet.Config中的设置丢失/丢弃了。我必须卸载并重新安装Nuget软件包Microsoft.SqlServer.Types

答案 8 :(得分:0)

非常感谢。它对我很好。我为此花了很多时间,但是你救了我! :)

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

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

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

答案 9 :(得分:0)

我遇到了这个问题,但是我找到了解决方案。我有一些具有System.Data.Entity.Spatial.DbGeometry类型的新实体,并且不断获取System.DllNotFoundException:运行Add-Migration命令时无法加载DLL'SqlServerSpatial140.dll'。我已经从nuget安装了SqlServerTypes库,该库在我的解决方案中放置了一个文件夹,例如@mattavatar的帖子所示,但是我仍然遇到异常。

对我来说,修复这些问题的是将这些DLL复制到C:\ Windows \ SysWOW64。这取决于计算机的体系结构和IIS配置。对于我来说,我在64位计算机上运行,​​但是IIS配置为运行32位应用程序。在这种情况下,我必须将32位dll复制到C:\ Windows \ SysWOW64。如果您运行的是32位计算机,则需要将32位dll复制到C:\ Windows \ System32。如果将64位dll复制到期望32位的位置,然后运行Add-Migration命令,则会得到System.BadImageFormatException。

希望这对某人有帮助。我花了太长时间试图解决这个问题。感谢@pflous的评论https://stackoverflow.com/a/39009634/6697928