AOT是預編譯成本地程序,避免JIT動態編譯存在的性能問題。linux
netcore一個吸引人的項目,就是基於coreRt 運行時的本地編譯技術,下面我來替你們嘗試一下它究竟表現如何。c++
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <RestoreSources>https://dotnet.myget.org/F/dotnet-core/api/v3/index.json</RestoreSources> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="microsoft.dotnet.ilcompiler" Version="1.0.0-alpha-*" /> </ItemGroup> </Project>
首先要在項目文件添加相關的包源,也就是:json
<RestoreSources>https://dotnet.myget.org/F/dotnet-core/api/v3/index.json</RestoreSources>windows
而後引用包:api
<PackageReference Include="microsoft.dotnet.ilcompiler" Version="1.0.0-alpha-*" />app
由於尚未正式版,因此要把版本號寫清楚,不然會提示找不到該包。性能
用命令發佈:測試
dotnet publish -r win-x64 -c releasethis
會提示錯誤:error : Platform linker not found. To fix this problem, download and install Visual Studio 2017 from http://visualstudio.com. Make sure to install the Desktop Development for C++ workload.spa
微軟就是喜歡這裏一塊那裏一塊,就不能好好提供一站式服務嗎?沒辦法,下載安裝c++ 環境。這個要4GB,不知道有什麼越過的方法。
經測試,在win7 sp1 x64 虛擬機環境下能夠正常執行。
hello world程序不到4m大小。感受還能夠。
只支持64位生成,並且不能交叉編譯,也就是不能在windows編譯linux程序。在win7下面測試成功,winxp提示不是有效32位(不知道在xp 64版會怎樣)。不知道可否支持win vista。
ps。當這個native包更新後,他會替換默認的編譯器,不知道怎麼換回來。。