sexta-feira, 18 de junho de 2010

SQL Server 2008, CLR, .NET Framework 4.0 e erro 6218

Bom dia pessoal. Vamos de um post rápido?

Estou eu trabalhando alegremente com o Visual Studio 2010 e após criar uma função simples, fui registrar o assembly no SQL Server 2008 com o seguinte comando:

CREATE ASSEMBLY [SrNimbus.CleansingKit]
FROM 'C:\Teste\SrNimbus.CleansingKit.dll'
WITH PERMISSION_SET = SAFE
go

Aí apareceu o seguinte erro: "Msg 6218, Level 16, State 3, Line 1
CREATE ASSEMBLY for assembly 'SrNimbus.CleansingKit' failed because assembly 'SrNimbus.CleansingKit' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
"


Adoro esses erros que efetivamente não dizem coisa alguma. A validação falhou, mas qual o motivo? Pensei em algumas possibilidades e tive uma idéia básica, vou compilar a minha DLL definindo no projeto compatibilidade com o .NET Framework 3.5.
Com a DLL recompilada eu tentei criar o assembly e tudo funcionou perfeitamente, como esperado.

O curioso é que se você tentar fazer o mesmo usando o SQL Server 2008 R2 a mensagem de erro já é outra: "Msg 6257, Level 16, State 1, Line 1
CREATE ASSEMBLY for assembly 'SrNimbus.CleansingKit' failed because the assembly is built for an unsupported version of the Common Language Runtime.
". Beeeeeemmmm melhor que o SQL Server 2008 SP1.


Sem querer entrar no mérito do R2 não suportar o .NET Framework 4.0, no SQL Server 2008 (e possivelmente no 2005), quando você estiver tendo um erro genérico de validação do seu assembly, pode ser que você esteja tentando utilizar uma DLL compilada para uma versão do .NET framework não suportada pelo SQL Server.
Do R2 para frente eu espero que a mensagem seja sempre a 6257, clara e direta.

Falei que ia ser um post rápido...
[]s
Luciano Caixeta Moreira - {Luti}
Sr. Nimbus Serviços em Tecnologia Ltda
luciano.moreira@srnimbus.com.br
www.twitter.com/luticm

4 comentários:

  1. E ai Luciano! tudo bem?

    Já me deparei com este problema também... o pior é que o Visual Studio 2010 permite criar projetos SQL CLR com .NET 4.0...

    Mas você sabe se já esta previsto no SQL Server 2011 ou numa nova SP do 2008 a compatibilidade com .NET 4.0?

    ResponderExcluir
  2. Eu ainda não tive contato com o SQL 2011 então não sei dizer. Se fosse para apostar, eu diria que sim, mas é só um palpite. :-(

    []s
    Luti

    ResponderExcluir
  3. Muito interessante, a mensagem de erro ainda é melhor do que quando você faz deploy de um projeto do SSAS com um usuário de dominio em uma role que não existe no dominio de destino.
    O erro é simplismente "."
    fantastico não acha?

    Acho que os testes da Microsoft tem que incluir algumas verificações de mensagens de erros, claro que isso não pode ser testado automaticamente...

    ResponderExcluir
  4. olá. Como compilar a DLL definindo compatibilidade com o .NET Framework 3.5?

    ResponderExcluir