SQL Server 2005 создать сборку из потока с C # - PullRequest
2 голосов
/ 13 января 2010

Могу ли я создать сборку из потока, очень похожего на сценарий сборки, сгенерированный MSSMS? Мне нужно создать сборку из библиотеки DLL, которая находится в каталоге, к которому у SQL Server нет доступа.
Однако установщик сборки имеет доступ к сборке.
Итак, мой вопрос: могу ли я прочитать сборку и создать создание из потока чтения?

Спасибо.

Ответы [ 3 ]

1 голос
/ 03 октября 2014

Я был просто приятно удивлен, обнаружив, что Visual Studio 2013 автоматически генерирует сценарий SQL с битовой строкой, используемой в вызове CREATE ASSEMBLY, при создании проекта SQL CLR.

Создайте проект, затем в папке bin распакуйте файл "* .dacpac", используя DacUnpack.exe. В папке, которая распаковывается, ищите «model.sql». Он содержит вызов CREATE ASSEMBLY, который выглядит так:

CREATE ASSEMBLY [MyFunctions]
AUTHORIZATION [dbo]
FROM 0x4D5A90000[very long string here...];
1 голос
/ 13 января 2010

Я думаю, я понял это ..
Я использую Byte Array Tomalak для шестнадцатеричного метода из этого поста .


     private string getAssemblyAsHex(string asmPath)
     {
        using (BinaryReader br = new BinaryReader(File.OpenRead(asmPath)))
        {
            byte[] buff = new byte[br.BaseStream.Length];
            br.Read(buff, 0, buff.Length - 1);
            return ByteArrayToString(buff);
        }
     }</p>

<pre><code>    private static string ByteArrayToString(byte[] ba)
    {
        StringBuilder hex = new StringBuilder(ba.Length * 2);
        foreach (byte b in ba)
            hex.AppendFormat("{0:x2}", b);
        return hex.ToString();
    }

Затем я просто присоединяю эту строку к оператору CREATE ASSEMBLY.
Код написан с учетом небольшой сборки DLL.

0 голосов
/ 25 октября 2018

Первоначальные версии Visual Studio / SSDT (начиная с Visual Studio 2005), которые поддерживали SQLCLR (который был представлен в SQL Server 2005), полагались на DLL и ссылку на нее в файловой системе в команде CREATE ASSEMBLY команды скрипт публикации / развертывания. Однако в Visual Studio 2012 этот подход был заменен написанием сценария VARBINARY (то есть шестнадцатеричной строки байтов, на которую ссылается документация). Таким образом, любому, кто использует Visual Studio / SSDT с того времени, не обязательно выполнять этот шаг вручную, если он использует сгенерированные сценарии развертывания. Если вы не используете сгенерированные SSDT сценарии развертывания, лучший способ преобразования DLL в этот литерал VARBINARY - это созданная мной утилита с открытым исходным кодом, которая:

  • обрабатывает очень длинные строки шестнадцатеричных байтов, используя продолжение строки . Это делает сценарии более удобочитаемыми и более управляемыми в SSMS и других редакторах, которые не очень хорошо работают с одиночными строками длиной более 100 000 символов.
  • выводит либо в файл (используется для автоматизации / включения вывода в сценарии развертывания), либо непосредственно в буфер обмена (используется вместе с ярлыком, добавленным в папку SendTo вашего входа в Windows, позволяет щелкнуть правой кнопкой мыши на DLL, а затем просто вставьте в сценарий, который вы редактируете).

Код (и предварительно скомпилированный EXE) можно найти на GitHub здесь: BinaryFormatter

Информацию о работе с SQLCLR в SQL Server 2017 и новее можно найти в моих сообщениях в блоге:

Для получения дополнительной информации о работе с SQLCLR в целом посетите: SQLCLR Info

...