C#需要.NET吗

C#需要.NET吗,c#,.net,dependencies,C#,.net,Dependencies,我是C#新手(但不懂编程),我想知道:C#程序总是需要.NET,还是有办法避免依赖性并使应用程序独立?是的,C#总是需要.NET运行时 如果您担心其他平台,那么有一些平台将允许.NET应用程序使用Mono运行时在Windows以外的平台(即Linux)上运行 C#代码被编译成CIL代码,这是一个独立于平台的指令集,我引述如下: 在编译.NET编程时 语言,源代码是 翻译成CIL代码而不是 平台或处理器特定对象 代码。CIL是一个CPU和 平台无关指令集 可以在任何情况下执行 支持共同发展的环境

我是C#新手(但不懂编程),我想知道:C#程序总是需要.NET,还是有办法避免依赖性并使应用程序独立?

是的,C#总是需要.NET运行时

如果您担心其他平台,那么有一些平台将允许.NET应用程序使用Mono运行时在Windows以外的平台(即Linux)上运行

C#代码被编译成CIL代码,这是一个独立于平台的指令集,我引述如下:

在编译.NET编程时 语言,源代码是 翻译成CIL代码而不是 平台或处理器特定对象 代码。CIL是一个CPU和 平台无关指令集 可以在任何情况下执行 支持共同发展的环境 语言基础设施,如 Windows上的.NET运行时,或 跨平台Mono运行时


正如C程序通常需要C运行时一样,C#程序需要公共语言运行时。

需要运行时/解释器,但不一定需要

目前还有一个用于Linux的CLI解释器。

C#未编译为本机代码,因此计算机无法读取它。您需要.Net framework来转换所谓的字节码(C#编译器编译成的代码,CLI),它可以由.Net framework的即时编译器进行转换

Mono是另一种框架,它也可以运行C#。它在比.Net framework(仅支持Windows)更多的平台上受支持

是的,运行C#应用程序需要.Net framework或Mono运行时,新版本的Windows会自动安装和更新.Net framework。

这是可能的。C#只是一种编程语言,就像其他任何编程一样:它可以用你能想到的任何方式进行编译:包括不用.NET进行编译。事实上,MONO项目(对于许多平台来说都是C#)就是这样做的

还有一些其他的商业编译器会假装在没有.NET的情况下编译你的应用程序,但它们只是把.NET放在你的可执行文件中:这是无用的、缓慢的、愚蠢的


没有.NET或MONO的任何其他使用C#的方法都更像是一种教育体验,而不是一种实用的解决方案。至于教育经验的价值:如果你有时间,我绝对建议你在有更多经验的时候尝试类似的东西。

显然,不需要.NET运行时,例如,请参见MonoTouch。

目前还没有针对C#的静态编译器,如果存在静态编译器,则必须删除一些可以通过CLR更有效地提供的功能。同时请记住,.Net framework默认安装在大多数正在使用的Windows版本上(你可能会偶然发现有人在使用NT4或其他东西,但他们在整个操作系统不再受支持方面会遇到更大的问题)@我不同意你的观点,请参阅,特别是性能考虑部分。也就是说,AoT编译的二进制文件中明显缺少的是“动态的”像
System.Reflection
这样的功能。我对c也是新手,而且很多时候都在使用c,所以我发现这种兴趣消失了。我不明白为什么人们认为Mono使c跨平台。当然,这很有帮助……但在.NET中做GUI应用的推荐方法现在是WPF,目前还没有计划将其添加到Mono中。这似乎很有帮助很明显,您的WPF应用程序除了Microsoft操作系统之外别无选择(除非Silverlight对您来说足够好)Muno有一个超前编译程序。他们在MaldouCH中使用它来创建自包含的本地代码并遵守iOS应用程序商店规则。我想我应该澄清。如果你针对MMOO,那么你可以编写跨平台.NET应用程序。如果你不把它放在前面,使用最新的和最伟大的.NET平台和当前的最佳实践……不太可能在Mono上工作。@darron,除了重型WPF应用程序之外,还有很多事情要做。想想服务器端。即使如此,WPF也不是WinForms的替代品,而是一种补充。也就是说,没有什么灵丹妙药。我还读过remotesoft.com的c#nativity编译器,即“c运行时库”(如MSVCRT中的c运行时库)与“公共语言运行库”不是一回事当然,它们有一个共同的词,但第一个词只是指一个标准化的函数库,而第二个词是指一个平台+工具链+虚拟机+…@Greg-区别在于C程序只需要MSVCRT,因为MSVCRT提供了硬件挂钩,否则开发人员必须从头开始实现,其次是执行一些基本的操作系统级安全(如果程序试图破坏操作系统规则,允许操作系统“杀死”程序)。您可以编写和编译只需要计算机即可运行的C程序。MSVCRT不会将编译后的代码转换为CPU可以理解的内容。MSVCRT不提供垃圾收集。MSVCRT不会使针对Linux内核的程序在Windows中工作。@Greg D-不是大多数-所有C程序都需要CLR(或类似的工作程序)为了运行,正如我前面所说,这不是C程序的要求。C不需要“运行时”提供一个沙箱,在其中工作,并给它父母批准的东西来使用;它可能需要它自己没有的工具,但它知道并加载到自己的内存空间中。这里有一个很大的区别;它不仅仅是“实现细节”C程序需要一个运行时,就像所有程序都需要一些东西才能将它们加载到内存中,并将CPU的执行寄存器指向第一条指令一样。操作系统的可执行加载程序或多任务操作系统中的虚拟机不是“运行时”正如人们通常所理解的,C程序只需要MSVCRT,就像任何程序需要标准代码库的挂钩一样