Iis asp.net网站上32位dll的问题

Iis asp.net网站上32位dll的问题,iis,dll,visual-studio-2015,x86,Iis,Dll,Visual Studio 2015,X86,使用32位dll的asp.net网站(运行VS2015)出现问题 基本上,网站的一部分需要运行SqlServerSpatial。这显然来自Microsoft.SqlServer.Types。在我到达作业之前,所有这些都已从NuGet安装,并且看起来引用正确 但是,我相信这是一个32位dll。在尝试执行需要它的操作时,我们得到以下错误: System.DllNotFoundException未由用户代码处理 HResult=-2146233052 Message=无法加载DLL“SqlServer

使用32位dll的asp.net网站(运行VS2015)出现问题

基本上,网站的一部分需要运行SqlServerSpatial。这显然来自Microsoft.SqlServer.Types。在我到达作业之前,所有这些都已从NuGet安装,并且看起来引用正确


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

System.DllNotFoundException未由用户代码处理

HResult=-2146233052

Message=无法加载DLL“SqlServerSpatial.DLL”:找不到指定的模块。(来自HRESULT的异常:0x8007007E)

Source=Microsoft.SqlServer.Types

TypeName=“”

堆栈跟踪:

位于Microsoft.SqlServer.Types.GLNativeMethods.IsValid(geomarshaldatag、Boolean和result)

位于Microsoft.SqlServer.Types.GLNativeMethods.IsValid(地理数据g)

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

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

在中的MyCo.Geometry.SqlGeometryWriter.Construct(OpenGisGeometryType、GeometryType、LineString几何体)处

C:\repos\website\MyCo.Geometry\SqlGeometryWriter.cs:第37行 在MyCo.Geometry.SqlGeometryWriter.Write(线字符串几何体)中

C:\repos\website\MyCo.Geometry\SqlGeometryWriter.cs:第11行 在MyCo.Web.Modules.harvestplan.HarvestPlanModule.c\uuu中显示Class0\u0.b\uu7(对象)

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

我读过的大多数资料似乎都表明这是由于使用了32位dll,而我们使用的自由职业者开发人员告诉我更改IIS设置以启用32位模式。问题是,当我转到这个(在项目构建设置中更改平台目标)时,它当前设置为“任意CPU”。将其更改为32位会在mscorlib.dll中出现System.Exception。我能想到的唯一其他IIS是在我的机器上——当然,我在其中所做的任何更改都不会被部署

对不起,我只是觉得有些简单的事情让我很沮丧


编辑-嗯,原来之前的工作人员给我们留下了很多惊喜,许多不同版本的SqlServerSpatial和Microsoft.SqlServer.Types潜伏在代码周围,需要纠正。我真的不能说答案是什么,但是有一些建议可能会对未来的人们有所帮助,所以请大家投票

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


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

很好,但不是很好。除非我遗漏了什么(可能是)。已找到适当的应用程序池,将其设置为32位,停止它,再次启动它,然后运行。仍然抛出相同的“无法加载dll SqlServerSpatial.dll”错误。似乎完全一样。“我相信这是一个32位dll”你确定吗?或者DLL根本不存在。这两种情况都会导致相同的错误。相关:。是-它在那里,检查解决方案(已添加到解决方案),检查文件是否存在。我建议您使用其中一种工具来诊断DLL绑定。您可以确定正在查找哪种类型的SqlServerSpatial.DLL,以及是否在特定目录中找到它。如果找到的DLL确实是32位的,但进程是64位的,那么显然无法加载它。类似地,如果它是64位的,但进程是32位的(WoW64),则无法加载它。您可以选择以下工具之一:sxstrace.exe(可用于任何DLL)、fuslogvw.exe(仅可用于.NET DLL,SqlServerSpatial是),或Process Monitor.exe。给定SxsTrace一个go,但输出文件(已解析)为空。很快就会有更多的。