我有一个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
上答案 0 :(得分:1)
根据我的记忆,除非在过去的一年中有所改变,否则我相信您只能使用十六进制字节/ < sub>(OP能够从DLL中加载它,因此发生了某些变化或我记错了)。 VARBINARY
选项创建程序集,而不能从文件系统中创建程序集。到目前为止,我还没有找到有关它的文档,但是我确实记得当SQL Server for Linux推出时才读过它(限制是不从文件系统中加载,仅SAFE
程序集等)。
如果在Windows上编译,我创建了一个命令行实用程序,用于将DLL转换为正确的格式:BinaryFormatter。我一直打算更新该项目,以使其可以在Linux上本地运行,但是还没有解决(如果有时间的话,可以在那里提供一些帮助)。
无论如何,如果您想要RegEx函数(以及更多),可以通过下载并安装我创建的SQL#库(因为它在Linux上的SQL Server上可以正常运行)而更轻松地做到这一点。它具有.NET中大多数(如果不是全部)的RegEx方法,以及一些其他方法。并且,它通过对所有程序集进行签名来正确处理安全性,因此不需要启用TRUSTWORTHY
(a bad practice)或禁用'clr strict security'
。