Сообщение об ошибке при процедуру среды CLR выполнить или использовать сборку в SQL Server: «сборки в хранилище главного узла имеет другую подпись чем сборки в глобальный кэш СБОРОК. (Исключение из HRESULT: 0x80131050)»

Симптомы

Рассмотрим следующие сценарии.

Сценарий 1

Создайте общие процедуры общеязыковой среды выполнения (CLR) языка, которая ссылается на сборку Microsoft платформа.NET Framework. Платформа.NET Framework сборки не задокументированных в статьях базы знаний Майкрософт 922672. Затем установите исправление на основе платформа.NET Framework 2.0 или 3.5 платформа.NET Framework.

Сценарий 2

Создайте сборку и затем зарегистрировать сборку в базе данных Microsoft SQL Server. Затем установить другую версию сборки в глобальный кэш сборок (GAC).

При выполнения подпрограммы среды CLR или использовать сборку из любого из этих сценариев в SQL Server, появляется сообщение об ошибке, подобное приведенному ниже:

Сервер: Сообщение 6522, уровень 16, состояние 2, строка 1
Ошибка платформа.NET Framework во время выполнения определяемой пользователем подпрограммы или статистической «getsid»:

System.IO.FileLoadException: Не удалось загрузить файл или сборку ' пространство имен System.DirectoryServices, версия = 2.0.0.0, язык и региональные параметры нейтрального PublicKeyToken = = b03f5f7f11d50a3a "или одна из ее зависимостей. Сборки в хранилище главного узла имеет другую подпись чем сборки в глобальный кэш СБОРОК. (Исключение из HRESULT: 0x80131050)

System.IO.FileLoadException:

Причина

Когда среда CLR загружает сборки, среда CLR проверяет той же сборки в глобальном кэше СБОРОК. При той же сборки в глобальном кэше СБОРОК, среда CLR проверяет соответствие идентификаторов версии модуля (MVIDs) из этих сборок. Если MVIDs эти сборки не совпадают, появляется сообщение об ошибке, который упоминается в разделе «Проблема».

При перекомпиляции сборки изменяется MVID сборки. Таким образом при обновлении платформа.NET Framework, платформа.NET Framework сборки имеют различные MVIDs, так как эти сборки компилируются. Кроме того при обновлении собственную сборку компилируется сборка. Таким образом она также имеет различные MVID.

Временное решение

Временное решение 1

Чтобы обойти сценарий 1 в разделе «Проблема», необходимо вручную обновить платформа.NET Framework сборок в SQL Server. Для этого используйте инструкцию ALTER ASSEMBLY для новой версии сборки платформа.NET Framework, в следующей папке:
%Windir%\Microsoft.NET\Framework\Version
Примечание. Под версией подразумевается версия платформа.NET Framework, которые установлены или обновлены.

Временное решение 2

Чтобы обойти сценарий 2 в разделе «Проблема», используйте инструкцию ALTER ASSEMBLY обновление сборки в базе данных.

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

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения

Не рекомендуется использовать платформа.NET Framework сборок, которые не описаны в статье базы знаний 922672. Статья базы знаний 922672 список сборок, на которые тестируются в среде размещения CLR в SQL Server.

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
922672 политика поддержки для непроверенных платформа.NET Framework сборки в среде CLR SQL Server размещен

Описание процедур CLR

Подпрограмм CLR включают следующие объекты, которые реализуются с помощью интеграции SQL Server со средой CLR платформа.NET Framework:
  • Определяемые пользователем скалярные функции (скалярные определяемые пользователем функции)
  • Определяемые пользователем табличные функции (образца)
  • Пользовательские процедуры (UDPs)
  • Определяемые пользователем триггеры
  • Определяемых пользователем типов данных
  • Определяемые пользователем статистические функции

Сборки для обновления после установки платформы платформа.NET Framework 3.5

После установки платформы платформа.NET Framework 3.5, необходимо использовать инструкцию ALTER ASSEMBLY для обновления следующих сборок:
  • Accessibility.dll
  • AspNetMMCExt.dll
  • Cscompmgd.dll
  • IEExecRemote.dll
  • IEHost.dll
  • IIEHost.dll
  • Microsoft.Build.Conversion.dll
  • Microsoft.Build.Engine.dll
  • Microsoft.Build.Framework.dll
  • Microsoft.Build.Tasks.dll
  • Microsoft.Build.Utilities.dll
  • Microsoft.CompactFramework.Build.Tasks.dll
  • Microsoft.JScript.dll
  • Microsoft.VisualBasic.Vsa.dll
  • Microsoft.Vsa.dll
  • Microsoft.Vsa.Vb.CodeDOMProcessor.dll
  • Microsoft_VsaVb.dll
  • Sysglobl.dll
  • System.Configuration.Install.dll
  • System.Design.dll
  • System.DirectoryServices.dll
  • System.DirectoryServices.Protocols.dll
  • System.Drawing.dll
  • System.Drawing.Design.dll
  • System.EnterpriseServices.dll
  • System.Management.dll
  • System.Messaging.dll
  • System.Runtime.Serialization.Formatters.Soap.dll
  • System.ServiceProcess.dll
  • System.Web.dll
  • System.Web.Mobile.dll
  • System.Web.RegularExpressions.dll
Эти сборки находятся в следующей папке:
%Windir%\Microsoft.NET\Framework\v2.0.50727

Как сохранить данные из определенных пользователем типов данных после удаления сборки

При удалении сборки, которая использует тип пользовательских данных из SQL Server, можно использовать один из следующих методов, чтобы сохранить данные.

Предположим, что следующие сценарии:
  • Создание сборки с именем
    MyAssembly.dll.
  • Ссылки на сборки MyAssembly
    Сборка System.DirectoryServices.dll .
  • У вас есть определяемого пользователем типа данных, имя которого
    MyDateTime.
  • Тип данных MyDateTime используется сборка MyAssembly.dll.
  • Создайте таблицу, имя которой MyTable.
  • В таблице MyTable содержит данные типа данных MyDateTime .

Метод 1: Использование служебной программы bcp.exe

  1. Для копирования данных из таблицы MyTable в файл с помощью служебной программы Bcp.exe с параметром -n . Например введите следующую команду в командной строке:
    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n –SSQLServerName  -T
  2. В среде SQL Server Management Studio выполните следующие действия.
    1. Удалите таблицу MyTable.
    2. Удалите тип данных MyDateTime .
    3. Удаление сборки System.DirectoryServices.dll .
    4. Удаление сборки MyAssembly .
  3. В среде SQL Server Management Studio выполните следующие действия.
    1. Зарегистрируйте сборку System.DirectoryServices.dll .
    2. Регистрация сборки MyAssembly .
    3. Создайте тип данных MyDateTime .
    4. Создайте новую таблицу, которая имеет такую же структуру таблицы как таблицу MyTable.
  4. Чтобы импортировать данные из файла в таблицу MyTable с помощью служебной программы Bcp.exe с параметром -n . Например введите следующую команду в командной строке:
    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n –SSQLServerName  -T

Способ 2: Используйте INSERT... Инструкция SELECT

Предположим, что тип данных MyDateTime занимает 9 байт в хранилище.
  1. В среде SQL Server Management Studio Создание новой таблицы, содержащей столбец типа данных VARBINARY(9) , выполнив следующую инструкцию:
    CREATE TABLE TempTable (c1 VARBINARY(9))
  2. Выполните следующую Вставка... ВЫБЕРИТЕ инструкции для заполнения таблицы TempTable:
    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable
  3. В среде SQL Server Management Studio выполните следующие действия.
    1. Удалите таблицу MyTable.
    2. Удалите тип данных MyDateTime .
    3. Удаление сборки System.DirectoryServices.dll .
    4. Удаление сборки MyAssembly .
  4. В среде SQL Server Management Studio выполните следующие действия.
    1. Зарегистрируйте сборку System.DirectoryServices.dll .
    2. Регистрация сборки MyAssembly .
    3. Создайте тип данных MyDateTime .
    4. Создайте новую таблицу, которая имеет такую же структуру таблицы как таблицу MyTable.
  5. Выполните следующую Вставка... ВЫБЕРИТЕ инструкции для заполнения таблицы MyTable:
    INSERT INTO MyTable SELECT c1 FROM TempTable

Ссылки

Дополнительные сведения о версии сборки посетите следующий веб-узел Microsoft Developer Network (MSDN):
Дополнительные сведения о том, как обновить сборку, обратитесь на веб-узле MSDN:
Дополнительные сведения о том, как удалить сборку, обратитесь на веб-узле MSDN:
Дополнительные сведения о том, как зарегистрировать сборку в базе данных SQL Server 2005, посетите следующий веб-узле MSDN:
Дополнительные сведения о служебной программы Bcp.exe обратитесь на веб-узле MSDN:
Свойства

Номер статьи: 949080 — последний просмотр: 23 февр. 2017 г. — редакция: 1

Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2012 Standard, Microsoft SQL Server 2012 Developer, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 R2 Developer, Microsoft SQL Server 2008 R2 Datacenter, Microsoft SQL Server 2008 R2 Workgroup, Microsoft SQL Server 2008 R2 Standard, Microsoft SQL Server 2008 Standard, Microsoft SQL Server 2008 Workgroup, Microsoft SQL Server 2008 Developer, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

Отзывы и предложения