我有一个引用
System.Data.Spatial
的 .NET MVC Web 应用程序,因此我可以在属性上使用 DbGeography
数据类型来进行某些地理定位。我正在使用带有 .NET 4.5 的 Visual Studio 2012,并且在我的开发计算机上没有完整安装 SQL Server(仅 localdb)。
该应用程序运行良好,直到我将其推送到 Azure。一旦我的应用程序点击我的
DbGeography
属性,它就会抛出此错误:
无法加载DLL“SqlServerSpatial.dll”:指定的模块可能 找不到。
还有其他人遇到过这个问题吗?
SqlServerSpatial.dll 是非托管代码。您必须在服务器上安装正确的版本(64 位)。将 DLL 添加到您的项目中。将 SqlServerSpatial110.dll 的属性设置为“复制到输出目录 = 始终复制”
您可以在这里找到详细信息
SQL 2012 也安装这个 dll,SQL 2014 则不安装!您必须在计算机上安装 SQL Server 2008 R2 的 Microsoft System CLR Types。
根据您的处理器架构勾选其中一项:
单击下一步
编辑
正如
Ian Grainger
的评论,你必须根据你的IIS安装正确的版本。显然 IIS Express 默认以 32 位模式运行。
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types"
publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
我遇到了这个问题,并且确实缺少 SqlServerSpatial110.dll
我最终按照此处的说明进行操作:
http://dllyes.com/sqlserverspatial110-dll/
基本上,您需要获得该 .dll,然后
将 SqlServerSpatial110.dll 放入 \Windows\System32(通常位于 磁盘 C) 如果您运行的是 32 位 Windows。如果您运行的是 64 位 Windows,另外将文件放置在 \Windows\SysWOW64 中。
我为此苦苦挣扎了相当长一段时间,我安装了所需的文件,但它仍然无法正常工作。
显然,该项目想要使用x86 SqlServerSpatial.dll
所以我在“工具”>“选项”>“WebProjects”>“使用 64 位 IIS”中将 IIS Express Build 更改为 x64
无需添加新的 nuget 包,只需从 microsoft 页面安装 SQLSysClrTypes 即可:http://go.microsoft.com/fwlink/?LinkID=188391&clcid=0x409 应该没问题;)
希望它对某人有帮助!
确保您的 dll(例如“sqlserverspatial110.dll”、“sqlserverspatial120.dll”、..)位于“C:\Windows\SysWOW64”路径中;
如果项目中正确引用了文件并将其添加到源代码管理中,但问题仍然存在,请尝试在出现故障的计算机上安装 Microsoft System CLR Types for SQL Server。
- 安装与中引用的 SqlServerTypes 匹配的版本 项目。
-安装与项目所使用的版本匹配的 64 位或 32 位版本。
Version | Assembly
2005 | 9.0.0.0
2008 | 10.0.0.0
2008 R2 | 10.0.0.0
2012 | 11.0.0.0
2014 | 12.0.0.0
2016 | 13.0.0.0
2017 | 14.0.0.0
2019 | 15.0.0.0
2022 | 16.0.0.0
SqlGeometry
和 SqlGeography
类型可以在 VS 项目中使用(例如
C#) 通过引用 Microsoft.SqlServer.Types.dll
.Microsoft.SqlServer.Types.dll
是一个托管库,有一些
非托管库作为先决条件,它们就像
SqlServerSpatialXXX.dll
和 msvcrXXX.dll
Microsoft.SqlServer.Types.dll
可用,但是我没有看到任何
从 2012 年起功能发生变化。有关详细的解决方案,您可能想在另一篇类似的帖子上查看我的answer。
I had the same issue in godaddy VPS with windows server 2012 r2
我通过将 EF5 更新到 EF6 解决了这个问题
在包管理器控制台中运行 EF5 到 EF lalest
Install-Package EntityFramework