2010-05-21 2 views
13

У меня есть SQL CLR dll, которую я хочу развернуть, но обнаружил, что вы можете встраивать бит байтового потока/varbinary_literal/varbinary_expression/assembly в текстовый файл, чтобы обойти грязную проблему упаковки DLL и убедиться, что она доступна для CREATE ASSEMBLY command.Сборка CLR SQL: получить Bytestream?

Но мне еще предстоит найти, как получить значение байтового потока/varbinary_literal/varbinary_expression/assembly bits. Я не нашел последовательной терминологии, и что я продолжаю искать в использовании Load().

Помощь?

ответ

17

Это всего лишь шестнадцатеричное представление 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; 
+2

Спасибо - шестнадцатеричная информация привела меня к этому коду: http://blog.waldenl.com/2009/12/command-line-hex-representation-of-file.html –

+0

это в основном тот же цикл да :) –

4

Найдено here, то varbinary может быть создан без пользовательского кода для генерации его, только с помощью Sql Server Management Studio (SSMS) и локальный экземпляр SQL Server.

  1. create или alter сборка в базе данных, используя свой локальный путь на локальном SQL Server.

    use yourBase 
    go 
    create assembly YourAssemblySqlName from N'YourLocalPath\YourAssemblyFile.dll' 
    go 
    
  2. Просмотрите свою сборку в Обозревателе объектов.

    Browsing to assembly

  3. Сценарий его создания.

    Scripting the assembly

И SSMS дать вам varbinary.

+2

Вы также можете получить его, как этот: 'SELECT, FROM af.content sys.assemblies INNER JOIN sys.assembly_files аф ON a.assembly_id = af.assembly_id ГДЕ a.name = <@assemblyName>' –