2009-07-27 16 views
5

Ho una procedura memorizzata CLR che fa riferimento a un assembly creato in VS 2008 che utilizza Linq. Chiamiamo questo assembly "MyLib".Utilizzo di .Net 3.5 assembly SQL 2005 CLR?

Non riesco a ottenere "MyLib" nel mio database SQL 2005. Faccio la seguente:

CREATE ASSEMBLY [MyLib] 
    FROM 'C:\MyLib\bin\Release\MyLib.dll' 
WITH PERMISSION_SET = UNSAFE 
GO 

Ma ottengo l'errore:

Assembly 'MyLib' references assembly 'system.core, version=3.5.0.0, 
culture=neutral, publickeytoken=b77a5c561934e089.', which is not present 
in the current database. SQL Server attempted to locate and automatically 
load the referenced assembly from the same location where referring assembly 
came from, but that operation has failed (reason: 2(error not found)). Please 
load the referenced assembly into the current database and retry your request. 

C'è un modo più semplice per ottenere tutti i NET 3.5 assemblee in SQL 2005 CLR, altro da me scrivere fuori un comando 'CREATE ASSEMBLY' per ognuno? Esiste un modo "migliore pratica" per farlo?

+0

si potrebbe pensare che qualcuno ha preso la briga di fare un grande script T-SQL per il lotto di loro e post-it in rete ... ma Non riesco a trovarne uno :( – Thorarin

+0

Dalla documentazione: SQL Server cerca anche tutti gli assembly dipendenti di questo assembly nella stessa posizione e li carica anche. – Suncat2000

risposta

2

Partenza this thread. Fondamentalmente è necessario caricare manualmente i nuovi assembly, anziché caricarli automaticamente dalla cache di assembly globale.

(CLR per la versione 2.0 e 3.5 è lo stesso)

+0

Sweet - hai appena seguito quella discussione e funziona! Awesome :) –

+0

Hai dimenticato di inserire il codice che ha funzionato: CREATE ASSEMBLY [System.Core] \t DA 'C: \ Programmi \ Reference Assembly \ Microsoft \ Framework \ v3.5 \ System.Core.dll' WITH PERMISSION_SET = UNSAFE GO Una volta eseguita l'operazione, l'assembly "MyLib" ha funzionato perfettamente. –

+0

Inoltre dimenticato: ALTER [database] SET TRUSTWORTHY ON – Suncat2000

1

SQL Server 2005 fornito con CLR v2.0.50727 - che ha NON include ancora LINQ.

Non sarà possibile utilizzare LINQ in assembly CLR SQL 2005: è necessario attenersi al set originale di assembly .NET 2.0.

L'unica possibilità minima sarebbe quella di includere tutti i relativi gruppi di sistema 3.5 (ad esempio System.Linq, System.Data.Linq) nella distribuzione: sono tutti basati sul CLR .NET 2.0 in modo che essere possibile - personalmente non mi preoccuperei di provare, sembra troppo lavoro e troppa fatica.

SQL Server 2008 R2 molto probabilmente verrà spedito con un nuovo CLR incluso (solo la mia ipotesi - nessuna conferma ufficiale o annuncio ancora disponibile, AFAIK).

Marc

+0

Questo progetto è uno che ho appena rilevato e il codificatore precedente ha iniziato ad aggiungere Linq to TUTTO ma non ho mai provato a registrare nuovamente l'assembly in SQL 2005. Se hai ragione, ho un * LOTTO * di lavoro a modo mio. Sto segretamente sperando di sbagliare (quindi che non devo fare un sacco di lavoro), ma non spero molte speranze per quello. –

+0

se controlli la discussione nel link nel post di Thorarin, dubito che avrai molta fortuna :-( –