2008-09-16 9 views
5

Tengo una pequeña aplicación que hace referencia al ensamblado Microsoft.SqlServer.Smo (para que pueda mostrar al usuario una lista de las bases de datos de los servidores & a los que se pueden conectar).La referencia de la aplicación Microsoft.SqlServer.Smo requiere ensamblados adicionales para ser incluidos en Target Machine?

Mi aplicación hace referencia originalmente 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í una System.IO.FileNotFoundException. Los detalles del mensaje incluyen los siguientes: No se pudo cargar el archivo o ensamblado Microsoft.SqlServer.SmoEnum

que finalmente se resolvió el problema haciendo referencia a los siguientes montajes, además de los mencionados anteriormente:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replication

¿Alguien puede confirmar que realmente necesito incluir cada uno de estos ensamblajes adicionales en mi aplicación (y por lo tanto instalarlos en las máquinas del usuario) aunque la aplicación se base en mi caja de desarrollo sin que se mencione?

+0

Gracias por esta pregunta, ¡aprendí mucho de eso! – StevenMcD

Respuesta

2

Sí, deben ser incluidos. En la máquina de desarrollo, probablemente tenga instalado SQL Server, que coloca esos ensamblajes en la caché de ensamblaje global. Cada vez que construyes, Visual Studio simplemente los extrae del GAC. También asume que el GAC de cualquier computadora en la que se implementará también tendrá esos archivos. Si no, arroja la excepción FileNotFound.

0

Desde JIT enlaces externos a las asambleas en tiempo de ejecución, esta pregunta no puede responderse sin un análisis del código y ver lo que usted llama y, a su vez, lo llaman esas llamadas, etc.

Si desea Analícela usted mismo, su mejor opción sería hacer referencia únicamente a la asamblea que necesita y luego aprender de las excepciones y excepciones internas de lo que sucedió.

Otra cosa que debe considerar es por qué los cuatro conjuntos que menciona no están en el GAC. Seguro que parece que deberían estarlo.

0

Para mí, esta respuesta resultó no ser cierta. Agregué las referencias anteriores, pero sin resolución. En última instancia, me encontré con que sólo necesitaba la referencia:

Microsoft.SqlServer.Smo

... y la siguiente resolución:

I get a "An attempt was made to load a program with an incorrect format" error on a SQL Server replication project

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

+0

Para realizar un seguimiento ... al implementar en mi servidor web de prueba, me encontré con el error anterior. Estaba desconcertado y busqué en el GAC y encontré todos los dlls mencionados anteriormente. Sin embargo, en el directorio bin de mi aplicación web, noté que solo tenía: Microsoft.SqlServer.BatchParser Microsoft.SqlServer.Replication ... así que los quité y todo funcionó. Creo que mi conjunto parcial de archivos dependientes estaba causando que .net cargara mi conjunto parcial de archivos en el contenedor y no desde el GAC como debería haber sido. Por lo tanto, parece que la mejor práctica es no implementar estas interoperabilidades. – ebol2000

4

Necesita instalar dos archivos MSI en un equipo de destino, a saber:

1) SQLSysClrTypes.msi [ésta es necesaria para C# -> SMO GAC]

2) SharedManagementObjects.msi

Para SQL Server 2014 puede descargar estos here.

Además, debe asegurarse de que la versión sea correcta. Estos dos archivos se pueden encontrar con un poco de Google. De esta forma no copiará nada al & local, se resolverán desde GAC.

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

Cuestiones relacionadas