Ensambladores

24/03/2008 - 13:00 por bogal | Informe spam
Hola



Estoy empezando a crear ensambladores



Mi función es



Imports Microsoft.SqlServer.Server

Imports System.Data.SqlClient

Imports System.IO

Public Class clr

Inherits System.Web.UI.Page

<SqlFunction()> Public Function texto_descarga(ByVal numero As Byte, ByVal
c0 As Integer, ByVal nversion As Byte) As String

Dim strfichero As String, strruta As String, strfichero_principal As String
= Nothing

strruta = "Aplicaciones/"

strfichero = "aplicacion"

strfichero &= c0 & IIf(nversion > 0, "(" & nversion & ")", "")

strruta = Server.MapPath(strruta)

For Each foundFile As String In My.Computer.FileSystem.GetFiles(strruta,
FileIO.SearchOption.SearchTopLevelOnly, strfichero & ".*")

strfichero_principal = foundFile.Substring(InStrRev(foundFile, "\"))

Exit For

Next

If strfichero_principal Is Nothing Then strfichero_principal = "Falta " &
strfichero

Return strfichero_principal

End Function



End Class





Compilo y obtengo la dll con vbc



Luego me creo el ensamblador así



CREATE ASSEMBLY clr

'FROM 'C:\clr.dll' WITH PERMISSION_SET = safe



Pero me sale un error



Error de ejecución SQL.



Instrucción SQL ejecutada: CREATE ASSEMBLY clr FROM 'C:\clr.dll' WITH
PERMISSION_SET = safe

Origen del error: .Net SqlClient Data Provider

Mensaje de error: Error de CREATE ASSEMBLY para el ensamblado 'clr' debido a
un error de comprobación del ensamblado 'System.Drawing'. Compruebe si los
ensamblados a los que se hace referencia están actualizados y son de
confianza (para external_access o unsafe) para ejecutarse en la base de
datos. Después de este mensaje aparecen los mensajes de error de comprobación
de CLR, si los hay


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000053][se encontró address of Byte] Se esperaba un tipo numérico en la
pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000043][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000027][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ : System.Drawing.Icon::GetShort][mdToken=0x600045f][desplazamiento
0x00000002] Los punte...






No sé qué puede fallar. ¿Tengo que actualizar las dll a las que llaman los 3
imports? ¿Dónde obtengo las actualizaciones?




Por lo que parece, el system.drawing es llamado por System.Web.UI.Page



Pero si no pongo el inherits, no me reconoce el server.mappath, y ese es mi
problema, el usar el server.mappath. Requiere el System.Web.UI.Page



¿Me podeis guiar, por favor?



Muchas gracias de antemano
 

Leer las respuestas

#1 Jesús López
24/03/2008 - 17:53 | Informe spam
No se llaman ensambladores se llaman ensamblados.

1) Tu clase clr no debe heredar de System.Web.UI.Page. En realidad no debe
heredar de ninguna clase.
2) Las funciones deben ser Shared.
3) Quita la referencia a System.Drawing.dll y a System.Web.dll
4) Busca otra manera de localizar la ruta al archivo que no sea utilizando
Server.MapPath
5) Si tu función va a acceder a recursos externos tienes que crear el
ensamblado con EXTERNAL ACCESS.

Saludos:

Jesús López
www.solidq.com



"bogal" escribió en el mensaje
news:
Hola



Estoy empezando a crear ensambladores



Mi función es



Imports Microsoft.SqlServer.Server

Imports System.Data.SqlClient

Imports System.IO

Public Class clr

Inherits System.Web.UI.Page

<SqlFunction()> Public Function texto_descarga(ByVal numero As Byte, ByVal
c0 As Integer, ByVal nversion As Byte) As String

Dim strfichero As String, strruta As String, strfichero_principal As
String
= Nothing

strruta = "Aplicaciones/"

strfichero = "aplicacion"

strfichero &= c0 & IIf(nversion > 0, "(" & nversion & ")", "")

strruta = Server.MapPath(strruta)

For Each foundFile As String In My.Computer.FileSystem.GetFiles(strruta,
FileIO.SearchOption.SearchTopLevelOnly, strfichero & ".*")

strfichero_principal = foundFile.Substring(InStrRev(foundFile, "\"))

Exit For

Next

If strfichero_principal Is Nothing Then strfichero_principal = "Falta " &
strfichero

Return strfichero_principal

End Function



End Class





Compilo y obtengo la dll con vbc



Luego me creo el ensamblador así



CREATE ASSEMBLY clr

'FROM 'C:\clr.dll' WITH PERMISSION_SET = safe



Pero me sale un error



Error de ejecución SQL.



Instrucción SQL ejecutada: CREATE ASSEMBLY clr FROM 'C:\clr.dll' WITH
PERMISSION_SET = safe

Origen del error: .Net SqlClient Data Provider

Mensaje de error: Error de CREATE ASSEMBLY para el ensamblado 'clr' debido
a
un error de comprobación del ensamblado 'System.Drawing'. Compruebe si los
ensamblados a los que se hace referencia están actualizados y son de
confianza (para external_access o unsafe) para ejecutarse en la base de
datos. Después de este mensaje aparecen los mensajes de error de
comprobación
de CLR, si los hay


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000053][se encontró address of Byte] Se esperaba un tipo numérico en
la
pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000043][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ :
System.Drawing.BufferedGraphicsContext::bFillColorTable][mdToken=0x6000243][desplazamiento
0x00000027][se encontró Native Int][se esperaba address of Byte] Tipo no
esperado en la pila.


[ : System.Drawing.Icon::GetShort][mdToken=0x600045f][desplazamiento
0x00000002] Los punte...






No sé qué puede fallar. ¿Tengo que actualizar las dll a las que llaman los
3
imports? ¿Dónde obtengo las actualizaciones?




Por lo que parece, el system.drawing es llamado por System.Web.UI.Page



Pero si no pongo el inherits, no me reconoce el server.mappath, y ese es
mi
problema, el usar el server.mappath. Requiere el System.Web.UI.Page



¿Me podeis guiar, por favor?



Muchas gracias de antemano


Preguntas similares