【问题标题】:Making Native .Net exectuables?制作原生 .Net 可执行文件?
【发布时间】:2009-08-21 13:59:54
【问题描述】:

既然微软已经发布了 .Net Framework 的源代码,我开始怀疑:

我们能否以某种方式将 .Net 代码编译为不需要 clr 或 jit 即可运行的本机可执行文件?

【问题讨论】:

  • 恕我直言,Microsoft 尚未发布所有 .NET FW 的源代码。源代码可用于 mscorlib.dll、System.dll、System.Data.dll、System.Drawing.dll、、System.Web.dll、System.Web.Extensions.dll、System.Windows.Forms.dll、System。 Xml.dll、所有 WPF DLL(System.Windows.dll、System.Printing.dll、System.Speech.DLL、UIAutomation.DLL、WindowsBase.DLL、WindowsFormsIntegration.DLL、Presentation*.DLL)和 Microsoft.VisualBasic.DLL。他们还将 ASP.NET MVC 作为开源项目发布。
  • @Richard,我不认为这是完全重复的。这个问题是说 .Net 框架源代码更改的可用性是否使问题更易于解决。引用的问题是说“我有我的源代码,我想要一个可执行文件”

标签: .net native


【解决方案1】:

不,这不是出于几个原因。

第一个问题是源是在参考许可证下发布的(Reference)。
我不是律师,但我对该许可证的理解是它不允许重新分发内容。

其次,它不会在方程式中添加任何新的有用数据。本质上将可执行文件及其所有依赖项组合成单个独立可执行文件的程序正在执行与 CPP 链接器工具非常相似的操作。这就是在没有源代码的情况下将二进制文件及其所有依赖项组合成一个可执行文件。

.Net 程序集中的所有依赖信息都可以通过检查程序集的元数据来确定。源在这里确实没有增加任何价值。

.Net 框架的源代码只有在您想完全编写一个新的编译器并将其组合成一个程序集时才真正有用。即使这样,您仍然需要一个链接器样式的解决方案来将 CLR 放入同一个可执行文件中。

【讨论】:

    【解决方案2】:

    根本没有。已发布的源代码用于框架(而不是所有框架),而不是 .NET 运行时本身。因此,您可以从 Microsoft 获得的代码仍然需要安装 .NET 才能运行,并且不会让您更接近原生应用程序。

    【讨论】:

      【解决方案3】:

      您是指某些框架源文件的仅用于调试目的的分发吗?

      这些并不完整(值得注意的是,它们缺少用本机代码编写的部分,并且它们进一步仅包含 类库 - 而不是运行时本身)。

      如果您真的想要这个,mono 是更好的起点 - 并意识到 clr 提供了反射、垃圾收集和代码生成等功能,因此这不仅仅是“删除它”的问题- 那时你将生活在一个不兼容的 .NET 子集中。

      【讨论】:

        【解决方案4】:

        【讨论】:

          【解决方案5】:

          对你来说 NGEN 可执行文件还不够好吗?

          【讨论】:

          • ngen 不移除对 CLR 的依赖
          猜你喜欢
          • 2016-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-30
          • 2010-11-14
          • 2010-10-16
          相关资源
          最近更新 更多