【问题标题】:Unable to load DLL 'SqlServerSpatial140.dll': The specified module could not be found无法加载 DLL 'SqlServerSpatial140.dll':找不到指定的模块
【发布时间】:2017-07-28 01:12:42
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: .net sql-server dll geospatial


    【解决方案1】:

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

    \SqlServerTypes
       |_x64
       |_x86
    

    其中应包含适当的 dll。它还可以自动设置为如果较新则复制

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

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

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

    【讨论】:

    • 我似乎找不到 SqlServerTypes 类。
    • 我也是。找不到 SqlServerTypes
    • 你们能确认文件是否存在于解决方案中吗?在构建/打包之前?打包并复制到网络服务器之后?什么版本的.NET等
    • 在安装 Microsoft.SQLServer.Types nuget 包后,msvcr120.dll 和 SqlServerSpatial140.dll 文件已添加到解决方案中,但未添加到源代码管理中,这就是为什么我们在检查 TFS 后遇到类似问题的原因(或并非如此)。在构建服务器上构建之前,请确保将这些 dll 签入到源代码管理中。
    • 我们的文件被 git 注意到没有问题,因此,我们在从 nuget 安装后将它们提交到我们的 git 存储库。
    【解决方案2】:

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

    【讨论】:

    • 1) 此选项不适用于 NuGet 包 2) 部署到服务器时会发生什么?
    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      我遇到了这个问题,但我找到了解决方案。我有一些 System.Data.Entity.Spatial.DbGeometry 类型的新实体,当我运行 Add-Migration 命令时,我不断收到 System.DllNotFoundException: Unable to load 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

      【讨论】:

        【解决方案5】:

        我的问题与 git 有关:一个新的解决方案克隆(保留在 TFS 上)似乎被破坏了,尽管我的开发人员同事没有问题。就我而言,“重置”起到了作用:

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

        【讨论】:

          【解决方案6】:

          我通过在包管理器控制台中发出以下命令来解决此问题:

          Update-Package -Reinstall Microsoft.SqlServer.Types
          

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

          【讨论】:

            【解决方案7】:

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

            C:\Users.nuget\packages\microsoft.sqlserver.types\14.0.1016.290\nativeBinaries\x64

            【讨论】:

              【解决方案8】:

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

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

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

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

              【讨论】:

                【解决方案9】:

                最后通过以下操作解决了这个问题。

                1. 已卸载 SqlServer.Types Nuget 包

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

                3. 验证您是否创建了 SqlServerTypes 文件夹,并验证您的 dll 中是否包含 x64/x86,如果未加载,请右键单击,单击 git,然后单击添加

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

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

                #if 调试

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

                #endif

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-01-10
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多