是否可以强制C#编译器将所有引用的调用拉出框架并将它们打包到dll甚至单个可执行文件中?
我喜欢用C#编写快速的“一次性”应用程序,但是我不想在目标机器准备就绪后必须安装整个框架。
答案 0 :(得分:38)
你问一个加载的问题。 C#只是一种语言,不需要.NET Framework。编译它的过程需要一个编译器,它可能会也可能不会依赖于.NET Framework(Microsoft的C#编译器不会 - 它是用本机代码编写的)。您的程序需要引用一些程序集,其中可以找到供您使用的类型,类和方法。您可以从引用列表中删除system.dll和mscorlib.dll并引用您自己的程序集。因此,如果您确实在使用.NET Framework,则可以避免依赖.NET Framework。但最后,除非你有一个C#编译器将程序编译为本机代码,否则你仍然依赖于CLR。
这是一种非常技术性的说法......几乎没有。但它回答了你的问题。 :)然而,实际上更有用的是如何让C#程序以最少的依赖性运行。来自mono的mkbundle实际上会让你把它全部编译成一个几乎没有依赖的.exe。
但是,如果您想坚持使用Microsoft .NET Framework,那么使用.NET 3.5 SP1的客户端配置文件可以实现更轻松的占用空间并更快地安装您通常需要的依赖项。你可以在这里读到它: http://msdn.microsoft.com/en-us/library/cc656912.aspx
答案 1 :(得分:14)
使用Mono查看mkbundle。
答案 2 :(得分:8)
现在可以使用Microsoft .NET Native将C#编译为本机代码: https://msdn.microsoft.com/en-us/library/dn584397(v=vs.110).aspx
它会自动编译以托管代码(C#或Visual Basic)编写的应用程序的发布版本,并将.NET Framework和Windows 10的目标编译为本机代码。
...
对于您的应用程序的用户,.NET Native提供了以下优势:
•快速执行时间
•始终如一的快速启动时间
•低部署和更新成本
•优化的应用内存使用量
这仅适用于Visual Studio .NET 2015。
答案 3 :(得分:5)
查看.NET客户端配置文件。 这将允许您在客户端计算机上打包最小安装..稍后将通过Windows更新更新到完整框架。
当然,这取决于您的应用仅使用客户端配置文件中包含的库...
答案 4 :(得分:5)
据说可以使用第三方工具,例如http://www.remotesoft.com/linker/
答案 5 :(得分:1)
不可能。您的“编译”C#应用程序是.Net CLR在运行时解释的语言(应该说是JITed,读取IL,编译为本机代码,然后调用已编译的本机代码)。
FYI .net 2.0是xp SP2和vista上的标准安装,因此您不会支付那么多的罚款。
您可以查看单声道,但这仍然涉及在目标计算机上运行某种框架。
答案 6 :(得分:0)
这种依赖性不幸在现实世界中经常出现或缺失,这是C#没有得到更广泛采用的一个重要原因。另一方面,大多数开发都有依赖性。看看C ++&例如Java。
我认为我们不会很快摆脱这些依赖性问题,所以我建议如果你想使用C#,那么你需要为安装做一个包装器来检查你需要的.net框架版本依赖性,如果遗漏,通知用户他们需要这个来运行你的应用程序。
答案 7 :(得分:-2)
某些C#功能绑定到.NET框架的接口。
例如:
yield return
需要IEnumerable接口
using (x) {}
需要IDisposable接口