16

我有一个要部署的 SQL CLR dll,但发现您可以将字节流/varbinary_literal/varbinary_expression/assembly 位嵌入到文本文件中,以解决打包 DLL 的麻烦,并确保CREATE ASSEMBLY可以访问它命令

但我还没有找到的是如何获得该字节流/varbinary_literal/varbinary_expression/assembly bits 值。我没有找到任何一致的术语,以及我在使用Load().

4

2 回答 2

23

它只是 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;
于 2010-05-21T22:29:16.227 回答
7

在这里找到,varbinary可以在没有自定义代码的情况下生成它,只需要使用 SQL Server Management Studio (SSMS) 和本地 SQL Server 实例。

  1. createalter您的数据库中的程序集使用本地 SQL Server 上的本地路径。

    use yourBase
    go
    create assembly YourAssemblySqlName from N'YourLocalPath\YourAssemblyFile.dll'
    go
    
  2. 在对象资源管理器中浏览到您的程序集。

    浏览到组装

  3. 编写其创建脚本。

    编写程序集脚本

SSMS 为您提供varbinary.

于 2016-04-01T18:03:30.273 回答