2010-03-04 17 views
11

Editar: Básicamente lo que necesito es que visual studio reconstruya siempre todo cuando toco la depuración.Forzar visual studio para siempre 'reconstruir todo' cuando se depura


Actualmente estoy usando Visual Studio para compilar mis programas de ensamblaje, utilizando MASM y, en general, funciona bien.

Sin embargo, me he encontrado con un problema molesto:

Si incluyo un archivo (por ejemplo, un archivo con funciones) como esto

Include functions.inc 

y compilarlo, que originalmente funciona bien. Sin embargo, si luego cambian los contenidos de functions.inc, esto no se reconoce y los compiladores se saltan las funciones.inc y usan la versión anterior de antes de cambiarla.

No puedo encontrar ninguna opción en ninguna parte de las propiedades del proyecto para solucionarlo. Sin embargo, estoy seguro de que tiene algo que ver con las opciones del enlazador o algo así: si realizo algún cambio en las propiedades del proyecto (incluso si cambio algo y lo cambio, y luego presiono Aceptar), se compila correctamente con la nueva versión de funciones.inc.

¿Alguna idea?

+4

Intente editar la regla de compilación personalizada y agregue * .inc a Dependencias adicionales. El último recurso es Build + Rebuild. –

+0

Rebuild es lo que estoy usando en este momento. Es un poco molesto, pero hice map ctrl + r para que sea bastante rápido. Probaré la idea de dependencias adicionales y volveré a publicar si funcionó o no. – Cam

+0

Consulte también esta respuesta http://stackoverflow.com/questions/1334774/how-do-i-force-a-rebuild-when-the- project-configuration-changes – userSteve

Respuesta

8

Puede cambiar el comportamiento a través de la EnvironmentEvents macro en Explorador de macros de Visual Studio:

Private Enum IDEMode 
    Design = 1 
    Break = 2 
    Run = 3 
End Enum 

Private _IDEMode As IDEMode = IDEMode.Design 

Public Sub DTEDebuggerEvents_OnDebugRun() Handles _ 
DebuggerEvents.OnEnterRunMode 
    If _IDEMode = IDEMode.Design Then 
     DTE.ExecuteCommand("Build.RebuildSolution") 
    End If 
    _IDEMode = IDEMode.Run 
End Sub 

Public Sub DTEDebuggerEvents_OnDebugDesign() Handles _ 
    DebuggerEvents.OnEnterDesignMode 
    _IDEMode = IDEMode.Design 
End Sub 

Public Sub DTEDebuggerEvents_OnDebugBreak() Handles _ 
    DebuggerEvents.OnEnterBreakMode 
    _IDEMode = IDEMode.Break 
End Sub 

Este es un cambio VisualStudio por lo que funciona en todas las soluciones de una vez establecidos

ACTUALIZACIÓN Lo anterior La solución funciona, pero tiene algunos inconvenientes con respecto a los archivos de contenido donde el IDE cambiará al modo de diseño incluso si el depurador se está ejecutando. Es intentar compilar mientras el depurador se está ejecutando en algunas situaciones. La solución correcta es la siguiente:

Private _curDebugState As EnvDTE80.dbgProcessState 

Public Sub debuggerStateChangedHandler 
    (ByVal NewProcess As EnvDTE.Process, 
    ByVal processState As EnvDTE80.dbgProcessState) 
    Handles DebuggerProcessEvents.OnProcessStateChanged 
    If _curDebugState = dbgProcessState.dbgProcessStateStop And processState = dbgProcessState.dbgProcessStateRun Then 
     DTE.ExecuteCommand("Build.RebuildSolution") 
    End If 
    _curDebugState = processState 
End Sub 
+0

Jaja, no puedo creer esto. ¡Finalmente tengo una respuesta a esto después de _six meses_! Muchas gracias :) – Cam

+3

heh vine porque estaba buscando una solución, tuve el mismo problema (en un escenario diferente) y me enfurecí al ver que msdn mvp promocionaba la idea de reconstruir a mano todas y cada una de las veces – Jaguar

+0

¿es posible solo para una solución específica? – batmaci

1

El soporte para el código ASM en VS no es tan auto-mágico como .NET/C++ y tiene que ayudarlo un poco. Usamos un archivo MAKE para compilar nuestro código ASM en VS. El archivo MAKE define todas las dependencias para que los cambios en los archivos INC se compilen la próxima vez que se compila el archivo ASM.

Se pudo crear una secuencia de comandos similar con MSBuild pero nunca nos tomamos el tiempo para hacerlo.

0

Si se trata de que el VS IDE no pueda descifrar las dependencias (porque no puede analizar el archivo .asm y ubicar allí las directivas INCLUDE), una solución de fuerza bruta que funciona muy bien con MASM es para reconstruir el proyecto o incluso la solución: MASM es muy, muy rápido: tengo algunos proyectos MASM muy grandes, varias decenas de módulos .asm e incluso más: el proyecto más grande se reconstruye en cuestión de (muy) pocos segundos .

Advertencia: Kludge al frente. Definición de una prebuild que hace un toque a todo lo que los archivos .asm forzaría automáticamente una reconstrucción ...

  1. Haga clic derecho sobre las propiedades del proyecto (columna izquierda, solución Explorer),
  2. Vaya a Configuración propiedades/ Eventos de generación/Evento
  3. en "línea de comandos" Pre-construcción, de tipo "toque * asm" (asegurarse de que tiene una utilidad de contacto en la ruta)

Ahora, cada vez que compila, todos los archivos * .asm se tocarán (es decir, aparecerán modificados) y se volverán a compilar. Y ya no tendrás que recordar que tienes que reconstruir todo, ya que esto sucederá de todos modos. Advertí que era un desafío, ¿no? Además, el IDE le dirá que sus archivos fueron modificados fuera del editor y desea volver a cargarlos. ¡Puedes decir que sí!

+0

Guardar primero no soluciona el problema: mi configuración ya es así. Actualmente estoy usando reconstruir todo antes de cada vez que lo ejecuto, pero me gustaría no tener que hacer eso. – Cam

+0

¿Consideró ejecutar "touch * .asm" en el paso de preparación? No es agradable, pero al menos no tendrías que pensar en invocar la inusual secuencia de clave de reconstrucción ... – filofel

+0

¿Puedes ampliar eso en absoluto? – Cam

1

Una posibilidad podría ser crear una macro que simplemente reconstruya todo y luego apague el depurador. Luego asigne la macro a una clave.I piensa que el _DTE.ExecuteCommand podría ser utilizado para esto. Y si deseaba aún más control sobre el depurador, la interfaz Debugger2 tiene un poco de funcionalidad expuesta.

4

Asegúrese de que, de haber seleccionado el proyecto de inicio para la construcción en el Administrador de configuración:

Build -> Gestor de Configuración -> comprobar la columna de 'construir' para todos los proyectos pertinentes .

Cuestiones relacionadas