国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - ASP.NET教程 - .NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的方法詳解

.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的方法詳解

2020-05-28 15:01LineZero ASP.NET教程

這篇文章主要給大家介紹了關(guān)于.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

本文主要介紹的是關(guān)于.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT,將.NET Core應(yīng)用打包成一個(gè)可執(zhí)行文件并包含運(yùn)行時(shí)。

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

示例項(xiàng)目:

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

下面來(lái)實(shí)際體驗(yàn)。

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

新建WebAPI應(yīng)用

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

?
1
2
3
dotnet new webapi -o zeroapi
 
cd zeroapi

新建WebAPI應(yīng)用。

添加CoreRT到項(xiàng)目

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

首先添加一個(gè)nuget.config

?
1
dotnet new nuget

然后在 <packageSources> 節(jié)點(diǎn)添加如下:

?
1
2
<add key="dotnet-core" value="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />

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

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

替換默認(rèn)services并處理反射

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

接著創(chuàng)建一個(gè)rd.xml 配置文件,用于反射處理運(yùn)行時(shí),確保反射程序集編譯到程序中。

rd.xml配置文件如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<Directives>
 <Application>
 <Assembly Name="zeroapi" Dynamic="Required All" />
 <Assembly Name="Microsoft.AspNetCore.Server.Kestrel.Core">
  <Type Name="Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServer" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Server.Kestrel.Core.Internal.KestrelServerOptionsSetup" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.AspNetCore.Server.Kestrel" Dynamic="Required All"/>
 <Assembly Name="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv">
  <Type Name="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransportFactory" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.LibuvTransportOptions" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.DependencyInjection" Dynamic="Required All">
  <Type Name="Microsoft.Extensions.DependencyInjection.DefaultServiceProviderFactory" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteExpressionBuilder" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.Options">
  <Type Name="Microsoft.Extensions.Options.OptionsManager`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]]" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.Options.OptionsFactory`1[[Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerOptions,Microsoft.AspNetCore.Server.Kestrel.Core]]" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.Options.OptionsMonitor`1[[Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions,Microsoft.Extensions.Logging.Console]]" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.AspNetCore.Mvc.Core" Dynamic="Required All" />
 <Assembly Name="Microsoft.AspNetCore.Routing">
  <Type Name="Microsoft.AspNetCore.Routing.Internal.RoutingMarkerService" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Builder.RouterMiddleware" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Routing.Tree.TreeRouteBuilder" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Routing.DefaultInlineConstraintResolver" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Routing.RouteOptions" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.AspNetCore.Mvc.Formatters.Json">
  <Type Name="Microsoft.AspNetCore.Mvc.Formatters.Json.Internal.MvcJsonMvcOptionsSetup" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Mvc.MvcJsonOptions" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.AspNetCore.Authorization">
  <Type Name="Microsoft.AspNetCore.Authorization.DefaultAuthorizationPolicyProvider" Dynamic="Required All" />
  <Type Name="Microsoft.AspNetCore.Authorization.AuthorizationOptions" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.AspNetCore.Http">
  <Type Name="Microsoft.AspNetCore.Http.HttpContextFactory" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.AspNetCore.Hosting" Dynamic="Required All">
  <Type Name="Microsoft.AspNetCore.Hosting.Internal.ApplicationLifetime" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.Logging.Abstractions">
  <Type Name="Microsoft.Extensions.Logging.Logger`1[[Microsoft.AspNetCore.Hosting.Internal.WebHost,Microsoft.AspNetCore.Hosting]]" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.Logging">
  <Type Name="Microsoft.Extensions.Logging.LoggerFactory" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.Logging.Console">
  <Type Name="Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.Logging.Debug">
  <Type Name="Microsoft.Extensions.Logging.Debug.DebugLogger" Dynamic="Required All" />
  <Type Name="Microsoft.Extensions.Logging.Debug.DebugLoggerProvider" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="System.Linq.Expressions">
  <Type Name="System.Linq.Expressions.ExpressionCreator`1[[Newtonsoft.Json.Serialization.ObjectConstructor`1[[System.Object,System.Private.CoreLib]],Newtonsoft.Json]]" Dynamic="Required All" />
  <Type Name="System.Linq.Expressions.ExpressionCreator`1[[System.Func`2[[System.Object,System.Private.CoreLib],[System.Object,System.Private.CoreLib]],System.Private.CoreLib]]" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.ObjectPool">
  <Type Name="Microsoft.Extensions.ObjectPool.DefaultObjectPoolProvider" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Newtonsoft.Json">
  <Type Name="Newtonsoft.Json.Serialization.ObjectConstructor`1[[System.Object,System.Private.CoreLib]]" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="System.ComponentModel.TypeConverter">
  <Type Name="System.ComponentModel.TypeConverter" Dynamic="Required All" />
  <Type Name="System.ComponentModel.StringConverter" Dynamic="Required All" />
  <Type Name="System.ComponentModel.Int32Converter" Dynamic="Required All" />
 </Assembly>
 <Assembly Name="Microsoft.Extensions.Configuration.Json">
  <Type Name="Microsoft.Extensions.Configuration.Json.JsonConfigurationSource" Dynamic="Required All" />
 </Assembly>
 </Application>
</Directives>

其中如果你要替換成自己的程序,更改 <Assembly Name="zeroapi" Dynamic="Required All" /> 中的Name。

打開zeroapi.csproj

<PropertyGroup>節(jié)點(diǎn)下將 <RdXmlFile>rd.xml</RdXmlFile> 加入。

接著將 <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" /> 替換成如下:

?
1
2
3
<PackageReference Include="Microsoft.AspNetCore" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.0.1" />

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ValuesController
 {
 [HttpGet("/")]
 public string Hello() => "Hello World! LineZero AOT";
 // GET api/values
 [HttpGet("/api/values")]
 public IEnumerable<string> Get()
 {
  return new string[] { "AOT", "CoreRT" };
 }
 // GET api/values/5
 [HttpGet("/api/values/{id}")]
 public string Get(int id)
 {
  return "Your value is " + id;
 }
 }

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

還原并發(fā)布

發(fā)布之前,使用dotnet run 確保功能正常運(yùn)行。

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

發(fā)布命令還是  dotnet publish -r <RID> -c <Configuration>

這里發(fā)布Windows 64位 dotnet publish -r win-x64 -c release,初次的話會(huì)默認(rèn)還原對(duì)應(yīng)的包,需要一些時(shí)間。

發(fā)布完成后,打開bin\x64\release\netcoreapp2.0\win-x64\publish 文件夾,里面zeroapi.exe即為最終文件,執(zhí)行即可。

.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的方法詳解

可以看到最終大小為21m左右。然后訪問(wèn)http://localhost:5000/ 如圖:

控制臺(tái)Demo

新建一個(gè)控制臺(tái)應(yīng)用,使用AOT發(fā)布。

單純控制臺(tái),沒(méi)有反射的內(nèi)容,無(wú)需要rd.xml 文件。

代碼如下:

?
1
2
3
4
5
6
7
8
9
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 發(fā)布

.NET Core單文件發(fā)布靜態(tài)編譯AOT CoreRT的方法詳解

最終單個(gè)文件大小不到4m!

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

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。

原文鏈接:https://www.cnblogs.com/linezero/p/CoreRT.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 三级黄色视频毛片 | 久久国产一区 | 欧洲一区二区三区 | 国产99久久 | 国产精品精品 | 国产视频一区在线 | 在线日韩 | 欧美亚洲 | 欧洲亚洲精品久久久久 | 一区二区不卡视频 | 亚洲一区二区三 | 在线成人av | 直接看av的网站 | 亚洲午夜成激人情在线影院 | 中文二区 | 久久精品夜夜夜夜夜久久 | 久久一二区 | 免费观看av| 日本中文字幕在线视频 | 一级全黄性色生活片 | 国产亚洲一区二区三区 | 久久91av | 一级黄色一级黄色 | 亚洲成人自拍 | 久久国产精品一区二区三区 | 中文字幕专区 | 国产精品久久久久久久久久免费看 | 午夜精品一区二区三区在线观看 | 国产一区二区三区视频 | 日韩一区二区视频在线 | 成人妇女免费播放久久久 | 麻豆激情 | 亚洲免费观看视频网站 | 免费黄网站在线观看 | 亚洲 精品 综合 精品 自拍 | 中文字幕一区三级久久日本 | 亚洲精品国产二区 | 韩国三级午夜理伦三级三 | 日韩欧美综合 | 青青久久av北条麻妃黑人 | 国产美女啪啪 |