使用32位dll的asp.net网站(运行VS2015)遇到麻烦。
基本上,网站的一部分需要运行SqlServerSpatial。这显然来自Microsoft.SqlServer.Types。在我到达作业之前,所有文件都已从NuGet安装,并正确引用了。
但是,我相信这是一个32位dll。尝试执行需要该操作的操作时,出现以下错误:
System.DllNotFoundException未通过用户代码处理
HResult = -2146233052
消息=无法加载DLL'SqlServerSpatial.dll':找不到指定的模块。 (来自HRESULT的异常:0x8007007E)
Source = Microsoft.SqlServer.Types
TypeName =“”
StackTrace:
在Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoMarshalData g,布尔值和结果)
在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几何)中的
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 _)在
中C:\ repos \ website \ MyCo.Web \ Modules \ harvestplan \ HarvestplanModule.cs:第164行 在Nancy.Routing.DefaultRouteInvoker.Invoke处(路由,DynamicDictionary参数,NancyContext上下文) 在Nancy.Routing.DefaultRequestDispatcher.Dispatch(NancyContext上下文) InnerException:
我读过的大多数内容似乎都表明这归结于使用32位dll,而我们使用的自由职业者告诉我更改IIS设置以启用32位模式。麻烦的是,当我转到该菜单(在项目构建设置中更改平台目标)时,当前将其设置为“ Any CPU”。将其更改为32位将在mscorlib.dll中提供System.Exception。我的计算机上只有我能想到的其他IIS-当然,我在其中所做的任何更改都不会部署。
对不起-感到很沮丧的是,一些本应简单的事情使我望而却步。
编辑-原来,以前的工作人员为我们留下了很多惊喜,很多不同版本的SqlServerSpatial和Microsoft.SqlServer.Types潜伏在需要整理的代码周围。不能真正说出答案是什么,但是有一些建议可能会在将来对人们有所帮助,所以全民投票!
答案 0 :(得分:1)
要以32位模式运行IIS应用程序,请不要在Visual Studio中更改平台目标,任何CPU都可以。您需要将托管进程设置为以32位启动。
这是在IIS中作为应用程序映射到的应用程序池上的设置完成的。在应用程序池上设置“启用32位应用程序”设置,该池中的应用程序将为32位。