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

时间:2018-08-22 00:00:04

标签: iis dll visual-studio-2015 x86

使用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潜伏在需要整理的代码周围。不能真正说出答案是什么,但是有一些建议可能会在将来对人们有所帮助,所以全民投票!

1 个答案:

答案 0 :(得分:1)

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

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