.NET Core应用类型(Portable apps amp; Self-contained apps)
介紹
有許多種方式可以用來考慮構建應用的類型,通常類型用來描述一個特定的執行模型或者基于此的應用。舉例說:控制臺應用(Console Application)、Web應用(Web Application)等等。所有這些類型的應用都可以用.NET Core來創建。.NET Core本身就是一個通用的開發平臺。但是要賦予.NET Core跨平臺的特性,.NET Core仍要需要一個角來發掘應用的類型,這被稱為:應用的可移植性(application's portablility)。可移植性本質上意味著哪里可以運行你的應用程序以及要在某個特定的機器上運行需要滿足哪些先決條件。下面我們要描述兩種主要的.NET Core具有的可移植類型。
Portable applications
可移植應用是.NET Core的默認的應用類型。這需要.NET Core被事先安裝到運行程序的目標機器上。這就意味著你作為開發人員,在不同的.NET Core裝置之間你的程序是可移植的。這種類型的應用只需要攜帶、部署自身的代碼和依賴即可(.NET Core庫之外的)。為了創建一個可移植的應用程序,所有你需要做的就是在project.json里面設置目前.NET Core的類庫,然后把frameworks改成如下所示:
"dependencies": { ??"Microsoft.NETCore.App": { ?"version": "1.0.0", ? ?
? ? ? ?"type": "platform"} },"frameworks": {
? ?"netcoreapp1.0": {}
}
【Microsoft.NETCore.App】是一個“元數據包”,它向你表明你的目標.NET Core類庫。依賴里的【type:platform】屬性意味著當發布時,發布工具將省略發布這些依賴的.NET Core類庫文件,因為這些依賴類庫文件已經隨著.NET Core安裝到目標服務器上了。
使用原生依賴的可以移植應用
使用原生依賴的可以移植應用是上面可移植應用的子集。這些可以移植的應用擁有一些在依賴鏈上特定地方指定的原生依賴,這樣這些原生依賴項可以直接運行的目標平臺,我們的可以移植程序也同樣可以直接運行在這些平臺上。最典型的例子就是我們的Kestrel服務器(ASP.NET 跨平臺 Web 服務器),它的構建是基于libuv(原生依賴)。當你發布一個具有原生依賴的可移植應用時,所有的發布輸出都和上述一致,至于原生依賴,發布輸出則會為每一個RID(Runtime Identifier)生成一個文件夾。下面的project.json文件展示了一個可移植應用使用原生依賴:
"dependencies": { ?? ?"Microsoft.NETCore.App": { ?"version": "1.0.0", ? ?
? ? ? ?"type": "platform"}, ?
? ?"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*"},
? ?"frameworks": { ?
? ? ? ?"netcoreapp1.0": {} }
Self-contained applications
和可移植的應用不同,獨立的應用不依賴任何分享的組件在你準備部署程序的目標機器上。和它名字的暗示一樣,它意味著整個依賴是閉環的,運行時將會和整個程序一起發布。這會使整個發布包變更大一些,但是這也使得程序可以使用正確的原生依賴運行在任何一個.NET Core支持的平臺上(而不用管.NET Core是否已事先被安裝到目標服務器上)。這使得更加容易去部署你的應用程序到目標服務器上。因為現在應用程序的發布會自身攜帶運行時,所以必須事先明確指定哪些平臺你的程序將會運行。比如,如果你想發布一個獨立的程序到Windows 10,但不準備運行到macOS和Linux,這樣你在開發時必須新增或刪除一些平臺(platforms)。完成一個獨立的程序會經歷很多步驟,但第一步需要刪除任何?"type": "platform"
屬性。第二步是保留對Microsoft.NETCore.App的依賴,它會拉入一些我們需要的剩余的事情。最后,我們需要在project.json中添加一個運行時(runtimes)節點,以此來表明我們的程序將會在哪些平臺上運行。
"dependencies": { ??"Microsoft.NETCore.App": "1.0.0"
},
"frameworks": {
? ?"netcoreapp1.0": {} },
"runtimes": { ?
?"win10-x64": {},
? ?"osx.10.11-x64": {} }
當我們restore項目時,如果project.json中包含runtimes節點,NuGet將會restore所有指定的運行時。接下來,當需要為給定的平臺發布應用程序時,我們使用如下的命令行:
dotnet publish --runtime <RID>RID必須是project.json中指定的RID,如:win10-x64或者osx.10.11-x64,否則會報錯。如果你將要發布到的操作系統是你當前的.NET Core正在運行的操作系統,則直接使用如下命令即可:
dotnet publish?但是你仍然需要在project.json中指定對應的RID。
但需要注意的是:在.NET Core Tools Preview 2 的時間期限內,獨立的應用是從本機NuGet緩存中發布的,這就意味著應用所有的依賴包括.NET Core運行時和類庫并不是運行優化的。因此,獨立的應用比可移植的應用整體上性能要低,原因在于可移植應用所依賴的.NET Core運行時和類庫都是隨時可以運行(ready-to-run)的。
相關文章:
ASP.NET Core 1.0 入門——了解一個空項目
ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
.NET Core 1.0、ASP.NET Core 1.0和EF Core 1.0簡介
云服務器下ASP.NET Core 1.0環境搭建(包含mono與coreclr)
使用VS Code開發ASP.NET Core 應用程序
dotnet run是如何啟動asp.net core站點的
ASP.NET Core提供模塊化Middleware組件
“dotnet restore"和"dotnet run"都做了些什么?
探秘 dotnet run 如何運行 .NET Core 應用程序
.NET Portability Analyzer 已開源
ASP.NET Core的配置(1):讀取配置信息
ASP.NET Core的配置(2):配置模型詳解
.NET Core 1.0 RC2 歷險之旅
使用VS Code開發 調試.NET Core 應用程序
讓我們Core在一起:ASP.NET Core & .NET Core
.NET Core VS Code 環境配置
官方博客明確了 .NET Core RC2/RTM 時間表
.NET Core全新的配置管理[共9篇]
利用記事本創建一個ASP.NET Core RC2 MVC應用
微軟.NET 正式劈腿成功,橫跨所有平臺
.NET Core 1.0 CentOS7 嘗試
解讀發布:.NET Core RC2 and .NET Core SDK Preview 1
[.NET Core].NET Core R2安裝及示例教程
ASP.NET Core 開發-中間件(Middleware)
結合Jexus + Kestrel 部署 asp.net core 生產環境
通過Jexus 部署 dotnetcore版本MusicStore 示例程序
ASP.NET Core 中文文檔 第一章 入門
用 Visual Studio Code 在 macOS 上創建首個 ASP.NET Core 應用程序
用 Visual Studio 和 ASP.NET Core MVC 創建首個 Web API
用 Visual Studio 發布一個 Azure 云 Web 應用程序
ASP.NET Core MVC 與 Visual Studio 入門
第二章指南(4.2)添加 Controller
DotNet Core 介紹
asp.net core 中間件詳解及項目實戰
教你實踐ASP.NET Core Authorization(免看文檔教程)
asp.net core 使用 Redis 和 Protobuf 進行 Session 緩存
asp.net core 中間件詳解及項目實戰
第二章 指南(4.3)添加 View
dotnet core開發體驗之開始MVC
dotnet core 開發體驗之Routing
聊聊ASP.NET Core默認提供的這個跨平臺的服務器——KestrelServer
簡析.NET Core 以及與 .NET Framework的關系
.NET Core 使用Dapper 操作MySQL
使用 CommandLineApplication 類創建專業的控制臺程序
簡析 .NET Core 構成體系
.NET Core也可以使用MongoDB了
.NET Core & ASP.NET Core 1.0在Redhat峰會上正式發布
.NET Core:面向未來的開源跨平臺開發技術
微軟說它深愛著Linux,現在它用行動證明了
移植.NET Core計劃,整合各平臺變得更簡單了!
ASP.NET Core 介紹
通過幾個Hello World感受.NET Core全新的開發體驗
ASP.NET Core 運行原理剖析1:初始化WebApp模版并運行
.NET Core系列 : 1、.NET Core 環境搭建和命令行CLI入門
Asp.Net Core 發布和部署( MacOS + Linux + Nginx )
Asp.Net Core 發布和部署(Linux + Jexus )
原文地址:http://www.cnblogs.com/frankyou/p/5640481.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的.NET Core应用类型(Portable apps amp; Self-contained apps)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习ASP.NET Core,你必须了解
- 下一篇: .NET Core 1.0发布:微软开源