2010-06-15 22 views
41

{rant} Primero me gustaría decir que esto NO ES UN DUPLICADO. He hecho esta pregunta anteriormente pero se cerró como duplicado cuando no lo es. Esta pregunta es ESPECÍFICA para VS 2010 y las respuestas al llamado trabajo duplicado en VS 2008 pero no en VS 2010 (al menos no para mí ni para nadie que yo conozca). Así que antes de ir a cerrar algo como un duplicado ¿qué hay de usted lea la pregunta cuidadosamente y intente la respuesta para usted y vea si realmente funciona. Disculpas por la diatriba, pero no hay una forma obvia de contactar a la policía SO que cerró el problema o lo reabrió. {/ rant}VS2010 - Cómo detener automáticamente la compilación en el primer error de compilación


En el trabajo tenemos una solución C# con más de 80 proyectos. En VS 2008 usamos una macro para detener la compilación tan pronto como un proyecto en la solución falla al compilar (vea esta pregunta para obtener varias opciones para VS 2005 & VS 2008: Automatically stop Visual C++ 2008 build at first compile error?).

¿Es posible hacer lo mismo en VS 2010? Lo que hemos encontrado es que en VS 2010 las macros no funcionan (al menos no pude hacer que funcionen) ya que parece que los eventos de entorno no se activan en VS 2010.

El comportamiento predeterminado es para continuar lo más lejos posible y mostrar una lista de errores en la ventana de error. Me complace que se detenga tan pronto como se encuentre un error (nivel de archivo) o tan pronto como un proyecto no se pueda compilar (nivel de proyecto).

Respuestas para VS 2010 solo por favor. Si las macros funcionan, se agradecería una explicación detallada de cómo configurarlas para VS 2010.

Gracias.

+4

Te escucho, es bastante molesto cuando las preguntas se cierran rutinariamente. Aparte de eso, lo siento, no tengo tu respuesta. –

+9

Si no desea que su pregunta se cierre por duplicado, debe vincular a la pregunta que las personas supondrán * suponiendo que * es un duplicado y declarando exactamente por qué cree que no (por ejemplo, "vi esta pregunta" y mientras proporciona una respuesta para Visual Studio 2008, no parece funcionar en Visual Studio 2010 "). Recuerde que las personas brindan ayuda aquí de forma gratuita y nadie recibe pago por hacerlo, por lo que debe tratar de formular su pregunta en un tono menos acusatorio. –

+1

Bien podría comenzar votando, viendo cómo el hilo original estaba en +6 ... – Warty

Respuesta

28

(Ahora puede download this as an extension, si usted no desea construir por sí mismo)

Esta respuesta sólo funciona en VS2010 (parece justo:]). He puesto the source up on my github page. Antes de que pueda compilarlo, necesitará install the SDK. Una vez que hayas hecho eso, simplemente toma la fuente completa de github (incluye archivos de proyecto) y compila eso. Puede instalar el resultado en sus instancias VS normales al encontrar el VSIX en su salida de compilación y abrirlo.

La parte importante es:

public void TextViewCreated(IWpfTextView textView) 
{ 
    var dte = GlobalServiceProvider.GetService(typeof(DTE)) as DTE; 
    textView.TextBuffer.Changed += (sender, args) => 
    { 
     //Output window is friendly and writes full lines at a time, so we only need to look at the changed text. 
     foreach (var change in args.Changes) 
     { 
      string text = args.After.GetText(change.NewSpan); 
      if (BuildError.IsMatch(text)) 
       dte.ExecuteCommand("Build.Cancel"); 
     }; 
    } 
} 

... donde BuildError es una expresión regular definida antes que se puede ajustar. Si tiene alguna pregunta sobre la modificación del código, hágamelo saber.

+0

¡Funciona a la perfección! Gracias Noah. –

+1

WTF? ¿Es esto realmente lo mejor que VS2010 puede hacer? Estoy más que decepcionado! –

+1

Disculpa, ¿qué querías que fuera? –

6

Editar: Vea ahora que me va a ganar en esta - Para VS2010 hay un complemento disponible que puede hacer esto, y mucho más. VSCommands 2010, a través de http://vscommands.com/features/

+0

obtengo 404 No se encontró el recurso; para http://vscommands.com/features/ – Kiquenet

Cuestiones relacionadas