使用 CoreRT/另一个 AOT 编译 .net 核心应用程序

Compiling .net core app with CoreRT / another AOT

我正在 ASP.NET CORE 1.0 上构建 REST API。在生产中,恕我直言,不使用 JIT 非常有用,因为应用程序的 docker 容器不断扩大和缩小,在 CI 期间一遍又一遍地重新部署,因此即时编译每个部署的容器都会导致严重的滞后、LB 健康检查死亡和其他痛苦。

据我了解,使用 dotnet CLI 进行的本机编译已停止。 我尝试使用 CoreRT 进行构建,但没有成功(由于复杂性,请按需提供详细信息)。

由于这个问题很抽象,我没有提供示例代码或详细信息,所以一开始只有几个问题:

  1. 我的假设是否正确 - 提前编译是否会解决每个路径首次执行缓慢的问题 - 或者 - 是否还有其他解决方案?
  2. 如果是真的,目前是否可以从 .NET Core 构建 "native" 应用程序(ubuntu x64 目标)?
  3. 如果是,最佳做法是什么 - 我该怎么做?有人有这方面的经验吗?

(目标平台将是 ubuntu-14.04-x64 docker 图像以及编译平台。为了开发目的,在 OSX 上编译它也很好。 )

提前致谢。

目前无法进行完整的原生提前编译。这是上面链接的 CoreRT 项目的目标之一,但没有处于任何我称之为生产就绪的状态。去年在 Connect 上的演示应该有相当大的保留。例如,他们仍然没有 reflection subsystem. However, we have a couple of solutions that can greatly reduce the amount of code needing to be generated at JIT time. For .NET Core the tooling is called CrossGen,而且这些天烤得很好。

虽然我引起了你的注意,但我还会提到我们正在研究 NGEN/CrossGen 格式的演变,以减轻典型 ni 文件所涉及的典型痛苦。那在当时的名字 ReadyToRun

希望对您有所帮助。如果您还有其他问题,请告诉我。

披露:我在 UWP(CoreRT 和 LLILC 等的姊妹项目)的 .NET Native 运行时和编译器团队工作

https://github.com/dotnet/coreclr/blob/master/Documentation/building/crossgen.md 上有使用 CrossGen 的指南。它有点过时了 - 我会看看是否可以在某个时候更新它。使用 CrossGen 最重要的部分是在命令行上指定 -Platform_Assemblies_Paths 开关,告诉 CrossGen 它需要的所有依赖项的位置(例如,System.Private.CoreLib.dll)。

希望对您有所帮助。如果您 运行 有任何进一步的问题,请告诉我。