¿La aplicación que hace referencia a Microsoft.SqlServer.Smo requiere que se incluyan ensamblados adicionales en la máquina de destino?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Tengo una pequeña aplicación que hace referencia al ensamblaje Microsoft.SqlServer.Smo (para poder mostrarle al usuario una lista de servidores y bases de datos a los que puede conectarse).

Mi aplicación originalmente hacía referencia a Microsoft.SqlServer.Smo y Microsoft.SqlServer.ConnectionInfo.Las cosas funcionaron como se esperaba en mi caja de desarrollo.

Cuando instalé la aplicación en una máquina de prueba, recibí un System.IO.FileNotFoundException.Los detalles del mensaje incluían lo siguiente:No se pudo cargar el archivo o ensamblado Microsoft.SqlServer.SmoEnum

Finalmente resolví el problema haciendo referencia a los siguientes ensamblados además de los mencionados anteriormente:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replicación

¿Alguien puede confirmar que realmente necesito incluir cada uno de estos ensamblados adicionales en mi aplicación (y por lo tanto instalarlos en las máquinas de los usuarios) aunque la aplicación se compila bien en mi caja de desarrollo sin hacer referencia a ellos?

¿Fue útil?

Solución

Sí, es necesario incluirlos.En la máquina de desarrollo probablemente tenga instalado SQL Server, que coloca esos ensamblados en la caché de ensamblados global.Cada vez que construyes, Visual Studio simplemente los extrae del GAC.También supone que el GAC de cualquier computadora en la que se implementará también tendrá esos archivos.De lo contrario, genera la excepción FileNotFound.

Otros consejos

Debe instalar dos archivos MSI en una máquina de destino, a saber:

1) SQLSysClrTypes.msi [este es necesario para C# -> SMO GAC]

2) Objetos de gestión compartida.msi

Para SQL Server 2014 puede descargar estos aquí.

Además, debes asegurarte de que la versión sea correcta.Estos dos archivos se pueden encontrar buscando un poco en Google.De esta manera no copia nada al local y se resolverán desde GAC.

Sé que esta es una vieja pregunta, pero las respuestas no fueron satisfactorias.

Dado que JIT se vincula a ensamblados externos en tiempo de ejecución, esta pregunta no se puede responder sin analizar su código y ver a qué llama y, a su vez, a qué llaman esas llamadas, etc.

Si desea analizar esto usted mismo, lo mejor sería hacer referencia solo al ensamblaje que necesita y luego aprender de las excepciones y excepciones internas lo que sucedió.

Otra cosa que deberían investigar es por qué las cuatro asambleas que usted menciona no están en el GAC.Seguro que parece que deberían serlo.

Para mí esta respuesta resultó no ser cierta.Agregué las referencias anteriores pero sin resolución.Al final descubrí que sólo necesitaba la referencia:

Microsoft.SqlServer.Smo

...y la siguiente resolución:

Recibo el error "Se intentó cargar un programa con un formato incorrecto" en un proyecto de replicación de SQL Server

En resumen, necesitaba habilitar mi IIS 6 para habilitar la aplicación de 32 bits en el grupo de aplicaciones IIS.Esto se debe a que tenía Win 7 x64 pero una instalación de SQL x86.Lástima que el mensaje de error no pueda ser más específico, ¿eh?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top