2011-12-16 36 views
6

Estoy utilizando .NET Framework 4.0 y estoy trabajando en la instalación de implementación web, he hecho referencia a las SMO Ensambla de SQL Server 2008, y cuando llamo a la función ExecuteNonQuery en mi configuración usando Smo Ensemblies me da este error "El ensamblado de modo mixto se basa en la versión 'v2.0.50727' del tiempo de ejecución y no se puede cargar en el tiempo de ejecución 4.0 sin información de configuración adicional." pero a veces funciona correctamente en mi código, pero a veces da este error,SMO Ensambles en .NET Framework 4.0

Tengo el uso de la misma clase, el mismo método a veces se ejecuta correctamente y en algún momento da este error, estoy completamente fundido con este error, No pude encontrar ninguna razón para eso y también quiero saber si los ensamblados SMO están disponibles en .Net framework v4.0?

Respuesta

10

Desde: http://social.msdn.microsoft.com/Forums/en-US/sqlsmoanddmo/thread/533f7044-1109-4b7a-a697-2621f23017d6

Este es un problema conocido. El uso de SMO contra .Net 4.0 no ha sido firmado o anunciado por microsoft.

Hay una opción que no admitida a conseguir este trabajo (agregar esto a su app.config):

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0"/> 
    </startup> 
</configuration> 
+3

Esto no funciona para pruebas unitarias. – Case

+0

La solución propuesta por jimasp no funciona. Me sorprende que todavía no haya un enfoque exacto para abordar este problema. Busqué más de dos docenas de enlaces pero no resolvió. Usando SqlClient tengo un problema con las declaraciones "GO", por lo que tampoco puedo usar ese enfoque. Nota: He creado un instalador Web Steup y de eso llamo un proyecto de Windows Form para ejecutar este código relacionado con el script T-Sql usando SMO. –

+0

Intenté esto y funciona para mí usando Windows Forms. Mi preocupación es que no sé qué efectos secundarios useLegacyV2RuntimeActivationPolicy = "true" podría tener en el futuro. – MikeMalter

3

¿Por qué está utilizando "ensamblados SMO" para llamar a ExecuteNonQuery?

¿Por qué no solo hace referencia y usa ADO.NET? Ver System.Data.SqlClient.ExecuteNonQuery(...)

+11

Esto probablemente no sea relevante para este OP en particular, pero necesita las bibliotecas SMO cuando desea llamar a [ServerConnection.ExecuteNonQuery()] (http://msdn.microsoft.com/query/dev11.query?appId= Dev11IDEF1 & l = EN-US & k = k (Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery); k (SolutionItemsProject); k (TargetFrameworkMoniker-.NETFramework, Version% 3Dv4.0); k (DevLang-csharp) & rd = true) que le da la capacidad de ejecutar un script sql con la palabra clave * GO * en él. – slugster

+0

Probé ADO (así como el enfoque utilizado en la respuesta a continuación) y lo hice funcionar. Me puedo quedar con eso ya que estoy preocupado por los efectos secundarios de useLegacyV2RuntimeActivationPolicy = "true". – MikeMalter

+0

Estoy ejecutando mi código de pruebas unitarias, así que en el que fui para esta opción, , ninguno de mis scripts SQL puede tener sentencias GO. solución alternativa: puede escanear sus scripts SQL para GO y dividirlos en scripts más pequeños. – Sean

0

yo mismo encontré con este tema y añadiendo la etiqueta antes mencionada (ver comentario @jimasp) no parece funcionar, sin embargo, había añadido a la app.config para el proyecto que el código fue ubicado en, sin embargo, estaba siendo utilizado como p arte de una aplicación de consola. Cuando lo agregué a la aplicación app.config de la consola se ejecutó sin problemas. Lo había estado añadiendo a la aplicación incorrecta .config.

Cuestiones relacionadas