ASP.NET CORE1.0でREST APIを構築しています。本番環境では、アプリのDockerコンテナーがスケールアップおよびスケールダウンし、再デプロイされるため、JITを使用しないことは非常に便利です。 CI中に何度も繰り返されるため、デプロイされたすべてのコンテナーのジャストインタイムコンパイルにより、ひどいラグ、LBヘルスチェックの死亡、その他の問題が発生します。
私が読んだように、dotnetCLIを使用したネイティブコンパイルは中止されました。 CoreRT でビルドしてみましたが、運がありませんでした(複雑さのために詳細はオンデマンドで)。
この質問は非常に抽象的であるため、サンプルコードや詳細情報は提供していません。そのため、最初にいくつかの質問があります。
(ターゲットプラットフォームは、ubuntu-14.04-x64 docker imageとコンパイルプラットフォームです。開発目的では、OSXでコンパイルするのも良いでしょう。)
前もって感謝します。
現時点では、完全なネイティブを事前にコンパイルすることはできません。これは、上記でリンクされたCoreRTプロジェクトの目標の1つですが、本番環境に対応しているとは言えません。昨年のコネクトでのデモは、かなり大きな塩で行う必要があります。たとえば、まだ リフレクションサブシステム がありません。ただし、JIT時に生成する必要のあるコードの量を大幅に削減できるソリューションがいくつかあります。 .NET Coreの場合、ツールは CrossGen と呼ばれ、最近はかなり焼き付けられています。
私はあなたの注意を引いていますが、私たちは典型的なniファイルに伴う典型的な苦痛の大きな塊を軽減するNGEN/CrossGenフォーマットの進化に取り組んでいることにも言及します。それはその時の名前の下にあります ReadyToRun
お役に立てば幸いです。他にご不明な点がございましたら、お気軽にお問い合わせください。
開示:私はUWP(CoreRTやLLILCなどの姉妹プロジェクト)の.NETネイティブランタイムおよびコンパイラチームで働いています。
CrossGenを使用するためのガイドが https://github.com/dotnet/coreclr/blob/master/Documentation/building/crossgen.md にあります。少し古くなっています。いつか更新できるかどうかを確認します。 CrossGenを使用する上で最も重要な部分は、コマンドラインで-Platform_Assemblies_Pathsスイッチを指定して、必要なすべての依存関係(System.Private.CoreLib.dllなど)の場所をCrossGenに通知することです。
お役に立てば幸いです。さらに問題が発生した場合はお知らせください。