安装适用于SQL Server Linux版本的CLR

时间:2020-01-11 01:08:05

标签: c# sql-server linux sqlclr

我有一个C#文件,可以在Windows上很好地编译和安装。我可以使用以下命令在带有mcs的Linux上编译它而不会出现错误:

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"

但是,我收到了错误消息:

创建组件失败,因为它无法打开物理文件'/home/travis/build/Beakerboy/sqlsrv/tests/RegEx.dll':2(系统找不到指定的文件。)

我担心路径可能需要为“ Windows格式”,并发现甚至可能需要“ 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 个答案:

答案 0 :(得分:1)

根据我的记忆,除非在过去的一年中有所改变,否则我相信您只能使用十六进制字节/ VARBINARY选项创建程序集,而不能从文件系统中创建程序集。到目前为止,我还没有找到有关它的文档,但是我确实记得当SQL Server for Linux推出时才读过它(限制是不从文件系统中加载,仅SAFE程序集等)。 < sub>(OP能够从DLL中加载它,因此发生了某些变化或我记错了)。

如果在Windows上编译,我创建了一个命令行实用程序,用于将DLL转换为正确的格式:BinaryFormatter。我一直打算更新该项目,以使其可以在Linux上本地运行,但是还没有解决(如果有时间的话,可以在那里提供一些帮助)。

无论如何,如果您想要RegEx函数(以及更多),可以通过下载并安装我创建的SQL#库(因为它在Linux上的SQL Server上可以正常运行)而更轻松地做到这一点。它具有.NET中大多数(如果不是全部)的RegEx方法,以及一些其他方法。并且,它通过对所有程序集进行签名来正确处理安全性,因此不需要启用TRUSTWORTHYa bad practice)或禁用'clr strict security'