Pregunta

Estoy trabajando en un proyecto C ++ que no tengo la intención de desarrollar o implementar usando bibliotecas o herramientas .NET, lo que significa que tendría sentido para mí crearlo usando una aplicación de consola Visual Studio Win32. Sin embargo, he escuchado que las capacidades de depuración al usar una aplicación CLR en Visual Studio son mucho más poderosas. Entonces tengo algunas preguntas:

  1. ¿Es cierto que tener una aplicación CLR frente a una aplicación Win32 agrega capacidades a su proceso de desarrollo incluso si no utiliza ninguna biblioteca .NET u otros recursos?

  2. Si es así, ¿podría seguir desarrollando / compilando el proyecto como un proyecto CLR para aprovecharlos a pesar de que estaría desarrollando un proyecto puro de C ++ usando STL, etc. y no aprovechando alguna funcionalidad .NET? ¿O tal proyecto requeriría diferencias fundamentales que harían que no sea trivial revertirlo, lo que significa que debería seguir con una aplicación de consola Win32?

¿Fue útil?

Solución

Respuesta final: si nunca tiene la intención de usar el CLR o cualquier objeto .Net en su aplicación, simplemente use una biblioteca Win32 C ++ normal. Hacer cualquier otra cosa le causará dolor en el camino.

Ahora, para responder 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 variable en la ventana local / 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 visualizador.

Sin embargo, si no utiliza ningún tipo .Net, no obtendrá ninguno de estos beneficios.

El evaluador de expresiones C ++ no aprovecha ninguno de estos. Tiene sus propios métodos para personalizar la visualización de tipos. Pero no es tan característico (o potencialmente peligroso) como el estilo de atributo porque no permite que el código se ejecute en el proceso de depuración.

Eso no quiere decir que depurar C ++ proporcione una mala experiencia. Es simplemente diferente y hay mejores pantallas para muchos tipos de contenedores STL.

La depuración de una aplicación CLR también tiene ciertas desventajas. Por ejemplo, la depuración de código optimizado es casi imposible a veces porque el JITer ocultará variables locales, parámetros y, a menudo, "esto". La depuración de una aplicación C ++ construida de manera similar también puede ser frustrante, pero siempre puedes tomar los registros y ver qué sucede. Hacer lo mismo para una aplicación CLR es difícil en el mejor de los casos.

Otros consejos

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 desea evitar.

Por ejemplo, C ++ / CLI es una forma de agrupar el código nativo de C ++ directamente en un ensamblado CLR, pero C ++ / CLI agrega una sintaxis no estándar al lenguaje C ++, y usar tipos nativos de C ++ mezclados con tipos administrados parece muy complicado problema por decir lo menos.

Entonces, en conclusión, simplemente lo mantendría como una aplicación nativa. Si tiene algún plan para portarlo a CLR y acaba de comenzar a trabajar en este proyecto, seriamente pensaría en comenzar a escribir en un lenguaje nativo de CLR como C #.

Esta respuesta se copió desde aquí - http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b- fda1e5e576eb / cuál es la diferencia entre clr-console-application-y-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); este último no.

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ía escribir una aplicación .NET.

y ¿No tiene una pista 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top