Ошибка при регистрации на сервере SQL сборки SQL CLR, ссылающейся на FSharp.Data.SqlProvider - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть F # DLL (.NET Framework 4.5.1, F # 4.1, FSharp.Core 4.4.3.0). Единственная ссылка, добавленная NuGet, относится к FSharp.Data.SqlProvider 1.1.41.

Код только в одном файле

module DB

open FSharp.Data.Sql

[<Literal>]
let private dbVendor = Common.DatabaseProviderTypes.MSSQLSERVER

Сборка идет без ошибок

Импорт встроенной библиотеки DLL в SQL-сервер в виде сборки

CREATE ASSEMBLY [Library2] FROM '<path>\Library2.dll' WITH PERMISSION_SET = UNSAFE

Операция завершается с ошибкой

Сборка 'Library2' справочная сборка 'fsharp.core, версия = 4.3.1.0, культура = нейтральная, publickeytoken = b03f5f7f11d50a3a. ', которая не присутствует в текущей базе данных. SQL Server попытался найти и автоматически загружать ссылочную сборку из того же места откуда пришла ссылка на сборку, но эта операция не удалась (причина: версия, культура или несоответствие открытого ключа). Пожалуйста, загрузите ссылаемся на сборку в текущей базе данных и повторите ваш запрос

Теперь прокомментируйте последние две строки в коде

//[<Literal>]
//let private dbVendor = Common.DatabaseProviderTypes.MSSQLSERVER

При этом создание сборки SQL завершается успешно, сборка правильно создается на сервере SQL

Наконец, если я понижу проект до F # 3.1 (FSharp.Core 4.3.1.0), то в обоих случаях ошибки не будет

SQL Server 14.0.1000

Windows 10 Pro

Обратите внимание, что в проекте GitHub repo уже возникла проблема: Issue # 541

Вопросы

  • Кто-нибудь видит что-то не так в том, что я делаю?
  • Кто-нибудь сталкивался с такой проблемой и решил ее? Если да, то как?

1 Ответ

0 голосов
/ 27 апреля 2018

F # не является родным языком SQLCLR. Я полагаю, что только C #, VB.NET и Visual C ++ (и, конечно, IL, если вы пишете это напрямую и не используете глупый компилятор;).

Итак, как говорится в сообщении об ошибке, вам нужно вручную загрузить эту библиотеку F #, пометив ее как UNSAFE.

Пожалуйста, смотрите мой следующий ответ, также на S.O., для получения дополнительной информации об использовании F # в SQLCLR:

F # с sqlclr достаточно безопасным способом и сборкой со сценарием

...