乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Dotnet Core使用特定的SDK&Runtime版本

       頭號碼甲 2021-03-15

      Dotnet Core的SDK版本總在升級,怎么使用一個特定的版本呢?

      假期過完了,心情還在。今天寫個短的。

      一、前言

      寫這個是因為昨天刷微軟官方文檔,發(fā)現(xiàn)global.json在 SDK 3.0 后,更新了一些內(nèi)容。文檔提到了這個更新,但規(guī)則說的不太清楚,所以研究了一下,成了這個文章。

      先普及一下 .Net Core Runtime 和 .Net Core SDK 的區(qū)別,如果請楚,這段可以直接跳過。

      我們用命令

      % dotnet --list-sdks

      查看已安裝的Dotnet框架時,會查到類似于下面的內(nèi)容:

      1.1.14 [/usr/local/share/dotnet/sdk]
      2.1.600 [/usr/local/share/dotnet/sdk]
      2.1.602 [/usr/local/share/dotnet/sdk]
      2.1.604 [/usr/local/share/dotnet/sdk]
      2.1.700 [/usr/local/share/dotnet/sdk]
      2.1.801 [/usr/local/share/dotnet/sdk]
      2.2.203 [/usr/local/share/dotnet/sdk]
      3.0.100 [/usr/local/share/dotnet/sdk]
      3.1.101 [/usr/local/share/dotnet/sdk]

      可以看到,我們安裝了兩類的東西,.Net Core SDK 和 .Net Core Runtime,并且各自對應(yīng)的版本。其實,SDK 和 Runtime 各有各的用處:

      • .Net Core Runtime - 運行時框架。顧名思義,就是.Net Core應(yīng)用運行時需要使用的框架/庫。這個框架很小,只能用于運行編譯后的代碼。也就是說,編譯后的程序運行時,會調(diào)用這個框架里的庫。

      • .Net Core SDK - 這個框架很大,是用來做除了運行以外的其它部分:編譯、調(diào)試應(yīng)用,以下管理NuGet包等等。當(dāng)我們開發(fā)時,主要用的是這個框架。

      所以,在開發(fā)機器上我們就需要安裝 SDK 和 Runtime 兩個框架,而在生產(chǎn)機器上,就僅安裝 Runtime 就好了。

      同時,SDK 和 Runtime 是對應(yīng)的,一個特定版本的 SDK,總會對應(yīng)一個特定版本的 Runtime。

      在微軟的體系中,.Net Core SDK 是向后兼容的,SDK 3.1 完全可以用來構(gòu)建 SDK 2.2 類似的應(yīng)用程序。換句話說,通常不用指定特定版本的SDK來構(gòu)建應(yīng)用,用最高的版本就可以。

      但是,因為不同的版本,有不同的支持內(nèi)容,和不同的特性,所以總有些應(yīng)用是無法兼容的。因此,需要指定特定的 Runtime 版本。

          為防止非授權(quán)轉(zhuǎn)發(fā),這兒給出本文的原文鏈接:https://www.cnblogs.com/tiger-wang/p/13811777.html

      二、指定特定的SDK版本

      前面說了,因為 SDK 向后兼容,通常我們不需要關(guān)心安裝了哪個版本的 SDK。

      但是,總有一些情況會出現(xiàn):特定版本的BUG、特性變化、項目模板的改變等,導(dǎo)致項目需要某一特定的 SDK 版本。這個時候,我們會用到global.json。

      應(yīng)用在執(zhí)行時,dotnet.exe會在項目目錄中查找global.json文件,并根據(jù)global.json文件的內(nèi)容來決定使用哪個 SDK 版本來運行應(yīng)用。當(dāng)global.json不存在時,就使用當(dāng)前最新的 SDK 版本。

      按照微軟的說法,應(yīng)用SDK版本的規(guī)則如下:

      1. 安裝了哪個版本的SDK;

      2. global.json定義使用哪個版本的SDK;

      3. 當(dāng)前SDK版本的前滾策略是什么;

      4. 是否允許使用預(yù)發(fā)布版本;

      我們也依照這些因素來說明這個問題。

      2.1 檢查已安裝的版本

      在本文開頭,給出了一個命令:

      % dotnet --list-sdks

      這個命令,可以列出已經(jīng)安裝的所有 SDK 及版本號。

      微軟的版本號會有點復(fù)雜,這里舉個例子解釋一下,2.1.602:

      • 最前邊的 2,是主版本號;

      • 中間的 1,是副版本號;

      • 后面的三個數(shù)中第一個數(shù)是特征版本號,在本例子中,是6;

      • 后面三個數(shù)中后兩個數(shù)是補丁版本號,在本例中是02,表示第6個特征版本的第2個補丁。

      通常我們在說版本時,一般說到的就是主版本號和副版本號。比方 .Net Core SDK 3.1,就是指主版本為3,副版本為1的版本。

      這個版本號,在前滾策略中會很重要。

      2.2 global.json

      global.json文件從 .Net Core 1.0就開始引入了。

      早期(.Net Core 3.0之前)的內(nèi)容很簡單:

      {
        "sdk": {
          "version""2.1.600"
        }
      }

      在這個版本中,global.json文件僅定義了應(yīng)用使用哪個版本的 SDK。運行時,如果安裝對應(yīng)版本的 SDK,就會正常使用 SDK 并啟動。如果不存在對應(yīng)的 SDK,則會報錯:

      A compatible installed .NET Core SDK for global.json version [2.1.600] from [.\global.json] was not found
      Install the [2.1.600] .NET Core SDK or update [.\global.json] with an installed .NET Core SDK

      這個階段的global.json使用單一版本號,并且不支持通配符。

      在一定程序上,這個設(shè)置可以解決一些版本方面的問題。但也帶來了新的問題。

      我們看上面的定義, version 字段的值定義到了版本號的特征版本號和補丁版本號。也就是說,它定義了單一的一個精確版本號。這使得我們不能使用同主副版本的其它任何 SDK 版本,哪怕它是一個更好或更新的版本。

      這個問題在 .Net Core 3.0 后有了新的改善。

      .Net Core 3.0 后,global.json增加了兩個字段:rollForwardallowPrerelease

      {
        "sdk": {
          "version""2.1.600",
          "allowPrerelease"true,
          "rollForward""patch"
        }
      }

      在這個設(shè)置,有三個參數(shù):

      • version : 設(shè)置的特定版本。如果沒有設(shè)置,將采用安裝的最高版本

      • allowPrerelease : 計算使用版本時,是否考慮使用 prereleasepreview的SDK版本

      • rollForward : 要應(yīng)用的前滾策略

      這是微軟對global.json參數(shù)判斷的流程,供參考。

      下面,我們重點說一下前滾策略參數(shù)。

      2.3 前滾策略參數(shù)

      前滾策略用于確定在請求給定版本時應(yīng)該選擇已安裝的 SDK 中的哪一個。通過更改前滾策略,您可以放松或收緊選擇條件。這個說法有點抽象,我們舉幾個例子來說。

      在 .Net Core 3.0中,前滾策略有三個類,九個值:

      禁用策略:

      • disable - 禁用前滾。如果沒有確定的版本,就報錯。也就是說,不允許使用除指定的版本外的其它任何版本。

      保守策略(比禁用要寬松一點):

      • patch - 如果版本不存在,就使用相同主、副、特征版本下的最高版本,沒有就報錯。以上面的例子來說,會使用 2.1.604 版本

      • feature - 優(yōu)先套用 patch 策略;如果不存在,就使用主、次版本相同的下一個特征版本,如 2.1.7xx,沒有就報錯

      • minor - 優(yōu)先套用 feature 策略;如果不存在,就使用主版本相同的最大版本 2.x.xxx,如本例中的 2.2.203

      • major - 優(yōu)先套用 minor 策略;如果不存在,就使用已安裝的最大版本 x.x.xxx,如本例中的3.1.101

      最新策略(最寬松的策略):

      • latestPatch - 始終使用相同主、副、特征版本下的最高版本 2.1.6xx

      • latestFeature - 始終使用相同主、副版本下的最高版本 2.1.xxx

      • latestMinor - 始終使用相同主版本下的最高版本 2.x.xxx 

      • latestMajor - 始終使用已安裝的最高版本

      出于對 .Net Core 3.0 以前的配置進行兼容,以前的設(shè)置會自動采用 latestMajor 設(shè)置。

      三、總結(jié)

      一般來說,應(yīng)用開發(fā)中盡可能不要使用global.json。因為限定了運行時版本,會讓生產(chǎn)環(huán)境變得復(fù)雜。

      如果必須使用global.json,以我的經(jīng)驗,建議指定最低的 SDK 版本,并適當(dāng)?shù)貞?yīng)用 latestMinor 或 latestFeature 策略。這可能確保項目可以由更多的 SDK 版本進行構(gòu)建和運行。

      (全文完)


      微信公眾號:老王Plus

      掃描二維碼,關(guān)注個人公眾號,可以第一時間得到最新的個人文章和內(nèi)容推送

      本文版權(quán)歸作者所有,轉(zhuǎn)載請保留此聲明和原文鏈接

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多