2010-05-06 18 views
22

Durante un recente riavvio del nostro server di sviluppo, SQL Server ha iniziato a utilizzare .NET 4.0 per SQLCLR. Ciò significa che nulla utilizzando il CLR in opera SQL, o almeno questa è la mia comprensione leggendo queste fonti:SQLCLR che utilizza la versione errata di .NET Framework

http://software.intel.com/en-us/blogs/2009/10/16/sql-server-2008-sqlclr-net-framework-version/

www.sqlskills.com/BLOGS/BOBB/post/On-SQL-Server-and-NET-40.aspx

Tutti otteniamo sono i messaggi di errore di questo tipo:

messaggio 6517, livello 16, stato 1, riga 1 Impossibile creare l'AppDomain "xxx.dbo [ddl] .3". La firma del tipo di metodo non è compatibile con Interop.

eseguendo l'istruzione (come suggerito da @ John-Christensen)

select * from sys.dm_clr_properties 

risultati nella seguenti informazioni:

*Name*  *Value* 
directory C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ 
version  v4.0.30319 
state  CLR is initialized 

Qualcuno sa come risolvere questo o come possiamo forzare SQL Server CLR per utilizzare una versione precedente di Framework?

risposta

12

In genere è possibile forzare un'applicazione .NET a utilizzare una versione specifica di .NET Framework specificando il tag supportedRuntime nel file di configurazione dell'applicazione.

Quindi è possibile provare a creare un sqlservr.exe.config nella cartella \Binn sotto il percorso principale dell'istanza SQL e specificare lì che si desidera utilizzare solo versioni .NET fino a 3,5. Controllare this MSDN link per la struttura del file di configurazione.

1

Hanno fatto delle scelte esplicite per garantire che l'installazione di .NET 4.0 non sia di impatto. Non dovrebbe utilizzare .NET 4.0 o nessuno dei nuovi file ad eccezione dei nuovi file shim, mscoree.dll e mscoreei.dll. Quelli dovrebbero essere retrocompatibili con il runtime 2.0. È possibile eseguire Process Explorer per vedere i numeri di versione delle DLL caricate per verificare che stia eseguendo il runtime corretto.

8

Dall'articolo e dalle mie ricerche sul Web, sembra che potrebbe accadere l'opposto: potresti registrare una DLL 4.0? Sembra che SQL Server 2008 carichi sempre il CLR 2.0 e non il CLR 4.0. Provare a eseguire questa dichiarazione, vi dirà quale versione server SQL è in esecuzione:

select * from sys.dm_clr_properties

+0

Quando eseguo la select * from sys.dm_clr_properties ricevo il seguente: "directory: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ versione: v4.0.30319 Stato: CLR è inizializzato" che per me indica che è v4.0 che è usato. –

+0

Ho aggiunto anche la risposta a questa affermazione alla domanda principale. –

6

nel tuo post di Intel che si fa riferimento, se lo si legge da vicino, dice:

SQL Server 2008 e l'imminente uscita SQL Server 2008 R2, in precedenza nome in codice "Kilimanjaro", saranno entrambi continuerà a caricare l'ultimo service rilascio della versione 2.0 CLR.

E più tardi:

Mentre le versioni future di SQL Server possono caricare le versioni più recenti del CLR, o anche sostenere il carico di molteplici CLR di all'interno del processo, versione 2.0 di il CLR è disponibile per SQLCLR all'interno di SQL Server 2008 e SQL Server 2008 R2.

Non so come si possa ottenere qualcosa come .NET 4 caricato in SQL Server 2008 R2 ....

14

Ho sperimentato lo stesso fastidioso problema. Nessuna delle cose di Geografia/Geometria nel mio database ha funzionato. Mi ha portato alcune reinstallazioni unsuccesfull di SQL server finalmente (alcune settimane più tardi!) trova la seguente chiave di registro il mio era stato impostato a '1'

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ OnlyUseLatestCLR

quando ho resettandolo su '0', e riavviato la macchina, le cose hanno funzionato di nuovo!

Hans

0

Ho avuto questo problema per un giorno e dopo l'aggiornamento mie finestre e .NET framework problema disappeared.the problema si riferisce al framework .Net cercare di ripararlo.

Problemi correlati