ASP.NET Core概述-微軟已經收購了mono,為什么還搞.NET Core呢

一、.NET Core概述

1、相關歷程

.NET在設計之初也是考慮像Java一樣跨平臺,.NET Framework是在Windows下運行的,大部分類是可以兼容移植到Linux下,但是沒有人做這個工作。

2001年米格爾為Gnome尋找桌面開發技術,在研究了微軟的.NET Framework之后發起了mono項目。

后來novell公司收購了mono,進一步完善了mono,并且把大部分.NET Framework功能移植到Linux下。mono也成為xamarin(使用.NET開發Android、iOS 移動應用技術)和unity3d(使用.NET 開發android,iOS游戲的技術)基礎。

.NET Core是微軟開發的另一個可以跨Linux、Windows、Mac等平臺的.NET。

2016年初,微軟收購mono的公司xamarin。那為什么微軟已經收購了mono,還要搞出來一個.NET Core呢?因為mono完全兼容.NET Framework,架構太陳舊,不利于現在云計算、集群等新的架構理念。因此,微軟推翻重寫推出了.NET Core。

2、相關技術

.NET Core是.NET Framework的新一代版本,是微軟開發的第一個具有跨平臺(Windows、Mac OSX、Linux) 能力的應用程序開發框架。

.NET Core會包含.NET Framework的類庫(部分命名空間改變、部分類庫可能因為不適用已無對應),與.NET Framework不同的是,.NET Core采用包化(Packages)的管理方式,應用程序只需獲取需要的組件即可。與.NET Framework大包式安裝的做法截然不同,并且各個包有獨立的版本線,不在硬性要求應用程序跟隨主線版本。

.NET Core由許多項目所組成,除了基本的類庫(Core FX)外,還包含了采用RyuJIT編譯的運行平臺 Core CLR、編譯器平臺.NET Compiler Platform、采用AOT編譯技術運行最優化的包 Core RT(.NET Core Runtime),以及跨平臺的MSIL編譯器LLILC(LLVM-based MSIL Compiler)等項目。

RyuJIT: 微軟發展的新式即時編譯器(Just-in-Time Compiler),用來代替.NET Framework的JIT以及JIT64即時編譯器。據微軟測試報告數據,RyuJIT的性能較前一代JIT提升約25%,并支持SIMD(Single Instruction,Multiple Data)技術。RyuJIT已經應用于.NET Framework 4.6以及.NET Core中。

Core CLR:移植了.NET Framework的CLR功能,包含核心程序庫mscorlib、JIT編譯器、垃圾回收器(GC)以及其他運行MSIL所需的運行時環境。

Core RT:以AOT(Ahead-of-time)編譯方式為主的核心功能,在.NET Core內成為Core RT,在UWP(Universal Windows Platform,通用應用平臺)中稱為.NET Native。

Core RT會在構建時期(非運行期間)在編譯時將MSIL轉換成平臺本地的機器代碼,其優點是引導時間短(JIT采用的是運行時編譯,使得引導時間拉長),并且內存占用量少。Core RT在不同的平臺會使用不同的AOT技術。

Windows下使用的是.NET Native。

Mac OSX和Linux上使用的是LLILC(同時支持JIT和AOT)。

LLILC:(LLVM-based MSIL Compiler,英文發音“lilac“)是.NET Core在非Windows平臺的MSIL編譯器,基于ECMA-335(Common Language Infrastructure)的標準將MSIL編譯成本地碼運行,適用于可運行LLVM的操作系統,例如Mac OSX和Linux操作系統。

Roslyn:.NET Compiler Platform(項目代碼為Roslyn)是將.NET 平臺的編譯架構標準化的平臺,它可提供程序管理工具(如集成開發環境)相當多的信息,用于發展有助于編寫程序域管理程序機構所需要的功能,如類型信息、語法結構、語義、參考鏈接、自動化、編譯器、錯誤回收等功能。

只要是遵循CLI標準的編程語言,都可以利用.NET Compiler Platform實現編譯器,讓程序管理工具能夠實現如語法提示、語法自動完成、關鍵字高亮等可視化功能。

.NET Compiler Platform可同時支持.NET Framework 4.6以上版本,.NET Core也原生支持。

二、.NET Core安裝和驗證

1、下載安裝

訪問.NET Core下載頁面,下載.NET Core 3.1版本

下載后直接雙擊安裝一步一步安裝即可。

2、驗證

安裝完成以后,我們打開命令提示符:

dotnet --version

查看當前.NET Core安裝的最新版本。

dotnet --info

查看本機上.NET Core的相關信息。

三、.NET Core常用命令介紹

1、dotnet new

初始化創建一個有效的.NET Core項目和示例源代碼

可以使用dotnet new -h來查看命令的幫助信息。

示例:

dotnet new mvc

2、dotnet restore

還原指定應用程序的依賴項和工具。

命令使用NuGet還原在project.json文件中被指定的依賴項,以及特定于項目的工具。默認情況下,依賴項和工具的還原是并行完成的。

對于依賴項,我們可以在還原操作時使用--packages 參數指定還原包的位置。如果沒有指定,則默認使用NuGet包緩存,它可以在所有的操作系統上的用戶目錄下的.nuget/packages目錄中找到。(Linux上的/home/user、Windows上使用%HOMEPATH%/.nuget/packages)

對于特定項目的工具,dotnet restore首先還原該工具的包,然后繼續還原在project.json中指定的工具依賴項。

示例:

還原在當前目錄中的項目依賴項和工具

dotnet restore

還原在給定的路徑發現coreapp項目依賴項和工具

dotnet restore ~/projects/coreapp/project.json

還原在當前目錄中的項目依賴項和工具,使用兩個文件路徑作為備用源

dotnet restore -f c:\packages\mypackages -f c:\packages\myotherpackages

還原在當前目錄中的項目依賴項和工具,并在輸出中僅顯示errors

dotnet restore --verbosity Error

3、dotnet build

生成項目和所有的依賴。

該命令從源項目中的多個源文件及其依賴生成二進制文件。默認情況下,生成的二進制文件為中間語言(IL)并具有DLL擴展名。dotnet build還刪除了\*.deps文件,該文件概述了主機運行應用程序所需的條件。

生成需要存在鎖定文件,也就是說,在生成代碼之前,必須先運行dotnet restore。

在任何編譯開始之前,都應生成動詞分析項目及其增量安全檢查的依賴。如果所有的檢查都能通過,就會繼續生成與項目及其依賴的增量編譯;否則,它將退回到非增量編譯。通過配置文件標志,用戶可以選擇接受有關如何縮短生成時間的附加信息。

依賴項中需要編譯的所有項目必須通過下面的安全檢查,是編譯過程為增量編譯:

不使用預編譯/編譯后腳本。不從PATH加載編譯工具(如Resgen、編譯器)。僅使用已知編譯器(csc、vbc、fsc)為了生成可執行的應用程序,而不是庫,需要在project.json文件中進行特殊配置:

{

“compilerOptions”:{

"emitEntryPoint":true

}

}

示例:

編譯當前目錄的項目

dotnet build

編譯當前項目并輸出到c:\mydll

dotnet build --output c:\mydll

針對特定運行時生成項目及其依賴項

dotnet build --runtime ubuntu.16.04-x64

4、dotnet run

運行當前目錄下的應用源代碼。

此命令依賴于dotnet build,以便在啟動程序前生成.NET程序集的源輸入。輸出的文件被寫到bin文件夾,如果不存在則創建它,根據需要,文件將被覆蓋。臨時文件被寫入到obj文件夾。

對于具有多個指定框架的項目情況下,dotnet run將首先選擇.NET Core框架,如果不存在,則會輸出錯誤。若要指定其他框架,需要使用--framework參數。

dotnet run命令必須在項目上下文中使用。如果你想執行一個dll,可以使用不帶任何參數的dotnet命令 dotnet myapp.dll 直接運行生成后的dll。

示例:

運行當前目錄中的項目

dotnet run

運行指定的項目

dotnet run --project /projects/coreapp/project.json

5、dotnet test

使用project.json中指定的測試執行工具執行單元測試。

該命令用于執行給定項目中的單元測試。單元測試是包含單元測試框架(包含NUnit或xUnit)和該單元測試框架的dotnet測試運行程序上的依賴項的類庫項目。單元測試打包為NuGet包,并還原為該項目的普通依賴項。

測試項目需要在project.json中使用testRunner節點指定測試運行程序屬性。此值應包含單元測試框架的名稱。

dotnet test支持兩種運行模式:

控制臺,此模式下,dotnet test完全執行傳遞給它的任意命令,并輸出結果。當只調用但不傳遞dotnet test時,在控制臺模式下運行的端口將反過來使運行程序在控制臺模式下運行。設計時,在其他工具,如編輯器或集成開發環境(IDE)的上下文中使用。示例:

運行當前目錄所包含項目中的測試

dotnet test

運行test1項目中的測試

dotnet test /projects/test1/project.json

6、dotnet pack

使用代碼創建NuGet包。

該命令生成項目并創建NuGet包,此操作將生成兩個含有nupkg擴展名名的包:一個是包含代碼,另一個包含調試符號。

被打包的項目的NuGet依賴項添加到nuspec文件,以便在安裝包時可以將其解析。默認情況下,項目到項目的引用不會打包到項目內,要做到這一點,需要在依賴中將引用項目的type節點設置為build

{

"version":"1.0.0-*",

"dependencies":{

"ProjectA":{

"target":"project",

"type":"build"

}

}

}

dotnet pack 默認情況下,首先會生成項目,如果想避免這種情況,使用--no-build選項。這在持續集成(CI)生成方案中非常有用。

示例:

打包當前目錄中的項目

dotnet pack

打包test1項目

dotnet pack ~/projects/test1/project.json

打包當前目錄中的項目,并將生成的包放置到指定的nupkgs文件夾中

dotnet pack --output nupkgs

打包當前目錄中的項目到指定的nupkgs文件夾中,并跳過生成步驟

dotnet pack --no-build --output nupkgs

打包當前項目,并更新生成的具有給定后綴的包版本,例如版本1.0.0-*將更新為1.0.0-ci-1234

dotnet pack --version-suffix "ci-1234"

7、dotnet publish

發布.NET 可移植或獨立應用程序。

該命令用于打包應用程序及所有依賴到文件夾中,準備發布。

編譯應用程序,讀取在project.json文件中指定的依賴,并將生成的文件結果集發布到目錄。

根據可移植應用的類型,生成的目錄包含以下內容:

可移植應用程序,應用程序的中間語言(IL)代碼和應用程序的所有托管依賴項。含本機依賴項的可移植應用程序:除上述內容外,還包括每個本機依賴項的受支持平臺的子目錄。獨立應用程序,除上述內容外,還包括目標平臺的完整運行時。示例:

使用在project.json中發現的框架發布一個應用程序,如果project.json包含runtimes節點,則發布當前平臺的RID。

dotnet publish

使用指定的project.json發布應用程序

dotnet publish ~/projects/test1/project.json

使用netcoreapp1.0框架發布當前應用程序

dotnet publish --framework netcoreapp1.0

使用netcoreapp1.0框架和OS X 10.10運行時發布當前應用程序,這個RID必須存在于project.json的runtimes節點中

dotnet publish --framework netcoreapp1.0 --framework osx.10.11-x64

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫版本管理框架-Flyway(從入門到精通)

一、flyway簡介 Flyway是一個簡單開源數據庫版本控制器(約定大于配置),主要提供migrate、clean、info、validate、baseline、repair等命令。它支持SQL(PL/SQL、T-SQL)方式和Java方式,支持命令行客戶端等&am…

TCP對數據的拆分

應用程序的數據一般都比較大,因此TCP會按照網絡包的大小對數據進行拆分。 當發送緩沖區中的數據超過MSS的長度,數據會被以MSS長度為單位進行拆分,拆分出來的數據塊被放進單獨的網路包中。 根據發送緩沖區中的數據拆分情況,當判斷…

ffmpeg編譯問題

利用ffmpeg實現一個播放器,ffmpeg提供動態庫,但是編譯鏈接的時候遇到下面的問題: ../ffmpegWidgetPlayer/videoplayerwidget.cpp:23: error: undefined reference to sws_freeContext(SwsContext*) ../ffmpegWidgetPlayer/videoplayerwidget.…

JWT介紹及演示

JWT 介紹 cookie(放在瀏覽器) cookie 是一個非常具體的東西,指的就是瀏覽器里面能永久存儲的一種數據,僅僅是瀏覽器實現的一種數據存儲功能。 cookie由服務器生成,發送給瀏覽器,瀏覽器把cookie以kv形式保存到某個目錄下的文本…

JavaScript 金額元轉化為萬

function dealNum(price){if (price 0) {return 0元}const BASE 10000const decimal 0const SIZES ["", "萬", "億", "萬億"];let i undefined;let str "";if (price) {if ((price > 0 && price < BASE…

p標簽的水平居中和垂直居中

1行內塊元素水平居中垂直居中 行內元素和行內塊元素水平居中&#xff0c;給其父元素添加text-align:center&#xff1b;所以案例里面給one加了 text-align: center之后span就會水平居中了。在設置span行高和高都是一樣的 20px;這樣就實現上下居中了。 2塊級元素P元素水平居中…

通過命令行輸入參數控制激勵

1)在命令行的仿真參數&#xff08;SIM_OPT&#xff09;加上&#xff1a;“var_a100 var_b99” 2)在環境中調用&#xff1a; $test$plusargs("var_a")&#xff1b;如果命令行存在這個字符&#xff0c;返回1&#xff0c;否則返回0&#xff1b; $value$plusargs(&qu…

vue2 el-input里實現打字機 效果

vue2 el-input里實現打字機 效果 <el-col :span"24" v-if"ifshowOtherDesc""><el-form-item label"分析" prop"otherDesc"><el-input type"textarea" :disabled"disabled" autofocus"t…

藍牙物聯網對接技術難點有哪些?

#物聯網# 藍牙物聯網對接技術難點主要包括以下幾個方面&#xff1a; 1、設備兼容性&#xff1a;藍牙技術有多種版本和規格&#xff0c;如藍牙4.0、藍牙5.0等&#xff0c;不同版本之間的兼容性可能存在問題。同時&#xff0c;不同廠商生產的藍牙設備也可能存在兼容性問題。 2、…

0-1背包問題

二維版: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 1010;static int[][] dp new int[N][N]; //dp[i][j] 只選前i件物品,體積 < j的最優解static int[] w new int[N]; //存儲價…

Day03 嵌入式---中斷

目錄 一、簡單介紹 二、總體框架 三、NVIC 3.2 NVIC的寄存器 3.3 中斷向量表 3.4 中斷優先級 3.5 NVIC優先級分組 3.6 NVIC配置 3.6.1、設置中斷分組 3.6.2、初始化 四、EXTI 外部中斷 4.1.EXTI的基本概念 4.2.EXTI的?作原理 4.3 EXTI配置 五、SYSCFG 5.1 SYS…

字符串函數`strlen`、`strcpy`、`strcmp`、`strstr`、`strcat`的使用以及模擬實現

文章目錄 &#x1f680;前言&#x1f680;庫函數strlen??strlen的模擬實現 &#x1f680;庫函數strcpy??strcpy的模擬實現 &#x1f680;strcmp??strcmp的模擬實現 &#x1f680;strstr??strstr的模擬實現 &#x1f680;strcat??strcat的模擬實現 &#x1f680;前言 …

ReactJS和VueJS的簡介以及它們之間的區別

本文主要介紹ReactJS和VueJS的簡介以及它們之間的區別。 目錄 ReactJS簡介ReactJS的優缺點ReactJS的應用場景VueJS簡介VueJS的優缺點VueJS的應用場景ReactJS和VueJS的區別 ReactJS簡介 ReactJS是一個由Facebook開發的基于JavaScript的前端框架。它是一個用于構建用戶界面的庫&…

【C語言】——函數遞歸,用遞歸簡化并實現復雜問題

文章目錄 前言一、什么是遞歸二、遞歸的限制條件三、遞歸舉例1.求n的階乘2. 舉例2&#xff1a;順序打印一個整數的每一位 四、遞歸的優劣總結 前言 不多廢話了&#xff0c;直接開始。 一、什么是遞歸 遞歸是學習C語言函數繞不開的?個話題&#xff0c;那什么是遞歸呢&#xf…

電商平臺商品銷量API接口,30天銷量API接口接口超詳細接入方案說明

電商平臺商品銷量API接口的作用主要是幫助開發者獲取電商平臺上的商品銷量信息。通過這個接口&#xff0c;開發者可以在自己的應用或網站中實時獲取商品的銷量數據&#xff0c;以便進行銷售分析、庫存管理、市場預測等操作。 具體來說&#xff0c;電商平臺商品銷量API接口的使…

RocketMq集成SpringBoot(待完善)

環境 jdk1.8, springboot2.7.3 Maven依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> <!-- lookup parent from…

vue3 筆記 - 聲明式 一

官網&#xff1a;Vue.js - 漸進式 JavaScript 框架 | Vue.js vue3編寫有聲明式和響應式。該文章僅記錄聲明式。vue3聲明式與vue2相同。 一、生命周期 創建之前 beforeCreate()已創建 created()掛載之前 beforeMount()已掛載 mounted()銷毀之前 beforeUnmount()已銷毀 unmoun…

java面試-Dubbo和zookeeper運行原理

遠離八股文&#xff0c;面試大白話&#xff0c;通俗且易懂 看完后試著用自己的話復述出來。有問題請指出&#xff0c;有需要幫助理解的或者遇到的真實面試題不知道怎么總結的也請評論中寫出來&#xff0c;大家一起解決。 java面試題匯總-目錄-持續更新中 分布式注冊中心和服務調…

Unity中后處理簡介

文章目錄 前言一、后處理的原理二、我們看一下Unity文檔中&#xff0c;內置的后處理前后的效果后處理前&#xff1a;后處理后&#xff1a; 前言 我們在這篇文章中&#xff0c;了解一下Unity中的后處理效果 后期處理概述 一、后處理的原理 在后處理的過程中&#xff0c;我們主…

Java當中常用的算法

文章目錄 算法二叉樹左右變換數據二分法實現 冒泡排序算法插入排序算法快速排序算法希爾排序算法歸并排序算法桶排序算法基數排序算法分治算法漢諾塔問題動態規劃算法引子代碼實現背包問題 KMP算法什么是KMP算法暴力匹配KMP算法實現 今天我們來看看常用的算法&#xff0c;開干。…