Установите CLR для SQL Server Linux edition - PullRequest
2 голосов
/ 11 января 2020

У меня есть файл C#, который прекрасно компилируется и устанавливается на Windows. Я могу скомпилировать его без ошибок на Linux с помощью mcs, используя команду:

mcs -reference:System.Data.dll -target:library -out:tests/RegEx.dll tests/regex.cs

Я проверил, что файл существует и имеет разрешения 775 в том же каталоге, что и исходный файл. Затем я пытаюсь установить его на сервер со следующими данными:

/opt/mssql-tools/bin/sqlcmd -P Password12! -S localhost -U SA -Q "CREATE ASSEMBLY Regex from '$TRAVIS_BUILD_DIR/tests/RegEx.dll' WITH PERMISSION_SET = SAFE"

Однако я получил ошибку:

Не удалось создать CREATE ASSEMBLY, поскольку не удалось открыть физический файл ' /home/travis/build/Beakerboy/sqlsrv/tests/RegEx.dll ': 2 (Система не может найти указанный файл.).

Я беспокоился, что пути могут быть «Windows format ”и обнаружил предположение, что даже« C: \ »может потребоваться. Я попробовал это затем, но файл все еще не был найден:

/opt/mssql-tools/bin/sqlcmd -P Password12! -S localhost -U SA -Q "CREATE ASSEMBLY Regex from 'c:\home\travis\build\Beakerboy\sqlsrv\tests\RegEx.dll' WITH PERMISSION_SET = SAFE"

У кого-нибудь есть предложение о том, как это должно быть отформатировано? Полный сценарий travis для установки моего сервера находится на GitHub

1 Ответ

1 голос
/ 11 января 2020

Из того, что я помню, если что-то не изменилось за последний год или до, я считаю, что вы можете создавать сборки только с использованием опции hex bytes / VARBINARY, а не из файловой системы. Пока я не могу найти документацию для этого, но я помню, что читал ее, когда вышел SQL Сервер для Linux (ограничения были не загрузка из файловой системы, только SAFE сборки, и т. Д. c). (OP смог загрузить его из DLL, поэтому либо что-то изменилось, либо я ошибочно запомнил).

При компиляции на Windows я создал командную строку Утилита для преобразования DLL в нужный формат: BinaryFormatter . Я хотел обновить проект так, чтобы он работал на Linux изначально, но пока не дошел до этого (возможно, мог бы использовать небольшую помощь, если бы у кого-то было время ?).

В любом случае, если вы хотите использовать функции RegEx (и многое другое), вы можете сделать это проще, загрузив и установив библиотеку SQL # , которую я создал, поскольку она работает на SQL Сервер на Linux. Он содержит большинство, если не все, методы RegEx, доступные в. NET, плюс несколько дополнительных. Кроме того, он обеспечивает надлежащую защиту, так как все сборки подписаны, поэтому не требуется ни включения TRUSTWORTHY ( плохая практика ), ни отключения 'clr strict security'.

.
...