Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C/VS没有';你没有像Java/Eclipse这样的自动构建功能吗?_C#_Java_Compiler Construction - Fatal编程技术网

C# C/VS没有';你没有像Java/Eclipse这样的自动构建功能吗?

C# C/VS没有';你没有像Java/Eclipse这样的自动构建功能吗?,c#,java,compiler-construction,C#,Java,Compiler Construction,我是一名C#/.Net开发人员,刚刚开始Android的Java开发,使用Eclipse时我注意到它可以随用随编译,因此在任何时候都不必等待程序的构建。这看起来很神奇,除非有什么我不明白的事情发生 我想知道为什么C#和VisualStudioIDE不提供这种功能?有什么原因吗?在Java中,每个类都被编译到一个单独的类文件中,因此在每次保存时都很容易编译小的代码单元。在.net中,您可以将一组类编译成单个DLL,这会更慢,并且在编译过程中需要更多的逻辑 顺便说一句,这不是语言特性,而是IDE特性

我是一名C#/.Net开发人员,刚刚开始Android的Java开发,使用Eclipse时我注意到它可以随用随编译,因此在任何时候都不必等待程序的构建。这看起来很神奇,除非有什么我不明白的事情发生


我想知道为什么C#和VisualStudioIDE不提供这种功能?有什么原因吗?

在Java中,每个类都被编译到一个单独的类文件中,因此在每次保存时都很容易编译小的代码单元。在.net中,您可以将一组类编译成单个DLL,这会更慢,并且在编译过程中需要更多的逻辑


顺便说一句,这不是语言特性,而是IDE特性。并非所有JavaIDE都会自动编译,如果您愿意,也可以在eclipse中禁用它。我确信Visual Studio中有自动生成工具。

自动生成除了最简单的应用程序之外的任何东西都会导致大量延迟,因为每次您按键时都会编译和链接它


VS确实有智能感知和大量的动态语法和健全性检查,这为您提供了autobuild的大部分优势,而不会延迟。(已经说过,它似乎对VS2010充满了恼人的热情…

我知道,它不是一个自动生成器,但使用的是一个产品,它通过提供解决方案范围的代码分析,远远超越了VS动态语法检查。我不认为我是世界上唯一一个使用构建尝试来检查我是否包含了构建代码所需的所有内容的开发人员。有了JustCode,您就可以在这方面获得大量的可视化帮助,而不必等待编译器告诉您遗漏了什么。

这与Java没有任何关系。这更像是Eclipse的一个特性。特别是,自1978年左右以来,增量后台编译是所有Smalltalk IDE的标准功能,甚至比Lisp IDE中的还要长

Eclipse最初是用Smalltalk编写的Smalltalk IDE,至今仍由IBM的Smalltalk部门维护。因此,当IBM的Smalltalk部门开发自己的Java编译器时,他们自然地将其编写为增量和可重入的,就像他们的Smalltalk编译器一样。这个名为Jikes的编译器是与Eclipse一起开源的,并成为ecj(Eclipse编译器for Java),它支持Eclipse JDT的所有动态增量编译、语法突出显示、代码完成、类型推断和重构功能

对于C#来说,这绝对是不可能的。它不起作用的原因是编译器不支持它,特别是编译器不是增量的。但是,这不是.NET或C语言或Visual Studio的固有局限性,这是C编译器编译器维护者的一个局限性:传统上,微软上的所有编译器都是由C++编译器团队用C++编写的,而这些人根本就没有听说过增量编译。不是因为他们愚蠢,而是因为在C++社区里没有人关心这个问题。 但是,举例来说,VB社区确实关心这些东西,因为他们已经习惯了VB经典。因此,VB.NET编译器实际上支持增量构建、编辑和继续、智能感知、类型推断和重构

当然,C#plugin也支持很多这方面的东西,但他们不使用实际的C#编译器来实现这一点。相反,他们基本上必须重新实现Visual Studio插件的一半编译器才能工作,但他们没有实现实际的代码生成后端,因此,虽然作为插件一部分的“编译器”可以进行增量解析、语法突出显示、重构和编辑并继续,但实际上它无法编译

然而,C#的情况将发生变化:编译器的责任被重新分配给各自的语言团队,C#团队目前正在C#中和C#团队内部重新实现编译器。这种重写的一个经常被谈论的结果将是编译器即服务功能,它允许您动态编译C#和/或表达式树的小片段,并支持例如经常演示的C#REPL和C#脚本功能


考虑到为了使REPL能够工作,编译器无论如何都需要能够编译小的单个代码片段,并且新的编译器应该用于Visual Studio C#plugin中,以取代当前大量的IntelliSense和语法突出显示黑客,在Visual Studio中进行增量编译应该不会太难。

重新精简VS的插件会让您在运行时出现编译错误,但不会自动生成程序

此外,java不需要链接运行时库,我认为C(但我不是C专家)是一个很好的自动生成工具,它实际上并没有构建,但它可以在构建之前检查您的项目是否有错误,从而节省宝贵的时间,这就是Resharper。别忘了,VB确实有这个功能。C#没有,添加它也不是C#开发人员的普遍要求。IDE会边走边解析,这足以捕获大多数错误。此外,IDE缓存以前的版本,只需重新生成在以后的版本上更改的内容。总的来说,在运行过程中完全编译C#会降低性能,但不会增加太多附加值。感谢您的帮助。Jorg给出了一个非常彻底的答案,所以我想我最好把他的答案记下来。真的很好。Csc.exe实际上有一个/incremental选项(),但它现在被认为是过时的:。我还没有试过使用它。很遗憾,在visual Studio中无法实现自动构建。。。我认为自动生成是一个。