DetailPage-MSS-KB

Base de Dados de Conhecimento

ID do artigo: 949080 - Última revisão: segunda-feira, 7 de janeiro de 2013 - Revisão: 1.0

 

Nesta página

Sintomas

Considere os cenários a seguir.

Cenário 1

Criar uma rotina de runtime (CLR) de linguagem comum que faz referência um assembly do Microsoft.NET Framework. O assembly do.NET Framework não está documentado no Artigo da Base de dados de Conhecimento 922672. Em seguida, Instale o.NET Framework 3.5 ou um hotfix com base no.NET Framework 2.0.

Cenário 2

Criar um assembly e, em seguida, registrar o assembly em um banco de dados Microsoft SQL Server. Em seguida, você instale uma versão diferente do assembly no Global Assembly Cache (GAC).

Quando você executar a rotina CLR ou usa o assembly de qualquer um desses cenários no SQL Server, você recebe uma mensagem de erro semelhante à seguinte:

Servidor: Msg 6522, nível 16, estado 2, linha 1
Um.NET Framework Erro durante a execução da rotina definida pelo usuário ou função agregada 'getsid':

System.IO.FileLoadException: Não foi possível carregar arquivo ou assembly ' System. DirectoryServices, versão = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' ou uma de suas dependências. Conjunto de módulos no host armazenamento tem uma assinatura diferente do assembly no GAC. (Exceção de HRESULT: 0x80131050)

System.IO.FileLoadException:

Causa

Quando o CLR carrega um assembly, o CLR verifica que é o mesmo assembly no GAC. Se o mesmo assembly está no GAC, o CLR verifica que as identificações de versão do módulo (MVIDs) desses assemblies correspondem. Se o MVIDs desses módulos (assemblies) não coincidem, você receberá o erro de mensagem que o Menciona a seção "Sintomas".

Quando um assembly é recompilado, MVID das alterações de assembly. Portanto, se você atualizar o.NET Framework, os assemblies do.NET Framework ter diferentes MVIDs porque esses módulos são recompilados. Além disso, IF atualizar seu próprio assembly, o assembly é recompilado. Portanto, o conjunto também possui um diferente MVID.

Como Contornar

Solução alternativa 1

Para contornar o cenário 1 na seção "Sintomas", você deve atualizar manualmente os assemblies do.NET Framework no SQL Server. Para fazer isso, use a instrução ALTER ASSEMBLY para ponto para o novo versão do assembly do.NET Framework a seguinte pasta:
%Windir%\Microsoft.NET\Framework\Versão
ObservaçãoVersão representa o versão do.NET Framework que você instalado ou atualizado.

Solução alternativa 2

Para contornar o cenário 2 pol "Sintomas" seção, use a instrução ALTER ASSEMBLY para atualizar o assembly em o banco de dados.

Se o problema ainda existir Após fazer isso, descarte o assembly do banco de dados e, em seguida registrar o nova versão do o assembly no banco de dados.

Situação

Microsoft confirmou que este é um problema nos produtos Microsoft que estão listados na seção "Aplica-se a".

Mais Informações

Não recomendamos que você use os assemblies do.NET Framework que não estão documentados no artigo da Base de dados de Conhecimento 922672. Artigo da Base de dados de Conhecimento 922672 lista os assemblies que são testados no ambiente hospedado pelo CLR do SQL Server.

Para obter mais informações, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
922672  (http://support.microsoft.com/kb/922672/ ) Política de suporte para assemblies do.NET Framework não testados no ambiente hospedado no SQL Server CLR

Descrição de rotinas CLR

Rotinas de CLR incluir os seguintes objetos são implementados por meio de Integração do SQL Server com o CLR do.NET Framework:
  • Funções de valor escalar definida pelo usuário (scalar UDFs)
  • Tabela definida pelo usuário funções com valor (TVFs)
  • Procedimentos definidos pelo usuário (UDPs)
  • Disparadores definidos pelo usuário
  • Tipos de dados definidos pelo usuário
  • Agregações definidas pelo usuário

Módulos (assemblies) para atualizar depois de instalar o.NET Framework 3.5

Depois de instalar o.NET Framework 3.5, você deve usar o ALTER ASSEMBLY instrução para atualizar os seguintes assemblies:
  • 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
  • RegularExpressions. dll
Esses assemblies são na seguinte pasta:
%Windir%\Microsoft.NET\Framework\v2.0.50727

Como preservar os dados de tipos de dados definidos pelo usuário depois de soltar um assembly

Se você soltar um assembly que usa um tipo de dados definidos pelo usuário do SQL Server, você pode usar um dos seguintes métodos para preservar os dados.

Suponha que este é o cenário:
  • Criar um assembly cujo nome é MyAssembly.
  • As referências de assembly MyAssembly o System.DirectoryServices.dll do assembly.
  • Você tem um tipo de dados definidos pelo usuário cujo nome é MyDateTime.
  • O tipo de dados MyDateTime usa o myAssembly assembly.
  • Criar uma tabela cujo nome é MyTable.
  • A tabela de MyTable contém os dados dos dados MyDateTime Digite.

Método 1: Usar o utilitário bcp.exe.

  1. Use o utilitário Bcp.exe exe em conjunto com a opção – n para copiar os dados da tabela MyTable em um arquivo. Por exemplo, executar o comando a seguir em um prompt de comando:
    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n –SSQLServerName  -T
  2. Em SQL Server Management Studio, execute as seguintes etapas:
    1. Descarte a tabela de MyTable.
    2. Solte o tipo de dados MyDateTime .
    3. Solte o System.DirectoryServices.dll assembly.
    4. Descarte o assembly MyAssembly .
  3. Em SQL Server Management Studio, execute as seguintes etapas:
    1. Registrar o System.DirectoryServices.dll assembly.
    2. Registre o assembly MyAssembly .
    3. Crie o tipo de dados MyDateTime .
    4. Criar uma nova tabela que tenha a mesma estrutura da tabela como a tabela de MyTable.
  4. Use o utilitário Bcp.exe exe em conjunto com a opção – n para Importe os dados do arquivo para a tabela de MyTable. Por exemplo, executar o comando a seguir em um prompt de comando:
    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n –SSQLServerName  -T

Método 2: Use INSERT... Instrução SELECT

Suponha que o tipo de dados MyDateTime ocupa 9 bytes no armazenamento.
  1. No SQL Server Management Studio, criar uma nova tabela que contém uma coluna do tipo de dados VARBINARY(9) ao executar o seguinte instrução:
    CREATE TABLE TempTable (c1 VARBINARY(9))
  2. Execute o seguinte INSERT... Selecione instrução para preencher o Tabela TemTable:
    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable
  3. Em SQL Server Management Studio, execute as seguintes etapas:
    1. Descarte a tabela de MyTable.
    2. Solte o tipo de dados MyDateTime .
    3. Solte o System.DirectoryServices.dll assembly.
    4. Descarte o assembly MyAssembly .
  4. Em SQL Server Management Studio, execute as seguintes etapas:
    1. Registrar o System.DirectoryServices.dll assembly.
    2. Registre o assembly MyAssembly .
    3. Crie o tipo de dados MyDateTime .
    4. Criar uma nova tabela que tenha a mesma estrutura da tabela como a tabela de MyTable.
  5. Execute o seguinte INSERT... Selecione instrução para preencher o Tabela de MyTable:
    INSERT INTO MyTable SELECT c1 FROM TempTable

Referências

Para obter mais informações sobre a versão do assembly, visite o seguinte site da Web Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/51ket42z (vs. 80). aspx (http://msdn2.microsoft.com/en-us/library/51ket42z(VS.80).aspx)
Para obter mais informações sobre como atualizar um assembly, visite o seguinte da MSDN site:
http://msdn2.microsoft.com/en-us/library/ms186711.aspx (http://msdn2.microsoft.com/en-us/library/ms186711.aspx)
Para mais informações sobre como descartar um assembly, visite o seguinte da MSDN site:
http://msdn2.microsoft.com/en-us/library/ms177514.aspx (http://msdn2.microsoft.com/en-us/library/ms177514.aspx)
Para obter mais informações sobre como registrar um assembly em um banco de dados do SQL Server 2005 visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms189524.aspx (http://msdn2.microsoft.com/en-us/library/ms189524.aspx)
Para obter mais informações sobre o utilitário Bcp.exe exe, visite o seguinte site da MSDN:
http://msdn2.microsoft.com/en-us/library/ms162802.aspx (http://msdn2.microsoft.com/en-us/library/ms162802.aspx)

A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbexpertiseadvanced kbtshoot kbprb kbmt KB949080 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 949080  (http://support.microsoft.com/kb/949080/en-us/ )
Compartilhar
Opções de suporte adicionais
Fóruns de Suporte do Microsoft Community
Contate-nos diretamente
Localize um parceiro certificado da Microsoft
Microsoft Store