Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
Пытаюсь создать CLR функцию на основе свое библиотеки, но которая использует стороннюю библиотеку, назовем ее EXTERNAL.DLL
При попытке создать сборку получаю ошибку Assembly EXTERNAL.DLL was not found in the SQL catalog.
Про какой именно каталог идет речь? EXTERNAL.DLL прописана в GAC, я скидывал ее в SYSTEM32, но ошибка не пропадает.

Куда нужно скопировать внешнюю библиотеку, чтобы ее можно было использовать в моей сборке?
23 мар 19, 16:54    [21841712]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
создаю с EXTERNAL_ACCESS
23 мар 19, 16:55    [21841713]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1364
lex452,

вам нужно также пролить вашу external.dll от которой зависит ваша сборка на Sql server.

При этом есть большая доля вероятности что проливка external.dll уже потребует набора разрешений unsafe.
24 мар 19, 14:14    [21842023]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
felix_ff,

что значит пролить? C Unsafe проблемы нету
24 мар 19, 14:59    [21842082]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
что значит пролить?
Сделать CREATE ASSEMBLY
24 мар 19, 15:35    [21842129]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
alexeyvg
lex452
что значит пролить?
Сделать CREATE ASSEMBLY

Разве я могу сделать CREATE ASSEMBLY для сторонней DLL к исходникам которой у меня нет доступа?
24 мар 19, 16:00    [21842146]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
alexeyvg
пропущено...
Сделать CREATE ASSEMBLY

Разве я могу сделать CREATE ASSEMBLY для сторонней DLL к исходникам которой у меня нет доступа?
Хм, вы же создаёте сборку из dll, зачем вам исходники?

Вот, например, подобное обсуждение: https://dba.stackexchange.com/questions/81277/assembly-system-web-version-4-0-0-0-culture-neutral-publickeytoken-b03f5f7f1
24 мар 19, 16:11    [21842148]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
alexeyvg
lex452
пропущено...

Разве я могу сделать CREATE ASSEMBLY для сторонней DLL к исходникам которой у меня нет доступа?
Хм, вы же создаёте сборку из dll, зачем вам исходники?

Вот, например, подобное обсуждение: https://dba.stackexchange.com/questions/81277/assembly-system-web-version-4-0-0-0-culture-neutral-publickeytoken-b03f5f7f1

Я все время считал что перед методом должно быть прописано [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
чтобы он был доступен в sql
24 мар 19, 16:13    [21842150]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
И мне не совсем понятно, почему сервер не видит dll когда она прописана в GAC?
24 мар 19, 16:14    [21842151]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
Разве я могу сделать CREATE ASSEMBLY для сторонней DLL к исходникам которой у меня нет доступа?
Что вообще делает CREATE ASSEMBLY?
Она добавляет сборку к DOT.NET хосту, который встроен в SQL Server. Он же сам хостит DOT.NET, только частично пользуясь соотв. инфраструктурой, установленной в винды (точнее, в установленный хост фреймворка).

Ряд стандарных сборок туда уже добавлен изначально (допустим, System.Data), но многих нет, и уж тем более сторонних, не микрософтовских.
Совершенно необязательно в этой сборке должны быть, например, CLR функции, это просто DOT.NET сборки, и исходный код тем более не нужен.
24 мар 19, 16:17    [21842152]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
И мне не совсем понятно, почему сервер не видит dll когда она прописана в GAC?
Потому что сервер имеет свою виртуальную машину dot.net, он не использует ту, которую вы установили сами.

Это нужно для того, что бы dot.net виртуальная машина работала внутри процесса ядра Data base Engine, вначе как быстро выполнять CLR изнутри ядра? Делать Out-Of-Process вызовы миллионы раз при выполнении запроса?
24 мар 19, 16:20    [21842153]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
lex452
Member

Откуда:
Сообщений: 568
alexeyvg,

То есть все необходимые библиотеки можно добавить через create assembly и они будут видеть друг друга?
24 мар 19, 16:27    [21842155]     Ответить | Цитировать Сообщить модератору
 Re: CLR сборка с использованием внешней библиотеке  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
lex452
alexeyvg,

То есть все необходимые библиотеки можно добавить через create assembly и они будут видеть друг друга?
Да.
Но вы почитайте обсуждение по ссылке, вроде могут быть и трудности.
24 мар 19, 16:56    [21842171]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить