Проблемы с 32-битной dll на сайте asp.net

Возникли проблемы с веб-сайтом asp.net (под управлением VS2015), который использует 32-разрядную dll.

По сути, одна часть веб-сайта должна запускать SqlServerSpatial. Очевидно, это происходит из Microsoft.SqlServer.Types. Все было установлено из NuGet до того, как я приступил к работе, и, похоже, ссылается правильно.

Однако я считаю, что это 32-битная dll. При попытке выполнить операцию, которая требует этого, мы получаем эту ошибку:

System.DllNotFoundException was unhandled by user code

HResult=-2146233052

Message=Unable to load DLL 'SqlServerSpatial.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

Source=Microsoft.SqlServer.Types

TypeName = ""

StackTrace:

at Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoMarshalData g, Boolean& result)

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

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

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

at MyCo.Geometry.SqlGeometryWriter.Construct(OpenGisGeometryType geomType, LineString geometry) in

C:\repos\website\MyCo.Geometry\SqlGeometryWriter.cs:line 37 at MyCo.Geometry.SqlGeometryWriter.Write(LineString geometry) in

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

C:\repos\website\MyCo.Web\Modules\harvestplan\HarvestplanModule.cs:line 164 at Nancy.Routing.DefaultRouteInvoker.Invoke(Route route, DynamicDictionary parameters, NancyContext context) at Nancy.Routing.DefaultRequestDispatcher.Dispatch(NancyContext context) InnerException:

Большинство вещей, которые я прочитал, похоже, указывают на то, что это связано с использованием 32-битной dll, а разработчик-фрилансер, который мы используем, говорит мне изменить мои настройки IIS, чтобы включить 32-битный режим. Проблема в том, что когда я перешел к этому (изменить целевую платформу в настройках сборки проекта), в настоящее время он установлен на «Любой процессор». Изменение его на 32-разрядное приводит к возникновению исключения System.Exception в mscorlib.dll. На моей машине есть только другие IIS, о которых я могу думать - конечно, любые изменения, которые я делаю в них, не будут развернуты.

Извините, я просто очень разочарован тем, что что-то простое ускользает от меня.

РЕДАКТИРОВАТЬ - ну, оказывается, предыдущий персонал оставил для нас массу приятных сюрпризов, множество различных версий SqlServerSpatial и Microsoft.SqlServer.Types, скрывающихся за кодом, который требовал исправления. Не могу сказать, что что-то было ответом, но есть несколько предложений, которые могут помочь людям в будущем, так что голосуйте за всех!

«Я считаю, что это 32-битная dll» Вы уверены? Или, возможно, DLL вообще не существует. Оба случая приводят к одной и той же ошибке. Связанный: Не удалось загрузить SqlServerSpatial.dll.

Hadi Brais 22.08.2018 03:33

Ага - он есть, проверил решение (добавлен в решение), проверил, что файл существует. Согласно ссылка на сайт он 32-битный.

user25730 22.08.2018 03:40

Я предлагаю вам использовать один из инструментов для диагностики привязки DLL. Вы можете определить, какой тип SqlServerSpatial.DLL ищется и находится ли он в определенном каталоге. Если найденная DLL действительно 32-битная, но процесс 64-битный, то, очевидно, она не может быть загружена. Точно так же, если он был 64-битным, но процесс 32-битный (WoW64), он не может быть загружен. Вы можете выбрать один из следующих инструментов: sxstrace.exe (который может использоваться для любых библиотек DLL), fuslogvw.exe (который может использоваться только для библиотек DLL .NET, например SqlServerSpatial) или Process Monitor.

Hadi Brais 22.08.2018 04:02

Интересный. Дан SxsTrace, но исходящие файлы (проанализированные) пусты. Скоро будет еще несколько.

user25730 22.08.2018 04:31
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Поддержка IIS для PHP
Поддержка IIS для PHP
Эта версия PHP требует наличия C++ Redistributable для VS 2019 (как минимум)
0
4
523
1

Ответы 1

Чтобы запустить приложение IIS в 32-битном режиме, вы не меняете целевую платформу в Visual Studio, подойдет любой процессор. Вам необходимо настроить запуск хостинга как 32-битный.

Это делается в IIS как параметр в пуле приложений, которому сопоставляется приложение. Установите параметр «Включить 32-разрядные приложения» в пуле приложений, и приложения в этом пуле будут 32-разрядными.

Хорошо, но не совсем. Если я чего-то не упускаю (возможно, я). Нашли соответствующий пул приложений, установили для него 32-разрядную версию, остановили, запустили снова и запустили. По-прежнему выдает ту же ошибку «не удается загрузить dll SqlServerSpatial.dll». Вроде точно такой же.

user25730 22.08.2018 02:18

Другие вопросы по теме