Compilación avanzada de con Visual Studio
Hay veces que el código que ejecutamos no es el mismo que vemos en Visual Studio. Puede haber varias razones, como la utilización de parámetros internos, recompilaciones o cualquier cosa que nos haga ver una cosa y ejecute otra. Para depurar el código que realmente se está ejecutando en la máquina se puede utilizar el método descrito a continuación.
Ejecutamos el archivo .exe generado para nuestra aplicación, y en el momento que deseamos para la ejecución, abrimos Visual Studio y hacemos Depurar -> Asociar al Proceso (ctrl+ Alt + P) y elegimos el hilo de nuestro ejecutable (es el mismo método que se describe a continuación para Visual Basic Script)
Si el código que ejecuta es el mismo de nuestro VS lo mostrará en amarillo, si no es igual, mostrará por donde va, pero la línea no irá en amarillo, eso nos dará la pista de que lo que ejecuta no es lo mismo que tenemos escrito en el código.
Compilación de archivos de Visual Basic Script
Un archivo de Visual Basic Script no se puede compilar, hay que ir poniendo Msgbox para hacerse una idea de por donde va y lo que va haciendo, pero hay veces que la ejecución de un vbs llama a un proyecto de Visual Basic normal y este último si se puede compilar. Para ello necesitamos compilación remota.
Desde el proyecto VB se ejecuta un procedimiento que es llamado a través de un archivo Vbs esto se hace con el código coloreado.
Sub Main()
'
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = False
AbrirLog()
Try
log4net.Config.XmlConfigurator.Configure()
Dim i As Integer
Dim strArg As String =
""
For i = 1 To
Environment.GetCommandLineArgs.Length - 1
strArg = strArg
& Environment.GetCommandLineArgs(i) & " "
Next
If strArg = "" Then
strArg = "Generación del
Modelo Físico"
End If
EscribirLog("Proceso: " & strArg & " - "
& Now())
PD = New
PdCommon.Application
PDStartTime = Now
PD.InteractiveMode =
InteractiveModeValue.im_Dialog
LeerConfig()
'Comprobamos que proceso se quiere
realizar.
If
Environment.GetCommandLineArgs.GetLength(0) = 1 Then
Dim d As New
frmMain
AbrirConexionPD()
d.ShowDialog()
End If
i = 0
For Each arg As String
In Environment.GetCommandLineArgs()
Select Case i
Case 1 'Argumento
primero
Select Case arg.ToUpper
Case "EtiquetaVBs".ToUpper
MsgBox("comienza ejecucion VB")
ProcedimientoVB()
…
…
Para ello hacemos lo siguiente:
primero ejecutamos el proyecto de VB en modo debug para generar el .exe; hecho esto ejecutamos de nuevo desde Visual Studio y vamos al archivo Vbs que contiene una llamada de este estilo al proyecto de VB.
dim EjecObj
Dim Cadena
Cadena = """C:\Proyectos\bin\x86\Debug\ADE.exe"" ""etiquetaVBs"""
set EjecObj = createobject("Wscript.shell")
EjecObj.Run(Cadena)
Hay que tener en cuenta que la ruta llamada debe coincidir con la ruta donde se ha alojado el archivo .exe al generarlo en modo Debug.
Al ejecutar el archivo Vbs que contiene esta líneas, llama al proyecto VB que se ejecuta hasta llegar al MsgBox.
MsgBox("comienza ejecucion VB")
Al parar en este punto, vamos al proyecto de VB en visual studio y en el menu depurar elegimos asociar al proceso.
Y elegimos nuestro proyecto como proceso.
Y pulsamos asociar, esto no hace aparentemente nada, debemos pulsar en interrumpir todo.
Entonces la línea de nuestro Msgbox se queda verde.
Ahora pulsamos F11 o F10 para comenzar con la depuración y nos sale el MsgBox.
Pulsamos aceptar y la línea se pone en amarillo con lo que ya podemos comenzar con la depuración.
No hay comentarios:
Publicar un comentario