首页 > 解决方案 > asp.net 网站上的 32 位 dll 问题

问题描述

使用 32 位 dll 的 asp.net 网站(运行 VS2015)遇到问题。

基本上,网站的一部分需要运行SqlServerSpatial。这显然来自 Microsoft.SqlServer.Types。在我开始工作之前,所有内容都已从 NuGet 安装,并且显示正确。

但是,我相信这是一个 32 位的 dll。在尝试执行需要它的操作时,我们收到此错误:

System.DllNotFoundException 未被用户代码处理

H结果=-2146233052

消息=无法加载 DLL 'SqlServerSpatial.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

源=Microsoft.SqlServer.Types

类型名称=""

堆栈跟踪:

在 Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoMarshalData g, Boolean& 结果)

在 Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoData g)

在 Microsoft.SqlServer.Types.SqlGeometry.IsValidExpensive()

在 Microsoft.SqlServer.Types.SqlGeometryBuilder.get_ConstructedGeometry()

在 MyCo.Geometry.SqlGeometryWriter.Construct(OpenGisGeometryType geomType, LineString geometry) 中

C:\repos\website\MyCo.Geometry\SqlGeometryWriter.cs:第 37 行在 MyCo.Geometry.SqlGeometryWriter.Write(LineString geometry)

C:\repos\website\MyCo.Geometry\SqlGeometryWriter.cs:第 11 行在 MyCo.Web.Modules.harvestplan.HarvestPlanModule.<>c__DisplayClass0_0.<.ctor>b__7(Object _) in

C:\repos\website\MyCo.Web\Modules\harvestplan\HarvestplanModule.cs:Nancy.Routing.DefaultRouteInvoker.Invoke 的第 164 行(路由路由,DynamicDictionary 参数,NancyContext 上下文)在 Nancy.Routing.DefaultRequestDispatcher.Dispatch(NancyContext 上下文) 内部异常:

我读过的大多数东西似乎表明这归结为使用 32 位 dll,而我们使用的自由开发者告诉我更改我的 IIS 设置以启用 32 位模式。麻烦的是,当我进入这个(在项目构建设置中更改平台目标)时,它当前设置为“任何 CPU”。将其更改为 32 位会在 mscorlib.dll 中产生 System.Exception。只有我能想到的其他 IIS 在我的机器上——当然我在其中所做的任何更改都不会被部署。

对不起 - 只是让我感到很沮丧,应该很简单的事情却让我望而却步。

编辑 - 好吧,原来以前的工作人员给我们留下了很多不错的小惊喜,许多不同版本的 SqlServerSpatial 和 Microsoft.SqlServer.Types 潜伏在需要理顺的代码周围。真的不能说什么是答案,但有一些建议可能会在未来帮助人们,所以大家都赞成!

标签: iisdllvisual-studio-2015x86

解决方案


要在 32 位模式下运行 IIS 应用程序,您无需更改 Visual Studio 中的平台目标,任何 CPU 都可以。您需要将要启动的托管进程设置为 32 位。

这是在 IIS 中作为应用程序映射到的应用程序池上的设置完成的。在应用程序池上设置“启用 32 位应用程序”设置,该池中的应用程序将为 32 位。


推荐阅读