Gustavo님의 프로필Gustavo Bonansea블로그리스트 도구 도움말
    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:

    1. Abrir el menú Tools/Options
    2. Ir a la carpeta Enviroment y seleccionar Keyboard
    3. Seleccione el nombre de la macro (por ej. Macros.Samples.VSEditor.RefreshProjectReferences)
    4. 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

     

    GB

    댓글 (2개)

    잠시만 기다려 주세요...
    죄송합니다. 입력한 댓글이 너무 깁니다. 내용을 줄여 보세요.
    입력한 내용이 없습니다. 다시 시도해 보세요.
    죄송합니다. 지금은 댓글을 추가할 수 없습니다. 나중에 다시 시도해 보세요.
    댓글을 추가하려면 부모님의 사용 허락이 필요합니다. 허용 요청
    부모님이 댓글 기능을 해제한 상태입니다.
    죄송합니다. 지금은 댓글을 삭제할 수 없습니다. 나중에 다시 시도해 보세요.
    하루에 남길 수 있는 댓글의 최대 한도를 초과했습니다. 24시간 후에 다시 시도해 보세요.
    회원님의 계정은 다른 사용자에게 스팸 메일을 보낼 수 있다고 여겨지므로 댓글 기능이 비활성화되어 있습니다. 이 설정에 문제가 있다고 생각되면 Windows Live 지원에 문의하시기 바랍니다.
    댓글을 남기려면 아래 보안 검사를 완료해야 합니다.
    보안 검사에 입력한 글자는 그림 또는 오디오에 있는 글자와 일치해야 합니다.

    댓글을 추가하려면 Windows Live ID로 로그인하세요. 핫메일, 메신저 또는 Xbox LIVE를 사용하는 경우 해당 계정을 Windows Live ID로 사용할 수 있습니다.로그인


    Windows Live ID가 없으신가요? 등록

    알 수 없음님의 사진
    Gustavo_Bonansea 님이 남긴 글:
    Ok, gracias. Ahora le agrego las referencias necesarias.
    Posteá la tuya así la agrego al VS

    Saludos
    7월 12일
    알 수 없음님의 사진
    El_Bruno_ 님이 남긴 글:
    muy cheto amigo ..
    pero para q funke t faltaria agregar una seccion con las referencias q hay q agregar (especialmente VSLangProj) sino no funka ni a palos :D


    acabo de armar una q agrega las referencias necesarias para un proyecto por defecto :D
    7월 12일

    트랙백

    이 블로그의 트랙백 URL은 다음과 같습니다.
    http://misopiniones.spaces.live.com/blog/cns!2737DC89A4AAB26B!220.trak
    이 블로그를 참조하는 웹 로그
    • 없음