我正在ASP.NET CORE 1.0上构建REST API。在生产中,IMHO非常有用,不使用JIT,因为带有应用程序的docker容器正在向上和向下扩展,在CI期间反复重新部署,因此每个已部署容器的即时编译会导致可怕的滞后,LB健康检查死亡和其他痛苦。
正如我所读,使用dotnet CLI的本机编译已停止。 我尝试使用CoreRT进行构建但没有运气(由于复杂性而需要详细信息)。
由于这个问题非常抽象,我没有提供示例代码或详细信息,所以一开始几乎没有问题:
(目标平台将是ubuntu-14.04-x64 docker镜像以及编译平台。出于开发目的,在OSX上编译它也很不错。)
提前谢谢。
答案 0 :(得分:6)
提前完成本机编译目前是不可能的。它是上面链接的CoreRT项目的目标之一,但在我称之为生产准备的任何州都没有。 Connect去年的演示应该是一个非常大的盐。例如,他们仍然没有reflection subsystem。但是,我们有几个解决方案可以大大减少需要在JIT时生成的代码量。对于.NET Core,工具称为CrossGen,而且这些日子已经非常出色。
虽然我引起了你的注意,但我还要提到我们正在研究NGEN / CrossGen格式的演变,这种格式可以减轻典型ni文件所带来的典型痛苦。那就是名称ReadyToRun
希望有所帮助。如果您有其他问题,请告诉我。
披露:我在UWP(CoreRT和LLILC的姐妹项目等)的.NET Native运行时和编译器团队工作
答案 1 :(得分:3)
有一份在https://github.com/dotnet/coreclr/blob/master/Documentation/building/crossgen.md使用CrossGen的指南。它有点过时 - 我会看看我是否可以在某个时候更新它。使用CrossGen最重要的部分是在命令行上指定-Platform_Assemblies_Paths开关,告诉CrossGen所需的所有依赖项的位置(例如,System.Private.CoreLib.dll)。
希望有所帮助。如果您遇到任何进一步的问题,请告诉我。