Como actualizar ou desclassificar uma assemblagem que tenha uma assemblagem de referência para um objecto CLR numa instância do SQL Server 2005

Bugs #: 490 (correcção SQL)

Sumário

Quando tentar actualizar ou desclassificar uma assemblagem para um objecto de runtime (CLR) do idioma comum numa instância do Microsoft SQL Server 2005, é possível alterar a versão das assemblagens referenciadas nos metadados da assemblagem. Além disso, se utilizar uma assemblagem com nome para um objecto CLR, não é possível desactualizar a assemblagem utilizando a instrução de montagem ALTER.

INTRODUÇÃO

Este artigo descreve como actualizar ou desclassificar uma assemblagem que tenha uma assemblagem de referência para um objecto CLR numa instância do SQL Server 2005.

Mais informações

Como actualizar ou desclassificar uma assemblagem

No SQL Server 2005, pode utilizar a instrução de montagem ALTER actualizar ou desclassificar uma assemblagem autónoma que não foi criada com um nome seguro. Para uma assemblagem com nome, pode actualizar mas não é possível desactualizar a assemblagem utilizando a instrução de montagem ALTER.

Não é possível actualizar ou desclassificar uma assemblagem no seguinte cenário:

  • Assemblagem A é criada para um objecto de uma instância de CLR. Assemblagem A tem uma assemblagem de referência. A assemblagem referenciada é assemblagem B.

  • Assemblagem B não tem nenhuma assemblagem referenciada.

  • Recompilar a assemblagem A referenciar uma versão diferente da assemblagem B.

Neste cenário, pode utilizar a instrução de montagem ALTER actualizar assemblagem B para uma nova versão. Se a assemblagem B não é uma assemblagem com nome, também pode instalar a assemblagem B para uma versão antiga. No entanto, não é possível utilizar a instrução de montagem ALTER para actualizar ou desactualizar A assemblagem para a versão recompiled.

Este comportamento ocorre porque o SQL Server cria uma política de fusão de CLR quando criar a assemblagem A. Esta política de fusão de CLR mapeia automaticamente a versão da assemblagem B nos metadados da assemblagem A para a versão da assemblagem B. SQL Server carrega a nova versão da assemblagem B em tempo de execução quando actualiza ou desclassificar assemblagem B para uma outra versão. Este comportamento ocorre mesmo que a assemblagem A refere-se para a versão original da assemblagem B. No entanto, quando tentar actualizar ou desclassificar A assemblagem quando A assemblagem contém uma nova versão da assemblagem B nos metadados, a instrução de montagem ALTER falhará e receber mensagens de erro semelhantes à seguinte:

Mensagem de erro 1

Msg estado de 6529, nível de 16. o, 1, linha 1

MONTAGEM ALTER falhou porque a identidade da assemblagem referenciada 'RefAsm' foi alterado. Certifique-se a versão, nome e a chave pública não tenham sido alterados.

Mensagem de erro 2

Msg estado de 6282, nível de 16. o, 1, linha 1

MONTAGEM ALTER falhou porque as assemblagens referenciadas alteraria. A lista de assemblagem de referência deve ser o mesmo.

Actualizar ou desclassificar a assemblagem

Notas

  • Estes passos, actualizar ou desclassificar A assemblagem no cenário descrito na secção "Como proceder à actualização ou desactualizar um conjunto".

  • Este exemplo assume que as versões das duas assemblagens sejam 1.0.0.0 e as assemblagens são ambas escritas em c#. Quando seguir estes passos, tentar efectuar a actualização de montagem A e B de assemblagem para a versão 2.0.0.0.

Para actualizar ou desclassificar A assemblagem, siga estes passos.

  1. Efectuar cópias de segurança versão 1.0.0.0 da assemblagem B para uma pasta.

  2. Modificar e recompilar a assemblagem B para a versão 2.0.0.0.

  3. Utilize a instrução de montagem ALTER para actualizar o conjunto B no SQL Server 2005.

  4. Modificar e recompilar a assemblagem A versão 2.0.0.0. Quando fizer isto, referência da versão 1.0.0.0 da assemblagem B da cópia de segurança que efectuou no passo 1. Para tal, utilize a ferramenta de compilador Csc.exe com o parâmetro /reference . Por exemplo, utilize o seguinte comando:

    CSC /target:library /out:AssemblyA. dll AssemblyA. do CS AssemblyInfo.cs /reference: "BackupFolder\AssemblyBdll"Nota Para verificar a versão da assemblagem B nos metadados da assemblagem A, abra A assemblagem utilizando o utilitário Ildasm.exe. Em seguida, verifique se as informações de metadados para a assemblagem referida na secção de MANIFESTO .

  5. Utilize a instrução de montagem ALTER para actualizar A assemblagem no SQL Server 2005.

Como desactualizar uma assemblagem com nome

Se utilizar uma assemblagem com nome para um objecto CLR, SQL Server 2005 não suporta utilizando a instrução de montagem ALTER desactualizar assemblagens. Se tentar desclassificar a versão de uma assemblagem utilizando a instrução de montagem ALTER, receberá uma mensagem de erro semelhante à seguinte:

Msg 6579, 16 de nível de estado 1, linha 1
Alterar assemblagem da ' Asm1, versão = 1.1.0.0, idioma = neutro, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' para ' Asm1, versão = 1.0.0.0, idioma = neutro, publickeytoken = 3a52b896cff0513d, processorarchitecture = msil' não é uma actualização compatível.

Quando pretender desclassificar uma assemblagem com nome, siga estes passos:

  1. Largar todos os objectos que dependem da assemblagem.

  2. Largue a versão mais recente da assemblagem.

  3. Crie a versão mais antiga da assemblagem.

  4. Crie todos os objectos necessários que dependem da assemblagem.

Nota Pode actualizar uma assemblagem com nome utilizando a instrução de montagem ALTER. No entanto, se a actualização envolve uma assemblagem de referência, tem de seguir os mesmos passos listados na secção "Actualização ou uma diminuição no nível uma assemblagem".

Referências

Para mais informações sobre a instrução de montagem ALTER, visite o seguinte Web site da Microsoft Developer Network (MSDN):

http://msdn2.microsoft.com/en-us/library/ms186711.aspxPara mais informações sobre o utilitário de Ildasm.exe, visite o seguinte Web site da MSDN:

http://msdn2.microsoft.com/en-us/library/aa309387(VS.71).aspx

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

×