詳解.NET Core 3.0中的新變化
.NET Core 3.0 是 .NET Core 平臺(tái)的下一主要版本。本文回顧了 .Net Core 發(fā)展歷史,并展示了它是如何從基本支持 Web 和數(shù)據(jù)工作負(fù)載的版本 1,發(fā)展成為能夠運(yùn)行 Web、桌面、機(jī)器學(xué)習(xí)、容器、IoT 等的版本 3.0。
.NET Core 1
.NET Core 的歷史可追溯到幾年前,版本 1 是在 2016 年推出,旨在生成第一版開(kāi)放源代碼和跨平臺(tái)(Windows、macOS 和 Linux)的 .NET。靈感來(lái)源于只能使用開(kāi)放源代碼框架的客戶,以及需要在 Linux 服務(wù)器上運(yùn)行 .NET 應(yīng)用程序的其他客戶。由于 .NET Core 是跨平臺(tái)的,因此根據(jù)設(shè)計(jì),可使用命令行完成所有操作,而無(wú)需使用 IDE。為了應(yīng)對(duì)全局安裝的 .NET Framework 的兼容性挑戰(zhàn),它設(shè)計(jì)有并行支持,包括隨附作為應(yīng)用程序一部分的框架,這樣應(yīng)用程序就不會(huì)依賴在計(jì)算機(jī)上安裝的任何框架。版本 1 隨附新版 ASP.NET、實(shí)體框架 (EF) 和主要定目標(biāo)到的 Web 應(yīng)用程序。
.NET Core 2
雖然版本 1 支持在新平臺(tái)上運(yùn)行 .NET,但它僅支持一組數(shù)量有限的 .NET API。為了解決此問(wèn)題,我們創(chuàng)建了 .NET Standard,它指定了任何 .NET 運(yùn)行時(shí)必須實(shí)現(xiàn)的 API,這樣就能跨 .NET 平臺(tái)和版本共享代碼和二進(jìn)制文件了。在 .NET Standard 2.0 中,我們向 .NET Standard 規(guī)范添加了超過(guò) 20,000 個(gè) API。.NET Core 版本 2 于 2017 年 6 月發(fā)布,并支持 .NET Standard 2.0,使其有權(quán)訪問(wèn)這些 API。我們還引入了 Windows 兼容性包,這是包含許多僅 Windows API(如 System.Drawing、System.DirectoryServices 等)的 NuGet 包。ASP.NET Core 2.0 引入了 .NET Core 1.0 中缺少的兩個(gè)框架,即 Razor Pages 和 SignalR。Entity Framework Core 開(kāi)始支持延遲加載,這是一項(xiàng)熱門(mén)實(shí)體框架功能。.NET Core 2 還在不斷推動(dòng) .NET 成為最快的完整堆??蚣苤弧echEmpower 基準(zhǔn)由一家獨(dú)立公司運(yùn)行,將 .NET Core 列為原始純文本性能領(lǐng)域的第 7 名,并將它列為 Web 和數(shù)據(jù)性能 Fortunes 測(cè)試中的第 6 名,擊敗了 Java servlet 和 Node.js (bit.ly/2PEE1l1)。
.NET Core 3.0
.NET Core 3.0 是 .NET Core 平臺(tái)的下一主要版本。它新增了許多令人興奮的功能,如支持使用 Windows 窗體 (WinForms)、Windows Presentation Foundation (WPF) 和實(shí)體框架 6 的 Windows 桌面應(yīng)用程序。對(duì)于 Web 開(kāi)發(fā),它開(kāi)始支持使用 C# 通過(guò) Razor 組件(舊稱為 Blazor)生成客戶端 Web 應(yīng)用程序。此外,它還支持 C# 8.0 和 .NET Standard 2.1。
我們正在 .NET Core 3.0. 中添加對(duì)物聯(lián)網(wǎng) (IoT) 方案的支持?,F(xiàn)在可以在 Raspberry Pi 和類(lèi)似設(shè)備上對(duì)硬件插針(用于控制設(shè)備和讀取傳感器數(shù)據(jù))進(jìn)行編程,并在所有受支持的 OS 上(例如,使用 Raspberry Pi 或 Arduino)通過(guò)串行端口進(jìn)行通信。我們還在此版本中添加了適用于 ARM64 的 IoT 設(shè)備支持,以補(bǔ)充現(xiàn)有 ARM32 功能。
.NET Core 3.0 還將完全支持 ML.NET,這是為 .NET 開(kāi)發(fā)人員生成的開(kāi)放源代碼機(jī)器學(xué)習(xí)框架。ML.NET 強(qiáng)力驅(qū)動(dòng) Azure 機(jī)器學(xué)習(xí)、Windows Defender 和 PowerPoint Design Ideas 等產(chǎn)品。使用 ML.NET,可以將許多常用機(jī)器學(xué)習(xí)方案添加到應(yīng)用中,如情緒分析、建議、預(yù)測(cè)、圖像分類(lèi)等。若要了解詳細(xì)信息,請(qǐng)?jiān)L問(wèn)bit.ly/2OLRGRQ。
我們最近發(fā)布了 .NET Core 3.0 的首個(gè)預(yù)覽版。若要詳細(xì)了解 .NET Core 3.0 和試用預(yù)覽版,請(qǐng)?jiān)L問(wèn)aka.ms/netcore3preview1。
桌面(WinForms 和 WPF)和開(kāi)放源代碼
WinForms 和 WPF 是兩個(gè)最常用的 .NET 應(yīng)用程序類(lèi)型,有數(shù)百萬(wàn)開(kāi)發(fā)人員在使用。.NET Core 3.0 開(kāi)始支持 WinForms 和 WPF,將 Windows 桌面開(kāi)發(fā)引入了 .NET Core。.NET Core 一直以來(lái)都是開(kāi)放源代碼的,在 GitHub 中這兩個(gè)框架與剩余的 .NET Core 一樣,也都是開(kāi)放源代碼的。客戶將有史以來(lái)第一次能夠見(jiàn)證這些框架的開(kāi)放開(kāi)發(fā),甚至可以通過(guò)提問(wèn)、修復(fù) bug 或幫助在 GitHub 中實(shí)時(shí)開(kāi)發(fā)新功能,從而提供幫助。WinUI XAML 庫(kù)也將是開(kāi)放源代碼的。通過(guò) XAML Islands,可以在 WinForms 和 WPF 應(yīng)用程序中使用這些控件。
許多現(xiàn)有 WinForms 和 WPF 應(yīng)用程序都使用實(shí)體框架來(lái)訪問(wèn)數(shù)據(jù),因此 .NET Core 也支持實(shí)體框架 6。
你可能想要知道,為什么要在 .NET Core 上生成桌面應(yīng)用程序。很簡(jiǎn)單:這樣才能受益于 .NET Core 中的所有增強(qiáng)功能。不僅可以在最新版框架上生成應(yīng)用程序,而無(wú)需安裝 .NET Core,還能將應(yīng)用程序和 .NET Core 發(fā)布到一個(gè) .EXE 中。.NET Core 在設(shè)計(jì)時(shí)考慮到了并行支持,因此可以在一臺(tái)計(jì)算機(jī)上安裝多個(gè)版本,并能將應(yīng)用程序鎖定到設(shè)計(jì)時(shí)定目標(biāo)到的版本。此外,鑒于這種并行本質(zhì),可以改進(jìn) .NET Core 中的 API(包括 WinForms 和 WPF),而無(wú)需承擔(dān)損壞應(yīng)用程序的風(fēng)險(xiǎn)。
ASP.NET Core 3
不過(guò),.NET Core 3.0 并不都是與桌面相關(guān)。還有許多令人興奮的新功能是針對(duì) Web 設(shè)計(jì)的。接下來(lái)將介紹我們正在開(kāi)發(fā)的幾項(xiàng)功能。
客戶經(jīng)常問(wèn)的一個(gè)問(wèn)題是,如何在 .NET Core 中獲得 RPC 體驗(yàn)(就像在 .NET 遠(yuǎn)程和 Windows Communication Foundation 中一樣)。我們正在參與 gRPC (grpc.io) 項(xiàng)目,以確保 gRPC 能夠?yàn)?.NET 開(kāi)發(fā)人員提供一流支持。
在今年早些時(shí)候,我們開(kāi)始了一項(xiàng)試驗(yàn),即使用 .NET(我們稱之為 Blazor)進(jìn)行客戶端 Web 開(kāi)發(fā)。借助 Blazor,可以編寫(xiě)直接在瀏覽器中的基于 WebAssembly 的 .NET 運(yùn)行時(shí)內(nèi)運(yùn)行的 Web UI 組件,而無(wú)需編寫(xiě)一行 JavaScript。使用 Razor 語(yǔ)法創(chuàng)作組件,這些組件與代碼一起被編譯到常規(guī) .NET 程序集中。然后,程序集和基于 WebAssembly 的 .NET 運(yùn)行時(shí)被下載到瀏覽器中,僅使用開(kāi)放式 Web 標(biāo)準(zhǔn)就能執(zhí)行它們(無(wú)需任何插件或代碼轉(zhuǎn)換),如圖 1所示。
圖 1:使用 Blazor 進(jìn)行客戶端 Web 開(kāi)發(fā)
也可以使用 .NET Core 在服務(wù)器上運(yùn)行相同組件,其中所有 UI 交互和 DOM 更新都是通過(guò) SignalR 連接進(jìn)行處理,如圖 2所示。執(zhí)行后,組件跟蹤 DOM 所需的更新,并通過(guò) SignalR 連接將要應(yīng)用的這些更新發(fā)送到瀏覽器。UI 事件使用同一連接發(fā)送到服務(wù)器。此模型的優(yōu)點(diǎn)有多個(gè):下載大小更小、代碼集中在服務(wù)器上,以及受益于在 .NET Core 上運(yùn)行組件的所有功能和性能優(yōu)勢(shì)。
圖 2:使用 SignalR 在服務(wù)器上運(yùn)行 UI Web 組件
對(duì)于 .NET Core 3.0,我們將把 Blazor 組件模型集成到 ASP.NET Core 中。我們將此集成組件模型稱為“Razor 組件”。Razor 組件開(kāi)啟了以下新時(shí)代:使用 ASP.NET Core 的可組合 UI,以及使用 .NET 的完整堆棧 Web 開(kāi)發(fā)。對(duì)于 .NET Core 3.0,Razor 組件最初作為獨(dú)立可路由組件,或通過(guò) Razor Pages 和視圖使用的組件在服務(wù)器上運(yùn)行。不過(guò),相同組件也可以在 WebAssembly 上進(jìn)行客戶端運(yùn)行。在開(kāi)發(fā) .NET Core 3.0 的同時(shí),我們還將繼續(xù)著手以下工作:支持使用基于解釋器的 .NET 運(yùn)行時(shí)在 WebAssembly 上運(yùn)行 Razor 組件,預(yù)計(jì)將在后續(xù)版本中提供。之后,我們還計(jì)劃向 WebAssembly 發(fā)布對(duì) .NET 代碼的完全預(yù)編譯支持,這將顯著提升運(yùn)行時(shí)性能。
EF Core 3.0
LINQ 是一項(xiàng)用戶鐘愛(ài)的 .NET 功能,可便于編寫(xiě)數(shù)據(jù)庫(kù)查詢,而無(wú)需離開(kāi)所選的語(yǔ)言,同時(shí)還能利用豐富的類(lèi)型信息來(lái)獲取 IntelliSense 和編譯時(shí)類(lèi)型檢查。不過(guò),LINQ 也支持編寫(xiě)數(shù)量幾乎不限的復(fù)雜查詢,而這對(duì)于 LINQ 提供程序來(lái)說(shuō),一直都是一項(xiàng)巨大挑戰(zhàn)。EF Core 部分解決了此問(wèn)題,具體方法是支持選擇可轉(zhuǎn)換為 SQL 的查詢部分,再執(zhí)行內(nèi)存中剩余的查詢。在某些情況下,這樣做是可取的,但在其他許多情況下,這可能會(huì)導(dǎo)致非常低效的查詢直到應(yīng)用程序投入生產(chǎn)才被發(fā)現(xiàn)。
在 EF Core 3.0 中,我們計(jì)劃深入更改 LINQ 實(shí)現(xiàn)工作原理和測(cè)試方式,旨在提高它的可靠性(例如,避免破壞修補(bǔ)程序版本中的查詢);讓它能夠?qū)⒏啾磉_(dá)式正確轉(zhuǎn)換為 SQL;在更多情況下生成高效查詢;以及防止直到投入生產(chǎn)才被檢測(cè)到的非常低效查詢出現(xiàn)。
我們一直在致力于開(kāi)發(fā)適用于 EF Core 的 Cosmos DB 提供程序,以便開(kāi)發(fā)人員能夠熟悉 EF 編程模型,從而輕松地將 Azure Cosmos DB 定目標(biāo)為應(yīng)用程序數(shù)據(jù)庫(kù)。目標(biāo)是利用 Cosmos DB 的一些優(yōu)勢(shì),如全局分發(fā)、“始終開(kāi)啟”可用性、彈性可伸縮性和低延遲,甚至包括 .NET 開(kāi)發(fā)人員可以更輕松地訪問(wèn)它。此提供程序?qū)⑨槍?duì) Cosmos DB 中的 SQL API 啟用大部分 EF Core 功能,如自動(dòng)更改跟蹤、LINQ 和值轉(zhuǎn)換。
我們計(jì)劃在 EF Core 3.0 中添加的其他功能包括,屬性包實(shí)體(將數(shù)據(jù)存儲(chǔ)在索引屬性(而不是常規(guī)屬性)中的實(shí)體);能夠?qū)?shù)據(jù)庫(kù)視圖反向工程為查詢類(lèi)型;以及與新 C# 8.0 功能集成,如 IAsyncEnumerable<T> 支持和可以為 null 的引用類(lèi)型。
我們理解,對(duì)于許多使用舊版 EF 的現(xiàn)有應(yīng)用程序來(lái)說(shuō),移植到 EF Core 的工作量巨大。正因?yàn)榇?,我們還移植了 EF 6,以便能夠使用 .NET Core。
.NET Standard 2.1
如果遵循 .NET Standard,可以創(chuàng)建適用于所有 .NET 實(shí)現(xiàn)的庫(kù),不僅僅局限于 .NET Core,還包括 Xamarin 和 Unity。在 .NET Standard 1.x 中,我們只對(duì)跨各種實(shí)現(xiàn)已常用的 API 進(jìn)行了建模。在 .NET Standard 2.0 中,我們專注于簡(jiǎn)化將現(xiàn)有 .NET Framework 代碼移植到 .NET Core 的過(guò)程,這樣不僅帶來(lái)了額外的 20,000 個(gè) API,還帶來(lái)了兼容性模式(可便于從基于 .NET Standard 的庫(kù)引用 .NET Framework 庫(kù),而無(wú)需重新編譯它們)。對(duì)于這兩版標(biāo)準(zhǔn),幾乎沒(méi)有任何新組件,因?yàn)樗?API 都是現(xiàn)有 .NET API。
在 .NET Standard 2.1 中,這一情況已有所改變:我們添加了約 3,000 個(gè)幾乎全新的 API,它們作為 .NET Core 開(kāi)放源代碼開(kāi)發(fā)的一部分引入。通過(guò)將它們添加到標(biāo)準(zhǔn),我們將它們引入所有 .NET Standard 實(shí)現(xiàn)。
這些新 API 包括:
Span<T>:在 .NET Core 2.1 中,我們添加了 Span<T>,這是類(lèi)似數(shù)組的類(lèi)型,允許以統(tǒng)一方式表示托管和非托管內(nèi)存,并支持在不復(fù)制的情況下進(jìn)行切片。Span<T> 是 .NET Core 2.1 中與性能最為相關(guān)的改進(jìn)的核心。因?yàn)樗试S以更高效的方式管理緩沖,所以可以有助于減少分配和復(fù)制。若要詳細(xì)了解此類(lèi)型,請(qǐng)務(wù)必閱讀 Stephen Toub 關(guān)于 Span<T> 的精彩文章 (msdn.com/magazine/mt814808)。
ValueTask 和 ValueTask<T>:在 .NET Core 2.1 中,基礎(chǔ)內(nèi)容中最重要的功能相關(guān)改進(jìn),可支持高性能方案 (bit.ly/2HfIXob),還能讓 async/await 更高效。ValueTask<T> 已有,可便于在操作同步完成時(shí)返回結(jié)果,而無(wú)需分配新 Task<T>。在 .NET Core 2.1 中,我們進(jìn)一步改進(jìn)了此功能,同時(shí)提高了它的可用性,讓它有對(duì)應(yīng)的非泛型 ValueTask,以便在必須以異步方式完成操作的情況下減少分配,這是 Socket 和 NetworkStream 等類(lèi)型現(xiàn)在利用的功能。
常規(guī)實(shí)用 API:由于 .NET Core 是開(kāi)放源代碼的,因此我們跨基類(lèi)庫(kù)添加了許多小功能,如用于合并哈希代碼的 System.HashCode,或 System.String 上的新重載。.NET Core 中約有 800 名新成員,幾乎所有這些成員都已添加到 .NET Standard 2.1 中。
如需了解更多詳情,請(qǐng)查看 .NET Standard 2.1 公告 (bit.ly/2RCW2fX)。
C# 8.0
C# 8.0 是下一版 C#,它在幾個(gè)主要方面改進(jìn)了語(yǔ)言。可以為 null 的引用類(lèi)型有助于防止 null 引用異常,并改進(jìn)了 null 安全編碼做法??梢赃x擇啟用下列功能:在將 null 分配到類(lèi)型字符串(舉個(gè)例子)的變量或參數(shù)時(shí)看到警告。若要可以為 null,必須使用“string?”可以為 null 的引用類(lèi)型。
異步流對(duì)異步數(shù)據(jù)流執(zhí)行的操作,就是 async/await 對(duì)單個(gè)異步結(jié)果執(zhí)行的操作。新框架類(lèi)型 IAsyncEnumerable<T> 是 IEnumerable<T> 的異步版本,同樣也能執(zhí)行 foreach 和 yield return:
public static async IAsyncEnumerable<T> FilterAsync<T>( this IAsyncEnumerable<T> source, Func<T, Task<bool>> predicate) { await foreach (T element in source) { if (await predicate(element)) yield return element; } }
除了其他功能外,借助默認(rèn)接口成員實(shí)現(xiàn),接口可以添加新成員,而無(wú)需中斷現(xiàn)有實(shí)現(xiàn)者。Switch 表達(dá)式可確保模式匹配更為簡(jiǎn)潔,不僅可以遞歸模式,還能將模式深入挖掘到測(cè)試值。如需了解 C# 8.0 的更多詳情,請(qǐng)?jiān)L問(wèn)aka.ms/csharp8。
.NET Framework 和 .NET Core 將如何發(fā)展?
.NET Framework 是在超過(guò) 10 億臺(tái)計(jì)算機(jī)上安裝的 .NET 實(shí)現(xiàn),因此需要盡可能保持兼容性。因此,它的更新速度慢于 .NET Core。甚至安全修復(fù)和 bug 修復(fù)都可能會(huì)導(dǎo)致應(yīng)用程序中斷,因?yàn)閼?yīng)用程序依賴舊行為。我們將確保 .NET Framework 始終支持最新的網(wǎng)絡(luò)協(xié)議、安全標(biāo)準(zhǔn)和 Windows 功能。
.NET Core 是開(kāi)放源代碼、跨平臺(tái)且快速更新的 .NET 版本。鑒于這種并行本質(zhì),可以對(duì)它應(yīng)用我們無(wú)法冒險(xiǎn)對(duì) .NET Framework 應(yīng)用的更改。也就是說(shuō),隨著時(shí)間推移,.NET Core 會(huì)增添新 API 和語(yǔ)言功能,而 .NET Framework 則不會(huì)。
如果現(xiàn)有 .NET Framework 應(yīng)用程序,且無(wú)需利用任何 .NET Core 功能,就不應(yīng)該有遷移到 .NET Core 的壓力。.NET Framework 和 .NET Core 都將完全受支持;.NET Framework 始終是 Windows 的一部分。甚至在 Microsoft 內(nèi)部,我們都有很多基于 .NET Framework 的大型產(chǎn)品線,并將一直基于 .NET Framework。但展望未來(lái),.NET Core 和 .NET Framework 包含的功能將會(huì)有所不同。
總結(jié)
.NET Core 3.0 預(yù)計(jì)將于 2019 年下半年發(fā)布。它將提供開(kāi)放源代碼版本的 WinForms 和 WPF,以用于 Windows 桌面開(kāi)發(fā)。實(shí)體框架 6 也將包含在內(nèi)。此外,ASP.NET Core、Entity Framework Core、.NET Standard 和 C# 都將進(jìn)行重要更新。對(duì)于新 .NET 應(yīng)用程序,應(yīng)認(rèn)真考慮使用此版本的 .NET Core。有關(guān)詳細(xì)信息,請(qǐng)?jiān)L問(wèn)aka.ms/netcore3preview1。
我們對(duì) .NET 的未來(lái)滿懷期待,并將向 .NET Core 添加更多工作負(fù)載。建議大家試用 .NET Core 3.0 預(yù)覽版,并向我們發(fā)送反饋。
原文地址:What's Coming in .NET Core 3.0
原文作者:Scott Hunter
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
對(duì)Entity?Framework?Core進(jìn)行單元測(cè)試
這篇文章介紹了對(duì)Entity?Framework?Core進(jìn)行單元測(cè)試的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03ASP.NET Core 奇淫技巧之偽屬性注入的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 奇淫技巧之偽屬性注入的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08asp.net System.Net.Mail 發(fā)送郵件
一個(gè)師弟發(fā)了段代碼給我,說(shuō)調(diào)試了很久發(fā)送郵件都沒(méi)有成功。自己使用過(guò)程中,也發(fā)現(xiàn)了很多問(wèn)題,但最簡(jiǎn)單的問(wèn)題是“發(fā)件方”地址根本不支持smtp發(fā)送郵件。2009-04-04ASP.NET Cookie 操作實(shí)現(xiàn)
本節(jié)中的主題描述如何在 ASP.NET Web 應(yīng)用程序中創(chuàng)建 Cookie。Cookie 是一些小的文本文件,服務(wù)器和瀏覽器在收到每個(gè)頁(yè)請(qǐng)求時(shí)交換它們,您還可以使用這些小文本文件來(lái)存儲(chǔ)幫助針對(duì)每個(gè)用戶自定義您的應(yīng)用程序的信息。2009-11-11asp.net c# 調(diào)用百度pai實(shí)現(xiàn)在線翻譯,英文轉(zhuǎn)中文
本文詳細(xì)介紹asp.net c# 調(diào)用百度pai 實(shí)現(xiàn)在線翻譯以及英文轉(zhuǎn)中文實(shí)現(xiàn)代碼,需要了解的朋友可以參考下2012-12-12C#下載文件(TransmitFile/WriteFile/流方式)實(shí)例介紹
C#下載文件想必很多業(yè)內(nèi)人士都不會(huì)陌生吧,C#下載文件方法很多,本文整理了一些,可供大家參考,感興趣的你可以研究下,或許本文所提供的知識(shí)點(diǎn)對(duì)你有所幫助2013-02-02.Net Core WebApi部署在Linux服務(wù)器上的方法
這篇文章主要介紹了.Net Core WebApi部署在Linux服務(wù)器上的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03詳解ASP.NET數(shù)據(jù)綁定操作中Repeater控件的用法
.NET中的Repeater控件支持?jǐn)?shù)據(jù)模板,而且可以自由地定義樣式,這里我們就來(lái)詳解ASP.NET數(shù)據(jù)綁定操作中Repeater控件的用法,需要的朋友可以參考下2016-06-06無(wú)法將類(lèi)型為“System.Web.UI.WebControls.HiddenField”的對(duì)象強(qiáng)制轉(zhuǎn)換為類(lèi)型的錯(cuò)誤的解
無(wú)法將類(lèi)型為“System.Web.UI.WebControls.HiddenField”的對(duì)象強(qiáng)制轉(zhuǎn)換為類(lèi)型的錯(cuò)誤的解決方法2011-12-12.NET微服務(wù)架構(gòu)CI/CD自動(dòng)構(gòu)建Jenkins+Gitee
這篇文章介紹了.NET使用微服務(wù)架構(gòu)CI/CD自動(dòng)構(gòu)建Jenkins+Gitee的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01