iis - 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 潜伏在需要理顺的代码周围。真的不能说什么是答案,但有一些建议可能会在未来帮助人们,所以大家都赞成!
解决方案
要在 32 位模式下运行 IIS 应用程序,您无需更改 Visual Studio 中的平台目标,任何 CPU 都可以。您需要将要启动的托管进程设置为 32 位。
这是在 IIS 中作为应用程序映射到的应用程序池上的设置完成的。在应用程序池上设置“启用 32 位应用程序”设置,该池中的应用程序将为 32 位。
推荐阅读
- html - 如何使“发送电子邮件”按钮在 Boostrap 模板中起作用?
- node.js - 如何在 expressJS 中呈现输入字段的值
- visual-studio - XAML 预览不适用于带有 mvvmcross 的 Visual Studio 2017 Xamarin.Forms 应用程序
- conditional - SSRS 仅在数据存在时显示行
- java - 如何设置动态变化的 TextView 的每个单词的点击?
- ruby-on-rails - 为日期字段栏添加索引
- php - codeigniter 导航到没有 index.php 的站点
- sml - 标准 ML 中的 eqtype 是什么?
- linux - 从文件中读取日期时间并添加一秒
- android-studio - AMD Ryzen 无法启动 Android Emulator:x86 Emulation 硬件加速问题