C# 使用CoreRT/另一个AOT编译.net core应用程序

C# 使用CoreRT/另一个AOT编译.net core应用程序,c#,compilation,.net-core,.net-native,corert,C#,Compilation,.net Core,.net Native,Corert,我正在ASP.NETCore1.0上构建RESTAPI。在生产中,不使用JIT是非常有用的,因为应用程序中的docker容器在不断地放大和缩小,在CI期间不断地重新部署,因此对每个部署的容器进行及时编译会导致严重的延迟、LB健康检查死亡和其他痛苦 正如我所读到的,使用dotnet CLI的本机编译已停止。 我试着用运气进行构建(由于复杂性,需要细节) 由于这个问题相当抽象,我不提供示例代码或详细信息,因此首先有几个问题: 我的假设正确吗?提前编译能否解决每个路径第一次执行缓慢的问题?或者,是否还

我正在ASP.NETCore1.0上构建RESTAPI。在生产中,不使用JIT是非常有用的,因为应用程序中的docker容器在不断地放大和缩小,在CI期间不断地重新部署,因此对每个部署的容器进行及时编译会导致严重的延迟、LB健康检查死亡和其他痛苦

正如我所读到的,使用dotnet CLI的本机编译已停止。 我试着用运气进行构建(由于复杂性,需要细节)

由于这个问题相当抽象,我不提供示例代码或详细信息,因此首先有几个问题:

  • 我的假设正确吗?提前编译能否解决每个路径第一次执行缓慢的问题?或者,是否还有其他解决方案
  • 如果这是真的,那么目前是否可以从.NETCore构建“本机”应用程序(ubuntu x64目标)
  • 如果是,最佳做法是什么?我如何做到?有人有这方面的经验吗
  • (目标平台将是ubuntu-14.04-x64 docker image以及编译平台。出于开发目的,也可以在OSX上编译它。)


    提前感谢。

    现在不可能提前编译完整的本机版本。这是上面链接的CoreRT项目的目标之一,但在任何我称之为生产就绪的状态下都不存在。去年在Connect上的演示应该是有相当大的保留余地的。例如,他们仍然没有一个有效的解决方案。然而,我们有两个解决方案,可以大大减少JIT时需要生成的代码量。对于.NETCore来说,这个工具被称为,现在已经非常成熟了

    在我引起您注意的同时,我还要提到,我们正在开发NGEN/CrossGen格式,以减轻与典型ni文件相关的大量典型痛苦。那是当时的名字

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


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

    有一个使用CrossGen的指南。它有点过时了,我看看有没有时间更新一下。使用CrossGen最重要的部分是在命令行上指定-Platform_Assemblies_Paths开关,告诉CrossGen它需要的所有依赖项的位置(例如,System.Private.CoreLib.dll)


    希望有帮助。如果您遇到任何进一步的问题,请告诉我。

    如果这在现阶段是可行的,我想知道为什么微软还没有宣布。所以我的理解是,时机不对,你不应该为这么大的话题而烦恼。你确定吗?CoreRT项目听起来很有希望[每个人都知道它很有希望,微软甚至在去年的Connect上演示了它。但在它达到生产质量之前,别管它了。我在下面发布了一个我认为有帮助的答案,但是…你能分享一下你的启动时间吗?你提到了健康检查失败。你需要达到哪种公差?谢谢你的支持我们的注意力,我肯定会看这些。--回到上面的问题-几乎每个路径的启动时间都是10-20秒。这是一个小项目。所以我尝试使用CrossGen。在nuget软件包缓存的第十个文件夹级别找到了它。但现在我意识到我不知道如何使用它,因为几乎没有相关文档。当我在project上运行它,它告诉我“System.Private.CoreLib.dll”缺失。你能给我一些基本说明吗?我可以提出一个新问题。为了不让你误入歧途,我已经联系了crossgen的开发人员。希望他们中的一个能帮我们解决问题。