.net - scripts - debug visual studio 2017
Aplicación de consola Win32 vs. aplicación de consola CLR (3)
Estoy trabajando en un proyecto de C ++ que no tengo la intención de desarrollar o implementar mediante bibliotecas o herramientas .NET, lo que significa que tendría sentido para mí crearlo utilizando una aplicación de consola Visual Studio Win32. Sin embargo, he escuchado que las habilidades de depuración cuando se usa una aplicación CLR en Visual Studio son mucho más poderosas. Así que tengo algunas preguntas:
¿Es cierto que tener una aplicación CLR en lugar de una aplicación Win32 agrega capacidades a su proceso de desarrollo incluso si no utiliza ninguna biblioteca .NET u otros recursos?
Si es así, ¿aún podría desarrollar / compilar el proyecto como un proyecto CLR para aprovechar esto a pesar de que estaría desarrollando un proyecto de C ++ puro utilizando STL, etc. y sin aprovechar ninguna funcionalidad .NET? ¿O tal proyecto requeriría diferencias fundamentales que harían que no fuera trivial volver atrás, lo que significa que debería seguir con una aplicación de consola Win32?
Creo que compilar código nativo de C ++ en CLR abre una lata entera de gusanos. A menos que tenga una gran inversión en el código C ++ existente y alguna necesidad de ejecutar el código con tipos administrados, esto es algo que debe evitar.
Por ejemplo, C ++ / CLI es una forma de agrupar código C ++ nativo directamente en un ensamblaje CLR, pero C ++ / CLI agrega una sintaxis no estándar al lenguaje C ++, y usar tipos de C ++ nativos mezclados con tipos administrados parece ser un problema muy difícil de decir El menos.
Así que, en conclusión, lo mantendría como una aplicación nativa. Si tiene algún plan de portarlo a CLR y acaba de comenzar a trabajar en este proyecto, pensaría seriamente en comenzar a escribir en un lenguaje nativo de CLR como C #.
En resumen, si nunca pretende utilizar el CLR o cualquier objeto .Net en su aplicación, solo use una biblioteca normal de Win32 C ++. Hacer cualquier otra cosa te causará dolor en el camino.
Ahora, para responder a la pregunta original sobre la depuración, sí, la depuración con el CLR tiene ciertas ventajas sobre la depuración de una aplicación C ++ normal. A partir de Visual Studio 2005, tanto C # como VB.Net comenzaron a centrarse en hacer que la visualización de variables en la ventana locals / autos / watch sea mucho más valiosa. Se realizó principalmente a través de la introducción de atributos .Net como DebuggerDisplay, DebuggerTypeProxy y el marco del visualizador.
Sin embargo, si no usa ningún tipo de .Net, no obtendrá ninguno de estos beneficios.
El evaluador de expresiones C ++ no aprovecha ninguno de estos. Tiene sus propios métodos de personalización del tipo de visualización. Pero no es tan funcional (o potencialmente peligroso) como el estilo del atributo porque no permite que el código se ejecute en el proceso de depuración.
Eso no quiere decir que la depuración de C ++ proporciona una mala experiencia. Es simplemente diferente y hay mejores visualizaciones para muchos tipos de contenedores STL.
La depuración de una aplicación CLR también tiene ciertos inconvenientes. Por ejemplo, la depuración del código optimizado es casi imposible a veces porque el JITer ocultará las variables locales, los parámetros y, a menudo, "esto". La depuración de una aplicación de C ++ construida de manera similar también puede ser frustrante, pero siempre puedes agarrar los registros y vergonzosamente para ver qué está pasando. Hacer lo mismo para una aplicación CLR es difícil en el mejor de los casos.
Esta respuesta se copió desde aquí: http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-and-win32-console-application
¿Cuál es la diferencia entre la aplicación de consola CLR y la aplicación de consola win32? - El primero usa Common Language Runtime (en otras palabras, .NET framework); el último no lo hace.
y no puedo usar el sistema de espacio de nombres bajo el modelo de aplicación de consola win32. - El espacio de nombres del sistema es parte de .NET Framework.
¿Qué debo hacer cuando quiero usar el espacio de nombres? - Deberías escribir una aplicación .NET.
y ¿No tiene una sugerencia de entrada como en el modelo C #? - De hecho, no hay IntelliSense para C ++ / CLI en las versiones existentes de Visual Studio. Si desea una aplicación .NET, C # podría ser una mejor opción de idioma.