无法加载SqlServerSpatial.dll文件

33
我正在尝试在C# .Net项目中使用SqlServer空间CLR类型。我想使用SqlGeometry从我的数据库查询空间记录。
我已经在本地机器上使用Visual Studio 2010运行单元测试成功连接到远程SqlServer机器。一切正常。
然后,我将WCF Rest服务发布到我的本地IIS实例中,该服务访问与单元测试相同的类库以执行一些空间查询,但失败了。
我遇到了一个错误,提示:
“无法加载DLL SqlServerSpatial.dll:找不到指定的模块。”
我已经通过以下方式进行了搜索,并找到了很多答案 - 没有一个适用于我。
- 将CLR类型注册到GAC中 - 安装64位,以及稍后安装32位版本的VC++ - 尝试使用不同的Microsoft.SqlServer.Types dll版本的多种变化
目前我唯一没有做的事情是在实际的SqlServer盒子上安装任何东西。这对我来说似乎是不必要的。
在这一点上,我唯一能想到的原因是权限问题,因为它在IIS应用程序池中运行,而不是在工作单元测试的Studio内部。
请注意,在我的项目中,我从未引用过错误消息中提到的dll。该dll存在于sql框架中,但我无法将其添加到studio中,因为当我尝试时会给出一些消息。
我已经尝试了很多方法,但已经无法继续尝试。这就像90年代的dll地狱重现。

7
当然,在我发完这个帖子之后,我自己找到了答案。在IIS应用程序池中,我必须将“启用32位应用程序”更改为True。 - VBAHole
2
我遇到了同样的问题,并按照你所说的将“启用32位应用程序”设置为true来解决了。 - Ricky
1
或者安装 x86(32 位)版本的 CLR 类型 DLL。 - jao
1
来自未来的我发现,如果你在64位的IIS环境中运行应用程序池,需要将其设置为允许32位应用程序。我现在正在重写一个项目,但无法加载该程序集以使开发站点正常工作。这就是问题所在,一旦设置正确,应用程序就可以正常启动了。我尝试了所有解决方案,但都没有成功。 - Tommy
1
刚刚我也遇到了同样的问题,但没有明显的原因 - 它一直在工作,然后突然停止了。将应用程序池设置更改为允许32位应用程序即可解决问题。谢谢! - MK_Dev
从C:\ Program Files(x86)\ Microsoft SQL Server \ 100 \ SDK \ Assemblies导入Microsoft.SqlServer.Types.dll对我解决了这个问题。 - EvilInside
11个回答

0

这是导致我的问题的原因:

在我的项目中有一个名为SQLServerTypes的文件夹,当我查看文件夹时发现实际上缺少了.dll文件。因此,下载.dll文件并将其粘贴到SQLServerTypes文件夹中解决了我的问题。

当我尝试构建应用程序时,出现了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接