我有一个要部署的 SQL CLR dll,但发现您可以将字节流/varbinary_literal/varbinary_expression/assembly 位嵌入到文本文件中,以解决打包 DLL 的麻烦,并确保CREATE ASSEMBLY可以访问它命令。
但我还没有找到的是如何获得该字节流/varbinary_literal/varbinary_expression/assembly bits 值。我没有找到任何一致的术语,以及我在使用Load()
.
我有一个要部署的 SQL CLR dll,但发现您可以将字节流/varbinary_literal/varbinary_expression/assembly 位嵌入到文本文件中,以解决打包 DLL 的麻烦,并确保CREATE ASSEMBLY可以访问它命令。
但我还没有找到的是如何获得该字节流/varbinary_literal/varbinary_expression/assembly bits 值。我没有找到任何一致的术语,以及我在使用Load()
.
它只是 dll 的十六进制表示。这一点应该可以解决问题:
static string GetHexString(string assemblyPath)
{
if (!Path.IsPathRooted(assemblyPath))
assemblyPath = Path.Combine(Environment.CurrentDirectory, assemblyPath);
StringBuilder builder = new StringBuilder();
builder.Append("0x");
using (FileStream stream = new FileStream(assemblyPath,
FileMode.Open, FileAccess.Read, FileShare.Read))
{
int currentByte = stream.ReadByte();
while (currentByte > -1)
{
builder.Append(currentByte.ToString("X2", CultureInfo.InvariantCulture));
currentByte = stream.ReadByte();
}
}
return builder.ToString();
}
您应该像这样使用生成的字符串:
string hexString = GetHexString(assemblyPath);
string sql = "CREATE ASSEMBLY [" + assemblyName + "] FROM " + hexString +
" WITH PERMISSION_SET = " + somePermissionSet;
在这里找到,varbinary
可以在没有自定义代码的情况下生成它,只需要使用 SQL Server Management Studio (SSMS) 和本地 SQL Server 实例。
create
或alter
您的数据库中的程序集使用本地 SQL Server 上的本地路径。
use yourBase
go
create assembly YourAssemblySqlName from N'YourLocalPath\YourAssemblyFile.dll'
go
在对象资源管理器中浏览到您的程序集。
编写其创建脚本。
SSMS 为您提供varbinary
.