O aplicativo que faz referência ao Microsoft.SqlServer.Smo requer que assemblies adicionais sejam incluídos na máquina de destino?

StackOverflow https://stackoverflow.com/questions/76933

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu tenho um pequeno aplicativo que faz referência ao assembly Microsoft.SqlServer.Smo (para que eu possa exibir ao usuário uma lista de servidores e bancos de dados aos quais eles podem se conectar).

Meu aplicativo referenciava originalmente Microsoft.SqlServer.Smo e Microsoft.SqlServer.ConnectionInfo.As coisas funcionaram como esperado na minha caixa de desenvolvimento.

Quando instalei o aplicativo em uma máquina de teste, recebi um System.IO.FileNotFoundException.Os detalhes da mensagem incluíam o seguinte:Não foi possível carregar o arquivo ou assembly Microsoft.SqlServer.SmoEnum

Acabei resolvendo o problema referenciando os seguintes assemblies, além dos mencionados acima:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replicação

Alguém pode confirmar que eu realmente preciso incluir cada um desses assemblies adicionais em meu aplicativo (e, portanto, instalá-los nas máquinas do usuário), mesmo que o aplicativo seja compilado corretamente em minha caixa de desenvolvimento sem que eles sejam referenciados?

Foi útil?

Solução

Sim, eles precisam ser incluídos.Na máquina de desenvolvimento você provavelmente tem o SQL Server instalado, que coloca esses assemblies no Global Assembly Cache.Sempre que você cria, o Visual Studio apenas extrai deles do GAC.Ele também pressupõe que o GAC de qualquer computador em que será implantado também terá esses arquivos.Caso contrário, lança a exceção FileNotFound.

Outras dicas

Você precisa instalar dois arquivos MSI em uma máquina de destino, a saber:

1) SQLSysClrTypes.msi [este é necessário para C# -> SMO GAC]

2) SharedManagementObjects.msi

Para SQL Server 2014 você pode baixar estes aqui.

Além disso, você deve se certificar de que a versão está correta.Esses dois arquivos podem ser encontrados pesquisando um pouco no Google.Dessa forma, você não copia nada para o local e eles serão resolvidos pelo GAC.

Eu sei que esta é uma pergunta antiga, mas as respostas não foram satisfatórias.

Como o JIT está vinculado a assemblies externos em tempo de execução, essa pergunta não pode ser respondida sem analisar seu código e ver o que você chama e, por sua vez, o que essas chamadas chamam, etc.

Se você quiser analisar isso sozinho, sua melhor aposta seria fazer referência apenas à montagem necessária e depois aprender com as exceções e exceções internas o que aconteceu.

Outra coisa que você deve analisar é por que os quatro assemblies mencionados não estão no GAC.Com certeza parece que deveriam ser.

Para mim, essa resposta acabou não sendo verdade.Adicionei as referências acima, mas sem resolução.No final das contas, descobri que só precisava da referência:

Microsoft.SqlServer.Smo

...e a seguinte resolução:

Recebo o erro "Foi feita uma tentativa de carregar um programa com formato incorreto" em um projeto de replicação do SQL Server

Para resumir, eu precisava habilitar meu IIS 6 para habilitar aplicativos de 32 bits no pool de aplicativos do IIS.Isso ocorre porque eu tinha o Win 7 x64, mas uma instalação do SQL x86.Pena que a mensagem de erro não pode ser mais específica, hein?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top