7월 11일
Macro: Refrescar las referencias de los proyectos
Introducción
Esta entrada es una traducción al español del artículo original Refreshing project references with a Macro que he escrito para el sitio The Code Project.
Muestra como crear una macro que refresque todas las referencias de una solución de .Net. Es muy útil cuando una solución tiene una gran cantidad de proyectos y DLLs que se encuentran interrelacionadas entre sí. Al ejecutar la macro todas las referencias de todos los proyectos de la solución se refrescan.
Es un buen ejemplo de cómo extender el VS creando Macros.
Referencias
Antes de escribir él código de la macro asegúrese de que los siguientes imports se encuentran incluídos a nivel de módulo:
Imports System
Imports System.Drawing
Imports VSLangProj
Código
Para crear la macro copie el código que se muestra posteriormente en el editor de Macros (Alt + F11)
RefreshProjectReferences Sub
Esta función ejecuta el código de la macro. Obtiene todos los proyectos de la solución, muestra un mensaje de espera e itera entre los proyectos refrescando sus referencias. Usa la barra de estado del IDE del Visual Studio para mostrar una barra de progreso y un mensaje.
'Actualiza las referencias de una solucion
Sub RefreshProjectReferences()
' Obtiene el objeto VSProject
Dim oVSProject As VSProject
'Crea la ventana de mensajes
Dim frmMessage As PopupMessage
Try
frmMessage = New PopupMessage("Refreshing references")
frmMessage.Show()
Catch ex As Exception
'Manejar excepciones aqui
End Try
'Recorre los proyectos de la solucion
For i = 1 To DTE.Solution.Projects.Count
'Actualiza la barra de progreso
DTE.StatusBar.Progress(True, "Refreshing projects references", _
i, DTE.Solution.Projects.Count)
'Obtiene el proyecto
oVSProject = CType(DTE.Solution.Projects.Item(i).Object, VSProject)
If Not oVSProject Is Nothing Then
'Actualiza las referencias
oVSProject.Refresh()
End If
Next
'Proceso terminado
DTE.StatusBar.Progress(False)
DTE.StatusBar.Text = "Refreshing succeed"
DTE.StatusBar.Highlight(True)
Try
'Destruye los objetos
frmMessage.Close()
frmMessage.Dispose()
frmMessage = Nothing
Catch ex As Exception
'Manejo de Excepciones
End Try
End Sub
PopupMessage Class
Esta clase define una ventana popup que muestra un mensaje durante la ejecución de la macro
'Muestra una ventana con un mensaje de espera Public Class PopupMessage
Inherits System.Windows.Forms.Form
Private txtMessage As New System.Windows.Forms.TextBox
Public Sub New(ByVal pMessage As String)
Try
'Formato del formulario
Me.TopMost = True
Me.ControlBox = False
Me.FormBorderStyle = _
System.Windows.Forms.FormBorderStyle.Fixed3D
Me.Text = ""
Me.ShowInTaskbar = False
'Formato del texto
txtMessage.Top = 20
txtMessage.Left = 40
txtMessage.Width = 160
txtMessage.Font = New System.Drawing.Font("Arial", 10, _
System.Drawing.FontStyle.Bold)
txtMessage.BackColor = System.Drawing.SystemColors.Control
txtMessage.ForeColor = System.Drawing.Color.Black
txtMessage.BorderStyle = _
System.Windows.Forms.BorderStyle.None
txtMessage.Text = pMessage
txtMessage.AutoSize = True
txtMessage.SelectionLength = 0
Me.Controls.Add(txtMessage)
Me.Height = txtMessage.Height + 40
Me.Width = txtMessage.Width + 80
Me.StartPosition = _
System.Windows.Forms.FormStartPosition.CenterScreen
txtMessage.Refresh()
Me.Refresh()
Catch ex As System.Exception
'Manejo de Excepciones
End Try
End Sub
End Class
Tip
Después que se creó la macro en el editor es muy útil asignarle una combinación de teclas para poder ejecutarla de forma más cómoda (sobre todo si la intentas utilizar tan seguido como yo).
Pasos:
- Abrir el menú Tools/Options
- Ir a la carpeta Enviroment y seleccionar Keyboard
- Seleccione el nombre de la macro (por ej. Macros.Samples.VSEditor.RefreshProjectReferences)
- Seleccione el atajo de teclado y asígnela
Cuando seleccione el atajo, VS le mostrará si ya está utilizado por otro comando y podrá seleccionar el contexto en el que desea que se ejecute la macro
G
B