Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сборка "System.Threading.Channels" ссылается на сборку "system.threading.tasks.extensions, v.", которой нет в текущей базе данных.

Автор вопроса: Ehsan AkbarОтветов: 1

Я пытаюсь добавить DLL в SQL Server:

CREATE ASSEMBLY ClassLibrary1
AUTHORIZATION dbo
FROM 'C:\Debug\ClassLibrary1.dll'
WITH PERMISSION_SET = UNSAFE
GO

Как вы можете видеть здесь, мои библиотеки DLL

введите здесь описание изображения

введите здесь описание изображения

Но я получаю эту ошибку:

Сборка "System.Threading.Channels" ссылается на сборку "system.threading.tasks.extensions, версия = 4.2.0.0, культура = нейтральная, publickeytoken = cc7b13ffcd2ddd51.", которой нет в текущей базе данных. SQL Server попытался найти и автоматически загрузить сборку, на которую указывает ссылка, из того же места, откуда была получена сборка, но эта операция не удалась (причина: несоответствие версии, культуры или открытого ключа). Загрузите указанную сборку в текущую базу данных и повторите запрос.

Почему я получаю эту ошибку, когда доступны все указанные библиотеки DLL?

  • @DaleK Мой вопрос: почему я должен получить эту ошибку? DLL находится внутри папки Ehsan Akbar 16.09.2020
  • @DaleK, теоретически ты прав. Однако, если вы создаете сборку из пути к файлу, и все библиотеки DLL, на которые есть ссылки, находятся в пути, SQL вводит их вручную. Мы можем поспорить, следует ли вам делать это таким образом, я бы сказал, что нет, но для быстрого и грязного теста это работает. Niels Berglund 16.09.2020

sql-serverdllsqlclr

Ответы

Ответ 1 · рейтинг 1 · Niels Berglund

Хм, интересно - то, как вы создаете сборку, dll расширений должно было быть создано автоматически.

Пара вещей:

  • Я предполагаю, что вы вручную скопировали все dll в свой каталог. Если это так, убедитесь, что версии dll верны, т. е. что версия расширений, которую использует dll каналов, совпадает с той, что у вас есть в каталоге.
  • Также может случиться так, что расширения не могут быть созданы как сборки в SQL, так как разрешены не все clr dll. Попробуйте создать dll расширений вручную, а затем dll каналов.

Есть причины, по которым некоторые dll очень сложно развернуть в db, поэтому, возможно, спросите себя, можете ли вы выполнить то, что хотите сделать с dll, из-за пределов db. Каждый раз, когда я вижу, что dll ссылается на System.Threading и System.Memory, я беспокоюсь.

О, я вижу, что вы хотите сделать - вы хотите обратиться к Rabbit, и я предполагаю, что вы используете одну из последних DLL-клиентов Rabbit. Я смутно припоминаю, что более поздние dll нельзя развернуть на SQL. На самом деле я написал сообщение в блоге о том, как это сделать еще в 2017 году. Взгляните на сообщение и посмотрите, поможет ли оно вам.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы