2011-12-16 19 views
6

Sto usando .net framework 4.0 e sto lavorando sull'installazione di distribuzione Web, ho fatto riferimento agli assembly SMO di sql server 2008 e quando richiama la funzione ExecuteNonQuery nella mia configurazione utilizzando Smo Assemblies che mi dà questo errore "L'assemblaggio in modalità mista è costruito contro la versione 'v2.0.50727' del runtime e non può essere caricato nel runtime 4.0 senza ulteriori informazioni di configurazione." ma a volte funziona correttamente nel mio codice ma qualche volta dà questo errore,SMO in .Net Framework 4.0

Ho usato la stessa classe, lo stesso metodo a volte funziona correttamente e qualche volta dà questo errore, sono completamente sbiadito con questo errore, Non ho trovato alcuna ragione per questo e voglio anche sapere che gli assembly SMO sono disponibili in .Net framework v4.0?

risposta

10

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

Questo è un problema noto. L'utilizzo di SMO rispetto a .Net 4.0 non è stato firmato o annunciato da Microsoft.

C'è un'opzione non supportata per ottenere questo lavoro (aggiungere questo al vostro app.config):

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

Questo non funziona per i test unitari. – Case

+0

La soluzione proposta da jimasp non funziona. Sono stupito del fatto che non esista ancora un approccio preciso per affrontare questo problema. Ho cercato più di due dozzine di link ma nessuna risoluzione. Utilizzando SqlClient ho un problema con le istruzioni "GO" quindi non posso usare neanche questo approccio. Nota: ho creato un programma di installazione di Web Steup e da questo chiamo un progetto Windows Form per l'esecuzione di questo codice relativo allo script T-Sql usando SMO. –

+0

Ho provato questo e funziona per me utilizzando Windows Form. La mia preoccupazione è che non so quali effetti secondari utilizzareLegacyV2RuntimeActivationPolicy = "true" potrebbe andare avanti. – MikeMalter

3

Perché si sta utilizzando "assembly SMO" per chiamare ExecuteNonQuery?

Perché non basta fare riferimento e utilizzare ADO.NET? Vedi System.Data.SqlClient.ExecuteNonQuery(...)

+11

Questo probabilmente non è rilevante per questo particolare OP, ma sono necessarie le librerie SMO quando si desidera chiamare [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) che ti dà la possibilità di eseguire uno script sql con la parola chiave * GO * in esso contenuta. – slugster

+0

Ho provato ADO (così come l'approccio utilizzato nella risposta di seguito) e l'ho fatto funzionare. Potrei continuare a farlo perché sono preoccupato per gli effetti collaterali di useLegacyV2RuntimeActivationPolicy = "true". – MikeMalter

+0

Sto eseguendo il mio codice dai test delle unità, quindi ho scelto questa opzione, , quindi nessuno dei miei script SQL può avere istruzioni GO. soluzione alternativa: è possibile eseguire la scansione degli script SQL per GO e dividere in script più piccoli. – Sean

0

mi sono imbattuto in questo problema e aggiungendo il tag di cui sopra (vedi @jimasp commento) non sembra funzionare, però, avevo aggiunto al app.config per il progetto che il codice è stato situato in, tuttavia, era usato come p arte di un'applicazione console. Quando l'ho aggiunto all'app.config della console, è stato eseguito senza problemi. Lo stavo aggiungendo alla app.config sbagliata.

Problemi correlati