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

Я пытаюсь добавить 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?


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


Ответы (1)


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

Пара вещей:

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

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

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

person Niels Berglund    schedule 16.09.2020
comment
Привет, Найлс. Я добавил dll в свое решение в качестве ссылок, и когда я создаю проект, он автоматически копируется в папку отладки. - person Ehsan Akbar; 16.09.2020
comment
Итак, что произойдет, если вы попытаетесь развернуть его вручную в БД? - person Niels Berglund; 16.09.2020
comment
Я вручную добавил system.threading.tasks.extensions, и все в порядке. Но когда я пытаюсь добавить свой ClassLibrary1.dll, я получаю ту же ошибку, почему? - person Ehsan Akbar; 16.09.2020
comment
Что ж, тогда сделайте, как предлагает @DaleK выше, и добавьте все dll вручную, одну за другой. - person Niels Berglund; 16.09.2020
comment
Извините за опоздание. Когда я пытаюсь добавить их вручную, я получаю эту ошибку: Сборка «system.runtime.compilerservices.unsafe, версия = 4.0.4.1, культура = нейтральная, publickeytoken = b03f5f7f11d50a3a». не был найден в каталоге SQL. (Microsoft SQL Server, ошибка: 6503) - person Ehsan Akbar; 16.09.2020
comment
Здравствуйте, не могли бы вы взглянуть на это: stackoverflow.com/questions/63965355/ - person Ehsan Akbar; 19.09.2020