Desenvolvimento de sistemas

Fernando Lino
E-mail: fernandolinox@gmail.com
Site: http://flinox.blogspot.com

sábado, 30 de outubro de 2010

Erro de Assembly ao usar ODP.net ( Oracle.DataAccess )

A Oracle disponibiliza uma excelente biblioteca para acesso ao banco de dados Oracle pelo .NET, chama-se ODP.net ( Oracle Data Provider ) tanto para 10G como para 11G.

O ODP.net possui diversos recursos mais interessantes do que o nativo do asp.net ( System.Data.Oracle ) com o ODP.net você pode implementar maneiras de rastrear qualquer operação de um usuário do sistema no banco de dados ( ClientID ), sem contar o fato de o ODP.net estar em pleno vapor sendo continuada pela Oracle.


Após instalar o ODP.net na adaptação de seu projeto pode haver um erro de Assembly conforme abaixo:

Error x
O assembly 'nomedoassembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 
usa 'Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342', 
que possui uma versão mais recente que o assembly 'Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342' usado como referência.


Este erro ocorre por algum conflito entre o Oracle.DataAccess registrado no Machine.config, para saber quais assemblys estão registrados, abra o console do visual studio e rode o seguinte comando:

gacutil /l | find /i "Oracle" > c:\oracle.txt


Com o comando find será gerado um arquivo .txt com o resultado do find, o resultado será algo assim:

Oracle.DataAccess, Version=2.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86
System.Data.OracleClient.resources, Version=2.0.0.0, Culture=pt-BR, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL
Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.10.1.Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.10.1.Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.10.2.Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342
Policy.9.2.Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342  Policy.9.2.Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342 
Desinstale então os assemblys da versão 1.0 com o seguinte comando:
gacutil /u "Oracle.DataAccess, Version=1.102.2.20, Culture=neutral, PublicKeyToken=89b483f429c47342"
gacutil /u "Oracle.DataAccess, Version=10.2.0.100, Culture=neutral, PublicKeyToken=89b483f429c47342" 
Caso não tenha o Oracle.DataAccess da versão 2.0 registrada, você pode usar o comando abaixo para registrar a dll, lembrando que você deve verificar o caminho de instalação de seu Oracle ODP.net:
C:\>gacutil.exe -i "C:\oracle\product\10.2.0\client_2\ODP.NET\bin\2.x\Oracle.DataAccess.dll"

3 comentários:

  1. Cara, Parabéns pelo seu post! me ajudou muito!!!
    Abraços...

    ResponderExcluir
  2. Rs... obrigado !!! minha intenção realmente é ajudar... também tive muita dificuldade com a implantação do ODP.net no começo...

    Abraços,

    ResponderExcluir
  3. krinha veja se consegue me ajudar, consegui executar os procedimentos e funcionou para o console c# que fiz, porem quando acesso pelo webforms o erro persiste.

    ResponderExcluir