Как обновить сборку и ее зависимые сборки в MS-SQL?
В этой ситуации:
У меня есть Trigger.dll и Trigger.XmlSerializer.dll.
Я использую CREATE ASSEMBLY для регистрации их в MSSQL.
Теперь я скомпилировал новые версии обоих.
Я хочу использовать ALTER ASSEMBLY для их обновления, однако вы можете обновлять только по одному. Если вы попытаетесь обновить тот, у которого есть зависимость, он жалуется. Какая уловка для этого?
Я не хочу бросать и воссоздавать, как я должен, затем удалить все триггеры и т.д., и есть время простоя базы данных.
Ответы
Ответ 1
в соответствии с поддержкой microsoft вы можете использовать его с помощью трюка.
Примечания
- Эти шаги обновляют или понижают ассемблер A в сценарии, описанном в разделе "Как обновить или понизить сборку".
- В этом примере предполагается, что версии двух сборок равны 1.0.0.0, а сборки оба написаны на С#. Когда вы выполните следующие действия, попробуйте обновить сборку A и сборку B до версии 2.0.0.0.
Чтобы обновить или понизить страницу сборки A, выполните следующие действия.
- Резервное копирование версии 1.0.0.0 сборки B в папку.
- Измените, а затем перекомпилируйте сборку B до версии 2.0.0.0.
- Используйте инструкцию ALTER ASSEMBLY для обновления сборки B в SQL Server 2005.
- Измените, а затем перекомпилируйте сборку A до версии 2.0.0.0. Когда вы это сделаете, обратитесь к версии 1.0.0.0 сборки B из резервной копии, сделанной на шаге 1. Для этого используйте инструмент компилятора Csc.exe вместе с переключателем /reference. Например, используйте следующую команду: csc/target: library/out:AssemblyA.dll AssemblyA.cs AssemblyInfo.cs/reference: "BackupFolder\AssemblyB.dll" Примечание. Чтобы проверить версию сборки B в метаданных сборки A, откройте сборку A с помощью утилиты Ildasm.exe. Затем проверьте информацию метаданных для ссылочной сборки в разделе MANIFEST.
- Используйте инструкцию ALTER ASSEMBLY для обновления сборки A в SQL Server 2005.
Ответ 2
Я боюсь сбросить таблицу и воссоздать ее, это единственный способ.
Основной причиной этого является то, что значения, хранящиеся в типе в сборке, непригодны для использования при обновлении сборки до новой версии.
Ответ 3
Два предложения:
1) Как правило, вы можете избежать зависимостей, используя ILMerge для их внедрения и интернализации. Поэтому в большинстве случаев достаточно выполнить команду alter assembly. Я еще не пробовал, что сам еще с SQLCLR, но я бы от него отказался.
2) Возможно, сборки сериализации XML не нужны? В этой статье предлагается, что это необходимо только при вызове внешних веб-сервисов внутри SQL Server. Сам по себе сомнительный дизайн, если вы не являетесь одним из тех людей, которые хотят размещать все ваши бизнес-сервисы внутри продукта MS SQL Server, вместо того, чтобы просто писать собственные автономные службы в Windows (гораздо проще в установке, управлении и обслуживании) т.е. больше шаблона n-уровня, чем "уровень данных делает все" анти-шаблон. Поскольку ваша DLL называется Triggers.dll, она не предлагает объявлять какие-либо типы или является прокси-сервером веб-службы. Если я пропустил какую-либо другую причину использовать XML-сериализаторы, то достаточно справедливым, пожалуйста, уточните это из интереса.