System.DllNotFoundException: 无法加载 DLL 'SqlServerSpatial110.dll':找不到指定的模块。

6

我正在进行一个涉及地理距离计算的项目。因此,在实体框架中使用地理数据类型,通过添加nuget包SqlServerSpatial110.dll进行该功能。

我认为我的代码是正确的。一切都在本地服务器上工作。但当我将其上传到服务器时,它显示以下错误:

System.Reflection.TargetInvocationException:已调用目标的异常。 ---> System.DllNotFoundException:无法加载DLL 'SqlServerSpatial110.dll':指定的模块无法找到。 (来自HRESULT的异常:0x8007007E)

请告诉我上传SqlServerSpatial110.dll到服务器的步骤。


你的 DLL 的 CopytoOutputDirectory 是否设置为 CopyAlways? - prasy
将“Copy Local = true”设置为true可能会为第三方.dll文件修复该问题。另一种选择是在项目中添加一个“Lib”文件夹,并将所有您知道对于所有构建和部署都必要的.dll文件放置在那里。 - MethodMan
是的,我将属性设置为Copy Local = true。但问题在服务器端。 我需要在项目中添加引用吗?有人建议创建Global.asax.cs文件。我尝试过了,但仍然出现错误。 - John Antony
3个回答

9
将Microsoft.SqlServer.Types的引用添加到Web.config应用程序中可解决此问题。
<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" />
    <bindingRedirect oldVersion="1.0.0.0-11.0.0.0" newVersion="10.0.0.0" />
  </dependentAssembly>
</assemblyBinding></runtime>

谢谢,这对我在一个旧的WinForms应用程序中使用SQLCE4非常有帮助。 - andreat

1
请检查服务器上是否安装了DLL文件:
C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Types.dll
C:\Windows\System32\SqlServerSpatial110.dll

请检查您的应用程序池。如果您正在重用旧的应用程序池,请确保您的应用程序池高级设置-->启用32位应用程序False
这解决了我在Windows 2012 Server上类似的问题。

0
如果什么都不起作用,尝试将平台目标设置为Any CPU 取消选中首选32位 选中允许不安全代码

以上解决方案对我有效。


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