既然微软已经发布了 .Net Framework 的源代码,我开始怀疑:
我们能否以某种方式将 .Net 代码编译为不需要 clr 或 jit 运行的本机可执行文件?
不,这不是出于几个原因。
第一个问题是源是在参考许可证(参考)下发布的。
我不是律师,但我对该许可证的理解是它不允许重新分发内容。
其次,它不会在等式中添加任何新的和有用的数据。本质上将可执行文件及其所有依赖项组合成单个独立可执行文件的程序正在执行与 CPP 链接器工具非常相似的操作。这就是在没有源代码的情况下将二进制文件及其所有依赖项组合成一个可执行文件。
.Net 程序集中的所有依赖信息都可以通过检查程序集的元数据来确定。源在这里确实没有增加任何价值。
.Net 框架的源代码只有在您想完全编写一个新的编译器并将其组合成一个程序集时才真正有用。即使这样,您仍然需要一个链接器样式的解决方案来将 CLR 放入同一个可执行文件中。
根本没有。已发布的源代码适用于框架(而不是所有框架),而不是 .NET 运行时本身。因此,您可以从 Microsoft 获得的代码仍然需要安装 .NET 才能运行,并且不会让您更接近原生应用程序。
您是指某些框架源文件的仅用于调试目的的分发吗?
这些并不完整(值得注意的是,它们缺少用本机代码编写的部分,并且它们进一步仅包含类库- 而不是运行时本身)。
如果你真的想要这个,mono 是更好的起点——并意识到 clr 提供了反射、垃圾收集和代码生成等功能,所以这不仅仅是“删除它”的问题——你将生活在一个非那时 .NET 的兼容子集。
对你来说 NGEN 可执行文件还不够好吗?