當前位置:
首頁 > 最新 > NET Core單文件發布靜態編譯AOT CoreRT

NET Core單文件發布靜態編譯AOT CoreRT

.NET Core單文件發布靜態編譯AOT CoreRT,將.NET Core應用打包成一個可執行文件並包含運行時。

支持Windows, MacOS and Linux x64 w/ RyuJIT codegen。

示例項目:

https://github.com/dotnet/corert/tree/master/samples/WebApi

下面來實際體驗。

首先確保安裝C++編譯環境,以及.NET Core 2.0 以上版本SDK。


打開命令提示符,輸入如下:

dotnet new webapi -o zeroapi

cd zeroapi

新建WebAPI應用。


目前CoreRT還是alpha版,在myget上有包。

首先添加一個nuget.config

dotnet new nuget

然後在

節點添加如下:

接著添加Microsoft.DotNet.ILCompiler包引用:

dotnet add package Microsoft.DotNet.ILCompiler -v 1.0.0-alpha-*


打開Startup.cs ,將 services.AddMvc(); 替換成 services.AddMvcCore().AddJsonFormatters();

接著創建一個rd.xml 配置文件,用於反射處理運行時,確保反射程序集編譯到程序中。

rd.xml配置文件如下:

其中如果你要替換成自己的程序,更改 中的Name。

打開zeroapi.csproj

節點下將 rd.xml 加入。

接著將

替換成如下:

接著將 ValuesController 更改一下,確保功能正常,如下:

public class ValuesController

{

[HttpGet("/")]

public string Hello() => "Hello World! LineZero AOT";

// GET api/values

[HttpGet("/api/values")]

public IEnumerable Get()

{

return new string[] { "AOT", "CoreRT" };

}

// GET api/values/5

[HttpGet("/api/values/")]

public string Get(int id)

{

return "Your value is " + id;

}

}

程序改造完成,接著最重要的發布。

發布之前,使用dotnet run 確保功能正常運行。

發布請打開x64 Native Tools Command Prompt for VS 2017,注意一定在此命令行發布。在開始菜單找到 Visual Studio 2017,打開就能找到。

發布命令還是 dotnet publish -r -c

這裡發布Windows 64位dotnet publish -r win-x64 -c release,初次的話會默認還原對應的包,需要一些時間。

發布完成後,打開binx64
elease
etcoreapp2.0win-x64publish 文件夾,裡面zeroapi.exe即為最終文件,執行即可。

可以看到最終大小為21m左右。然後訪問http://localhost:5000/ 如圖:


新建一個控制台應用,使用AOT發布。

單純控制台,沒有反射的內容,無需要rd.xml 文件。

代碼如下:

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Hello World!");

Console.WriteLine("LineZero AOT Demo!");

Console.ReadKey();

}

}

最終 dotnet publish -r win-x64 -c release 發布

最終單個文件大小不到4m!

目前該技術還是早期版本,期待微軟最終帶到正式版。

GitHub:https://github.com/dotnet/corert

原文地址:https://www.cnblogs.com/linezero/p/CoreRT.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 dotNET跨平台 的精彩文章:

入門乾貨之用DVG打造你的項目主頁-Docfx、Vs、Github

TAG:dotNET跨平台 |