我工作的一个C ++项目,我不打算开发或利用.NET库或工具部署,这意味着它将使意义对我来说,使用Visual Studio的Win32控制台应用程序创建该指标。 不过,我听说使用Visual Studio下一个CLR的应用程序时的调试能力,功能更加强大。 所以,我有几个问题:
这是真的,有一个CLR网站与一个Win32应用程序增加功能,以您的开发过程,即使你不使用任何.NET库或其他资源?
如果是的话,我会仍然能够开发/编译该项目作为一个CLR项目利用这些优势,即使我会开发使用STL等纯C ++项目,并没有采取任何.NET功能优势? 或将这样的项目需要根本的差异,将使得非微不足道的恢复,这意味着我应该坚持一个Win32控制台应用程序?
底线回答,如果你从来没有打算使用CLR或在您的应用程序的任何.NET对象,只需使用普通的Win32的C ++库。 做其他任何事情会引起你痛苦的道路。
现在,为了回答有关调试原来的问题,是与CLR调试已超过调试普通的C ++应用程序一定的优势。 与Visual Studio 2005年开始,C#和VB.Net开始专注于制作在当地人/汽车可变显示/监视窗口更有价值。 它主要是通过做推出的.Net的属性,如DebuggerDisplay,DebuggerTypeProxy和可视化框架。
如果你不使用任何.NET类型,虽然,你会得到没有这些好处。
C ++的表达式求值不采取任何这些优点。 它有它自己的定制型显示器的方法。 但是,因为它不允许代码在调试进程运行它不是多特征(或潜在的危险)作为属性的风格。
这并不是说调试C ++提供了一个糟糕的体验。 这仅仅是不同的,有许多STL容器类型更好的显示器。
调试CLR的应用也有一定的disadvantegs。 例如,调试优化的代码,有时几乎是不可能的,因为JITer会隐藏局部变量,参数和常“本”。 调试类似结构的C ++应用程序也可以令人沮丧,但你总是可以抓住寄存器和dissamebly,看看发生了什么事情。 做同样的CLR应用程序是很难达到最佳。
我觉得编译本地C ++代码转换为CLR打开蠕虫的一个整体可以。 除非你对现有的C ++代码和一些必要的运行与管理类型的代码大的投资,这是你想要避免的事情。
例如,C ++ / CLI是一种方式,以本地C ++代码捆绑权成CLR汇编,但C ++ / CLI添加了非标准语法C ++语言,并使用本地C ++类型的托管类型混合似乎是一个非常棘手的问题说至少。
所以,最后,我只想把它作为一个原生应用程序。 如果你把它移植到CLR的任何计划和你刚开始在这个项目上的工作,我会认真考虑开始写作的,如C#中的CLR的母语。
这个答案从这里复制- http://social.msdn.microsoft.com/Forums/vstudio/en-US/895ecb47-8b34-4a1a-a20b-fda1e5e576eb/whats-the-difference-between-clr-console-application-和Win32的控制台应用程序
什么是CLR控制台应用程序和Win32控制台应用程序之间的区别? - 前者使用通用语言运行时(换句话说,.NET框架); 后者则没有。
我不能在Win32控制台应用模式下,使用命名空间系统。 - 系统命名空间是.NET Framework的一部分。
我该怎么办时,我想使用的命名空间? - 你应该写一个.NET应用程序。
并且没有它具有输入提示,如C#模式? - 的确有在Visual Studio中的现有版本没有智能感知C ++ / CLI。 如果你想有一个.NET应用程序,C#可能是一个更好的语言选择。
文章来源: Win32 Console app vs. CLR Console app