你能编译C#,所以在运行时不需要.NET Framework吗?

是否有可能强制C#编译器将所有引用的调用从框架中取出并打包到dll甚至单个可执行文件中?

我喜欢用C#编写快速的“一次性”应用程序,但是我不希望在目标机器准备好之后将整个框架安装到目标机器上。

你问一个加载的问题。 C#只是一种语言,不需要.NET Framework。 编译它的过程需要一个编译器,它本身可能不依赖于.NET Framework(Microsoft的C#编译器不会 – 它是用本地代码编写的)。 你的程序需要引用一些程序集,其中可以findtypes,类和方法供你使用。 您可以从您的引用列表中删除system.dll和mscorlib.dll,并引用您自己的程序集。 所以如果你真的在工作,你可以避免依赖.NET Framework。 但是最终,除非你有一个将程序编译为本地代码的C#编译器,否则你仍然依赖于CLR。

这是一个非常技术性的方式说…几乎没有。 但它回答你的问题。 :)更实际的用处是如何让你的C#程序运行的依赖性最小。 来自mono的mkbundle实际上可以让你把它全部编译成一个.exe,而且几乎没有依赖关系。

但是,如果您想坚持使用Microsoft .NET Framework,则可以通过使用.NET 3.5 SP1的客户端configuration文件,实现更轻量化,更快速地安装通常需要的依赖关系。 你可以在这里阅读: http : //msdn.microsoft.com/en-us/library/cc656912.aspx

看看使用单声道mkbundle 。

看看.NET客户端configuration文件。 这将允许你在客户端机器上打包一个最低限度的安装。稍后将通过Windows更新更新到完整的框架。

这当然取决于您的应用程序只使用客户端configuration文件中包含的库…

这里有一些信息: http : //blogs.windowsclient.net/trickster92/archive/2008/05/21/introducing-the-net-framework-client-profile.aspx

据说这是可能的,使用第三方工具,如http://www.remotesoft.com/linker/

现在可以使用Microsoft .NET Native将C#编译为本机代码: https : //msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx

它会自动编译以托pipe代码(C#或Visual Basic)编写的应用程序的发行版本,并将.NET Framework和Windows 10作为本机代码。

对于您的应用程序的用户,.NET Native提供了这些优势:

•执行时间快

•持续快速的启动时间

•低部署和更新成本

•优化应用程序内存使用情况

这只适用于Visual Studio .NET 2015。

不可能。 您的“编译的”C#应用程序是.Net CLR在运行时解释的语言(应该说JITed,读取IL,编译为本地代码,然后调用编译的本机代码)。

FYI .net 2.0是一个标准安装在XP SP2和Vista上,所以你不会付出太多的代价。

你可以看看单声道,但这仍然涉及到在你的目标机器上运行某种框架。

不幸的是,这种依赖性在现实世界中经常被打破或者缺失,这是C#没有被广泛采用的一个重要原因。 另一方面,大多数开发都有依赖关系。例如,看一下C ++和Java。

我不认为我们真的很快就会摆脱这些依赖问题,所以我build议如果你想使用C#,你要安装一个包装器来检查你需要的.net framework版本依赖关系,如果缺less通知用户他们需要这个来运行你的应用程序。

一些C#特性绑定到.NET框架的接口。

例如:

yield return需要IEnumerable接口

using (x) {}需要IDisposable接口