我们可以用 .net native 编译一个 asp.net 5 的应用程序吗?

Can we compile an asp.net 5 application by .net native?

.net native 在 .net 生态系统中的作用让我感到困惑。我听说它只是用于通用 windows 应用程序,但也听说它是 CoreFX 的一部分。我认为可以选择编译为 .net native 有很多优势(包括性能)。

是否可以将我的 asp.net 应用程序(特别是 asp.net 5)编译为 .net native?

不,你不能。目前,.NET Native 不适用于 ASP.NET。我相信它只适用于通用 Windows 应用程序。这并不意味着有一天它不会可用,但现在还没有计划。

请参阅 related GitHub issue,其中 ASP.NET 团队确认了这一点。

编辑 2015 年 11 月 27 日

自这篇文章发布以来,Microsoft 进一步发布了有关 .NET Native 和 .NET Core 的公告。我建议您查看 Microsoft Connect 2015 活动中 Scott Hanselman 的主题演讲部分。在 this excerpt video 的 11:22 分钟标记处,Scott 展示了将 .NET 应用程序编译为本机代码,然后 运行ning 它。他说它是 "future work",所以它似乎还没有完全准备好(我相信活动中的一个问答视频解释说它在 GitHub 的开发分支之一,但我懒得去现在为您重新观看所有视频)。目前尚不清楚这是否仅适用于控制台应用程序,或者是否会 运行 ASP.NET.

正如 Thomas 在评论中所说,一旦 LLILC 结束,这应该是可能的。它以 .NET Core 为目标,这是 ASP.NET 5 运行s 的目标。我不确定所产生的 运行time 是否可以被称为 .NET Native 但是 LLILC 确实计划提前本地编译 IL(例如 Roslyn 的输出)-时间。

另一个选项是 ASP.NET 运行ning on CoreRT 通过使用 RyuJIT 作为 AOT 编译器。这在今天看起来比 LLILC 更接近现实。看过一些在 CoreRT 上编译 ASP.NET 项目的实验,但没有任何实际效果。

[.NET Native 使用 UTC 编译器,它在某些 C++ 运行 时间上编译为 运行(MRT - 最小 运行 时间或托管 运行time,记不清了,也叫Native 运行time)。目前 .NET Native UWP 应用程序是 windows 特定的。尽管 .NET Native 和 UWP 在 .NET Core 下进行宣传,但这可能会产生误导,因为仅在调试模式下 UWP 以 CoreCLR 为目标,在发布模式下它以本机 运行time 为目标,这是 Windows 特定的。 LLILC/CoreRT 应该改变这一点。]