Консольное приложение .NET 6: не удалось загрузить пространственную библиотеку SQL Server ⇐ C#
Консольное приложение .NET 6: не удалось загрузить пространственную библиотеку SQL Server
У меня есть готовое консольное приложение .NET 6, основанное на новом шаблоне проекта, в которое я добавил пакет nuget Microsoft.SqlServer.Types версии 160.1000.6< /код>.
Я получаю следующую ошибку:
Необработанное исключение. System.IO.FileNotFoundException: не удалось загрузить пространственную библиотеку SQL Server. Код ошибки: 126 (HResult: 0x80131524).
в Microsoft.SqlServer.Types.GLNativeMethods.ThowIfGLNativeLibraryNotLoaded()
в Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoData g)
в Microsoft.SqlServer.Types.SqlGeometry.IsValidExpensive()
в Microsoft.SqlServer.Types.SqlGeometry..ctor(GeoData g, Int32 srid)
в Microsoft.SqlServer.Types.SqlGeometry.Construct(GeoData g, Int32 srid)
в Microsoft.SqlServer.Types.SqlGeometry.GeometryFromBinary (тип OpenGisType, двоичный файл SqlBytes, Int32 srid)
в Microsoft.SqlServer.Types.SqlGeometry.STGeomFromWKB(SqlBytes wkbGeometry, Int32 srid)
в geometry_tester.Program.Main(String[] args) в C:\Users\me\source\repos\geometry-tester\Program.cs:line 31
Мой исходный код:
попробуй { объект objectValue = DBNull.Value; byte[] bytes = Convert.FromBase64String("AQMAAAAAAAACwAAAAAAAAADqllrAAAAAQHueOEAAAADAZIVawAAAAAKDbwjhAAAAAAOF4WsAAAAAgE285QAAAAADnjFrAAAAAAFYaOkAAAAAA6pZawAAAAEBEPjpAAAAAwHnLWsAAAABARD46QAAAAEB70F raAAAAAFYaOkAAAABAe9BawaAAAACATbzlAAAAAwHnLWsAAAACgvC85QAAAAADwqlrAAAAAoNvCOEAAAAAA6pZawaAAAAEB7njha"); objectValue = (объект)SqlGeometry.STGeomFromWKB(новый System.Data.SqlTypes.SqlBytes(bytes), 4326).MakeValid(); Console.WriteLine($"Преобразованный вывод: {((SqlGeometry)objectValue).ToString()}"); } поймать (исключение ex) { бросать; } окончательно { Console.WriteLine("Нажмите любую клавишу..."); Консоль.ReadLine(); } со строкой 31, на которую ссылается ошибка, является эта строка:
objectValue = (объект)SqlGeometry.STGeomFromWKB(новый System.Data.SqlTypes.SqlBytes(bytes), 4326).MakeValid(); Что еще более странно в этой проблеме, так это то, что я сталкиваюсь с ней только в одной из наших сред (конечно, в Prod!), а приведенный выше код приложения успешно работает во всех моих нижних средах. Поэтому я почти уверен, что столкнулся либо с проблемой доступа, либо с разрешениями, либо с каким-то сканированием безопасности, но мне нужна помощь в диагностике. Я не вижу ничего, зафиксированного в Windows EventViewer, что указывало бы на то, почему он считает, что не может найти пространственную библиотеку. Наше установленное программное обеспечение для сканирования безопасности не показывает в своих журналах ничего, что указывало бы на то, что оно предотвращает доступ к библиотеке или что-то в этом роде.
Я запустил Systernals ProcMon и вижу, как процесс сканирует папку приложения в поисках SqlServerSpatial160.dll, я вижу, что он ищет в папке моего приложения в \runtimes\win- x64\родной. Я не совсем понимаю, как читать, что делает ProcMon, но похоже, что это подразумевает, что он успешно читает файл .dll, но затем продолжает попытки найти dll, но не находит ее, и я предполагаю, что это приводит к сбою . Запуск того же теста ProcMon в рабочей среде выглядит так, как будто он останавливается, когда попадает в местоположение файла .dll в файловой системе.
Мое опубликованное приложение содержит исполняемый файл, зависимости .NET и т. д. в корневой папке. Также в корневой папке находятся Microsoft.SqlServer.Server.dll и Microsoft.SqlServer.Types.dll. Пространственная библиотека, которую я предполагаю из nuget, затем находится в подпапке корневой папки, в папке runtimes, в которой затем есть несколько папок архитектуры, а затем, в конечном итоге, SqlServerSpatial160.dll файл.
Очевидно, это некоторая разница в моей среде, но я ищу дополнительные идеи о том, как устранить неполадки или диагностировать, почему возникает эта ошибка, чтобы я мог ее исправить. Запуск от имени администратора не имеет никакого значения, и я также не вижу очевидных различий в таких вещах, как установленные приложения.
Спасибо за любую помощь.
У меня есть готовое консольное приложение .NET 6, основанное на новом шаблоне проекта, в которое я добавил пакет nuget Microsoft.SqlServer.Types версии 160.1000.6< /код>.
Я получаю следующую ошибку:
Необработанное исключение. System.IO.FileNotFoundException: не удалось загрузить пространственную библиотеку SQL Server. Код ошибки: 126 (HResult: 0x80131524).
в Microsoft.SqlServer.Types.GLNativeMethods.ThowIfGLNativeLibraryNotLoaded()
в Microsoft.SqlServer.Types.GLNativeMethods.IsValid(GeoData g)
в Microsoft.SqlServer.Types.SqlGeometry.IsValidExpensive()
в Microsoft.SqlServer.Types.SqlGeometry..ctor(GeoData g, Int32 srid)
в Microsoft.SqlServer.Types.SqlGeometry.Construct(GeoData g, Int32 srid)
в Microsoft.SqlServer.Types.SqlGeometry.GeometryFromBinary (тип OpenGisType, двоичный файл SqlBytes, Int32 srid)
в Microsoft.SqlServer.Types.SqlGeometry.STGeomFromWKB(SqlBytes wkbGeometry, Int32 srid)
в geometry_tester.Program.Main(String[] args) в C:\Users\me\source\repos\geometry-tester\Program.cs:line 31
Мой исходный код:
попробуй { объект objectValue = DBNull.Value; byte[] bytes = Convert.FromBase64String("AQMAAAAAAAACwAAAAAAAAADqllrAAAAAQHueOEAAAADAZIVawAAAAAKDbwjhAAAAAAOF4WsAAAAAgE285QAAAAADnjFrAAAAAAFYaOkAAAAAA6pZawAAAAEBEPjpAAAAAwHnLWsAAAABARD46QAAAAEB70F raAAAAAFYaOkAAAABAe9BawaAAAACATbzlAAAAAwHnLWsAAAACgvC85QAAAAADwqlrAAAAAoNvCOEAAAAAA6pZawaAAAAEB7njha"); objectValue = (объект)SqlGeometry.STGeomFromWKB(новый System.Data.SqlTypes.SqlBytes(bytes), 4326).MakeValid(); Console.WriteLine($"Преобразованный вывод: {((SqlGeometry)objectValue).ToString()}"); } поймать (исключение ex) { бросать; } окончательно { Console.WriteLine("Нажмите любую клавишу..."); Консоль.ReadLine(); } со строкой 31, на которую ссылается ошибка, является эта строка:
objectValue = (объект)SqlGeometry.STGeomFromWKB(новый System.Data.SqlTypes.SqlBytes(bytes), 4326).MakeValid(); Что еще более странно в этой проблеме, так это то, что я сталкиваюсь с ней только в одной из наших сред (конечно, в Prod!), а приведенный выше код приложения успешно работает во всех моих нижних средах. Поэтому я почти уверен, что столкнулся либо с проблемой доступа, либо с разрешениями, либо с каким-то сканированием безопасности, но мне нужна помощь в диагностике. Я не вижу ничего, зафиксированного в Windows EventViewer, что указывало бы на то, почему он считает, что не может найти пространственную библиотеку. Наше установленное программное обеспечение для сканирования безопасности не показывает в своих журналах ничего, что указывало бы на то, что оно предотвращает доступ к библиотеке или что-то в этом роде.
Я запустил Systernals ProcMon и вижу, как процесс сканирует папку приложения в поисках SqlServerSpatial160.dll, я вижу, что он ищет в папке моего приложения в \runtimes\win- x64\родной. Я не совсем понимаю, как читать, что делает ProcMon, но похоже, что это подразумевает, что он успешно читает файл .dll, но затем продолжает попытки найти dll, но не находит ее, и я предполагаю, что это приводит к сбою . Запуск того же теста ProcMon в рабочей среде выглядит так, как будто он останавливается, когда попадает в местоположение файла .dll в файловой системе.
Мое опубликованное приложение содержит исполняемый файл, зависимости .NET и т. д. в корневой папке. Также в корневой папке находятся Microsoft.SqlServer.Server.dll и Microsoft.SqlServer.Types.dll. Пространственная библиотека, которую я предполагаю из nuget, затем находится в подпапке корневой папки, в папке runtimes, в которой затем есть несколько папок архитектуры, а затем, в конечном итоге, SqlServerSpatial160.dll файл.
Очевидно, это некоторая разница в моей среде, но я ищу дополнительные идеи о том, как устранить неполадки или диагностировать, почему возникает эта ошибка, чтобы я мог ее исправить. Запуск от имени администратора не имеет никакого значения, и я также не вижу очевидных различий в таких вещах, как установленные приложения.
Спасибо за любую помощь.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение