Как обновить сборку и зависимые сборки в MS-SQL? - PullRequest
12 голосов
/ 05 февраля 2009

Это ситуация:

У меня есть Trigger.dll и Trigger.XmlSerializer.dll.

Я использую CREATE ASSEMBLY, чтобы зарегистрировать их в MSSQL.

Теперь я собрал новые версии обоих.

Я хочу использовать ALTER ASSEMBLY для их обновления, однако вы можете обновлять только по одному за раз. Если вы пытаетесь обновить тот, который имеет зависимость, он жалуется. Какой трюк с этим?

Я не хочу сбрасывать и воссоздавать, так как я должен затем отбросить все триггеры и т. Д., И есть время простоя базы данных.

Ответы [ 3 ]

5 голосов
/ 11 февраля 2009

в соответствии с поддержкой Microsoft вы можете использовать его при помощи хитрости.

Примечания

  • Эти шаги обновляют или понижают сборку A в сценарии, описанном в разделе «Как обновить или понизить сборку».
  • В этом примере предполагается, что версии двух сборок - 1.0.0.0, и обе сборки написаны на C #. Выполнив следующие действия, вы попытаетесь обновить сборку A и сборку B до версии 2.0.0.0.

Чтобы обновить или понизить сборку A, выполните следующие действия.

  1. Резервное копирование версии 1.0.0.0 сборки B в папку.
  2. Измените и перекомпилируйте сборку B до версии 2.0.0.0.
  3. Используйте инструкцию ALTER ASSEMBLY для обновления сборки B в SQL Server 2005.
  4. Измените, а затем перекомпилируйте сборку 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. Затем проверьте информацию метаданных для указанной сборки в разделе МАНИФЕСТ.
  5. Используйте инструкцию ALTER ASSEMBLY для обновления сборки A в SQL Server 2005.
1 голос
/ 05 февраля 2009

Боюсь, что бросить стол и воссоздать его - единственный путь.

Основная причина этого заключается в том, что значения, хранящиеся в типе в сборке, невозможно использовать, если вы обновите сборку до новой версии.

0 голосов
/ 27 сентября 2013

Два предложения:

1) Как правило, вы можете избежать зависимостей, используя ILMerge для их встраивания и усвоения. Таким образом, инструкции alter Assembly должно быть достаточно в большинстве случаев. Я еще не пробовал это с SQLCLR, но я бы попробовал.

2) Возможно, сборки XML-сериализации не нужны? В этой статье предполагается, что это необходимо только при вызове внешних веб-служб внутри SQL Server . Сам по себе сомнительный дизайн, если только вы не один из тех, кто хочет разместить все свои бизнес-сервисы внутри продукта MS SQL Server, а не просто писать свои собственные автономные сервисы в Windows (гораздо проще в установке, управлении и обслуживании), то есть больше шаблон n-уровня, чем шаблон «уровень данных делает все». Поскольку ваша DLL называется Triggers.dll, она не предполагает, что она объявляет какие-либо типы или является прокси-сервером веб-службы. Если я пропустил какую-то другую причину использования XML-сериализаторов, то, если честно, уточню это из интереса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...