欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET 社區(qū)工具包 .NET Community Toolkit 8.4.0 官方最新開源版

.NET社區(qū)工具包下載

  • 軟件大?。?span>1.2MB
  • 軟件語言:英文軟件
  • 軟件類型:國外軟件
  • 軟件授權(quán):免費軟件
  • 軟件類別:編程其它
  • 應(yīng)用平臺:Windows平臺
  • 更新時間:2025-01-07
  • 網(wǎng)友評分:
360通過 騰訊通過 金山通過

情介紹

.NET 社區(qū)工具包是一個從 Windows 社區(qū)工具包拆解出來的 .NET 開發(fā)工具包,內(nèi)含一組跨平臺的幫助程序和 API。該工具包由 Microsoft 維護(hù)和發(fā)布,是 .NET 基金會的一部分,被多個微軟內(nèi)部項目和應(yīng)用程序使用,例如 Microsoft Store。

.NET 社區(qū)工具包的所有內(nèi)容最初都是 Windows 社區(qū)工具包的一部分,但隨著時間的推移,僅針對 .NET 而不特定于 Windows 依賴項的 API 數(shù)量不斷增加,微軟決定將 .NET 相關(guān)得內(nèi)容拆分到一個單獨的項目中,以便它們可以獨立發(fā)展,.NET Community Toolkit 由此誕生。

由于分支之前的 Windows 社區(qū)工具包的最后一個版本是 7.1.x,因此,拆分出來的 .NET 社區(qū)工具包從 8.0.0 版本號開始。

8.2新版本包括在運(yùn)行時和 MVVM Toolkit 源碼生成器中的性能改進(jìn)、新代碼修復(fù)程序、新的用戶請求功能等內(nèi)容。

包含的組件

CommunityToolkit.Mvvm(又名 MVVM 工具包):一個快速、模塊化、平臺無關(guān)的 MVVM 庫,它是 MvvmLight 替代品,廣泛用于 Microsoft Store 和其他第一方應(yīng)用程序。
CommunityToolkit.Mvvm.SourceGenerators:用于擴(kuò)充 MVVM 工具包的源碼生成器。
CommunityToolkit.Diagnostics: 一組輔助 API(特別是 Guard和 ThrowHelper),可用于更簡潔、更高效且不易出錯的參數(shù)驗證和錯誤檢查。
CommunityToolkit.HighPerformance用于在高性能場景中工作的助手集合。它包括諸如池化緩沖區(qū)助手、快速字符串池Memory<T> 類型、也支持不連續(xù)區(qū)域的和 Span<T> 的 2D 變體 Span2D<T>、用于位移操作的助手(例如 BitHelper)等 API。
CommunityToolkit.Common:一組與其他 CommunityToolkit 庫共享的幫助程序 API。

更新介紹

自定義屬性?[ObservableProperty]

對于 MVVM 工具包源代碼生成器,我們最需要的功能之一(請參閱#208、#217、#228)是支持對[ObservableProperty]使用自定義屬性。有幾個提議的設(shè)計來支持這一點,我們最終決定利用 C# 中的現(xiàn)有語法 “ property”:?來讓開發(fā)人員標(biāo)記屬性以傳播到生成的屬性。有幾個優(yōu)勢:

它利用內(nèi)置的 C# 語法,使該功能感覺“原生”并且不需要額外的屬性

它解決了注解屬性只能針對屬性,不能針對字段的問題

也就是說,使用 MVVM Toolkit 8,現(xiàn)在支持以下場景:

[ ObservableProperty] [ property: JsonPropertyName( "responseName") ] [ property: JsonRequired] privatestring? _name;
這將在幕后生成以下屬性:

[ JsonPropertyName( "responseName") ] [ JsonRequired] publicstring? Name { get=> _name; set { if(!EqualityComparer< string?>.Default.Equals(_name, value)) { OnPropertyChanging( "Name"); OnNameChanging( value); _name = value; OnPropertyChanged( "Name"); OnNameChanged( value); } } } partialvoidOnNameChanging( string? value) ; partialvoidOnNameChanged( string? value) ;
可以看到生成的屬性有我們指定的兩個屬性!這允許完全靈活地為生成的屬性添加注釋,同時使用內(nèi)置的 C# 語法并且對該功能支持的屬性類型沒有限制。

注意:生成的代碼略有不同,包括此處未顯示的其他性能優(yōu)化。

MVVM 工具包分析器

此版本的 MVVM 工具包也是第一個引入專用分析器的版本。它能夠幫助開發(fā)人員以最佳方式使用 MVVM 工具包。也就是說,MVVM 工具包將不再只是針對使用錯誤的功能發(fā)出診斷(例如,以報錯的方式),它現(xiàn)在還會顯示改進(jìn)代碼和避免常見錯誤的建 議!

第一個分析器涵蓋了使用[ObservableProperty]屬性時的一個常見錯誤。參照這個例子:

[ ObservableProperty] privatestring? name;
[ RelayCommand] publicasyncTask LoadUserAsync( ) {User user = await_userService.FetchUserAsync;

name = user.Name; // Whoops! Assigning to the field!}

開發(fā)人員不小心分配給一個字段(而不是生成的屬性),然后被卡在 UI 上。UI 上沒有顯示該更改,也沒有明確說明為什么會這樣,這一情景已經(jīng)被多次提出。新的分析器將在這些情況下提供幫助,它將標(biāo)記支持可觀察屬性的字段的所有賦值,并顯示診斷建議引用生成的屬性。你不會再收到莫名其妙的屬性丟失的通知。

第二個新分析器旨在幫助減少使用 MVVM 工具包的應(yīng)用程序中的二進(jìn)制文件大小。正如我們在8.0.0 公告帖子中提到的,MVVM 工具包包含多個屬性(例如[ObservableObject]),這些屬性允許生成器將實現(xiàn) INotifyPropertyChanged 和 INotifyPropertyChanging 接口所需的所有代碼(也可選擇使用其他幫助程序)注入現(xiàn)有類。

這僅適用于無法繼承的情況:如果您不屬于這種情況,您應(yīng)該選擇繼承 ObservableObject,從而減小的二進(jìn)制文件大小,因為編譯器不必在每個過程中一遍又一遍地復(fù)制那些相同的助手類型。請參閱這個例子:

[ ObservableObject] publicpartialclassMyViewModel{[ ObservableProperty] privatestring? name; }
這里,MyViewModel 不是從任何類型繼承而來,因此它應(yīng)該繼承 ObservableObject 而不是使用[ObservableObject]屬性,以此改進(jìn)二進(jìn)制大小。新的分析器將標(biāo)記所有與此類似的場景并建議改用繼承。這將特別有助于初學(xué)者,他們可能不了解兩種不同方法的細(xì)微差別并且可能不知道如何選擇。在這些情況下,現(xiàn)在分析器可以提供幫助。

MVVM 工具包源代碼生成器優(yōu)化

正如我們提到的,這個新版本還包括對 MVVM 工具包的主要性能優(yōu)化,以進(jìn)一步改善開發(fā)人員的用戶體驗,尤其是優(yōu)化了開發(fā)人員在處理非常大的解決方案時的體驗。我們花了很多時間改進(jìn)我們所有生成器的架構(gòu),并與 Roslyn 團(tuán)隊的工程師交談,以確保我們正在盡可能地發(fā)揮它們的性能。

以下只是我們在這方面所做的一部分改進(jìn):

為 Roslyn 4.3 添加了多目標(biāo)

(#428 ,#462 ):如果支持,MVVM 工具包源代碼生成器現(xiàn)在將使用 Roslyn 4.3 目標(biāo),這樣他們就可以在主機(jī)支持的情況下選擇加入一些更優(yōu)化的 API。這一功能在引用 MVVM 工具包時會自動啟用。

使用 ForAttributeWithMetadataName<T>

(#436 ):我們將生成器切換到新的高級 Roslyn API 以匹配屬性 ,這大大提高了生成器觸發(fā)特定屬性的性能。比如現(xiàn)在[ObservableProperty]就在用這個。

將診斷移入診斷分析器

(#433 ,#434 ):我們將幾乎所有診斷都移動到診斷分析器,這些診斷分析器在進(jìn)程外運(yùn)行并且獨立于源生成器。這樣能夠顯著減少鍵入時的overhead,因為所有診斷邏輯現(xiàn)在都在單獨的進(jìn)程中運(yùn)行,并且不會降低 IntelliSense 的速度。

停止在增量提供程序中使用符號

( #435 ):我們更新了所有增量提供程序以不再傳播符號。這可以減少內(nèi)存使用,因為傳播符號會導(dǎo)致 Roslyn 不必要地根編譯對象。

更多性能優(yōu)化 ( #447 、 #460 、 #469 、 #487 、 #489 ):我們徹底檢查了所有增量模型和增量管道,以顯著提高性能并減少內(nèi)存分配。
IObservable<T>?信使擴(kuò)展

另一個功能需求,尤其是由那些在應(yīng)用程序中大量使用響應(yīng)式 API 開發(fā)人員提出,是尋求一種方法來橋接 MVVM 工具包中的功能。界面的新擴(kuò)展? IObservable<T>?extensions?現(xiàn)在支持此功能。它們可以按如下方式使用:

IObservable < MyMessage> observable = Messenger.CreateObservable < MyMessage> ;
就像這樣!此擴(kuò)展將創(chuàng)建一個對象 IObservable<T>?,該對象可用于訂閱消息并對其做出動態(tài)反應(yīng)。還支持通過單獨的重載指定不同的標(biāo)記。這面這個示例展示了新 API 的端到端使用:

vartoken = Messenger .CreateObservable<MyMessage> .Where(...) .Subscribe( m=> Console.WriteLine($ "Hello {m.Username}!"));
.NET 7和 C# 11支持

.NET Community Toolkit 工具包的新發(fā)布版本還將 .NET 7 TFM 添加到高性能包中,新版本中還包括一些變動,主要對新的 C# 11語言功能進(jìn)行了改善,比如 ref?fields 就是一個典型。

以下類型現(xiàn)在不再處于預(yù)覽狀態(tài),以及更新使用了新的 ref?安全規(guī)則:

Ref<T>

ReadOnlyRef<T>

NullableRef<T>

ReadOnlyNullableRef<T>

下面這種場景可以使用這些規(guī)則:

publicstaticboolTryGetElementRef( outNullableRef<T> reference ) { // Logic here... }
也就是說,使用?NullableRef<T>?類型規(guī)則可以有效地讓方法具有 out?ref?T?參數(shù), 而這在 C# 中是無法通過表達(dá)式做到的. 我們還計劃擴(kuò)展這些類型的 API 淺層面,從而允許這些類型通過使用 Unsafe 類型,提供一種易于使用的替代 GC-ref 算法的方法,這在視覺上也更類似于傳統(tǒng)的指針?biāo)惴ā?/p>

此外,所有不在預(yù)覽模式中的 ref?struct?類型都已被更新,使用內(nèi)部的 ref? 字段實現(xiàn)更好的性能。這些類型包括:

Span2D<T>

ReadOnlySpan2D<T>

RefEnumerable<T>

ReadOnlyRefEnumerable<T>

SpanEnumerable<T>

ReadOnlySpanEnumerable<T>

更多新變化可參照官方文檔。

更新日志

發(fā)生了什么變化
在#944中改進(jìn)@Sergio0694生成的代碼中的[ServableProperty]中的可空注釋
添加.targets以驗證#942中@Sergio0694的Windows SDK版本
更新的SDK包檢查。NET 9 SDK,作者@Sergio0694,發(fā)表于第952期
允許@Sergio0694在#946中將屬性轉(zhuǎn)發(fā)給屬性訪問者
修復(fù)#964中@Sergio0694對自定義屬性目標(biāo)的抑制
在#966中添加對@segio0694的[ServableProperty]的部分屬性的支持
通過#967中的@Sergio0694將NuGet包更新到最新穩(wěn)定版本
通過#968中的@Sergio0694將一些診斷轉(zhuǎn)移到分析儀
修復(fù)了#970中@Sergio0694生成的部分屬性的錯誤
在#972中由@Sergio0694處理部分屬性代碼修復(fù)程序中的“必需”字段
刪除“this”@Sergio0694在973中的部分屬性碼修復(fù)器表達(dá)式
在#979中,@Sergio0694為WinRT場景添加MVVM Toolkit分析器
在#980中由@Sergio0694為所有分析器項目嵌入.pdb文件
通過#981中的@Sergio0694為類級屬性添加更多WinRT分析器
@Sergio0694在#984中提高了新分析儀的位置分辨率
移除。NET 6 TFM作者:@Sergio0694
允許@Poker在#926中演唱的問題模板中的代碼塊
改進(jìn)#988中@Sergio0694的“RequiresCharpLanguageVersionPreviewAnalyzer”
#997中@Sergio0694在“IndexOf”API中使用“ref readonly”
在#808中,@paulomorgado在ReadOnlySequence上添加了流
修復(fù)#999中@Sergio0694對WinRT診斷之一的消息
#1000中@Sergio0694在C#未“預(yù)覽”時對WinRT AOT兼容性的新信息診斷
修復(fù)評論中的小拼寫錯誤。通過@realybin在#974
@Sergio0694在#1003中進(jìn)行了細(xì)微的診斷調(diào)整
在#1002中,@Sergio0694將Roslyn更新為4.12以獲取新的生成器
在#1008中,@Sergio0694支持修復(fù)具有多個屬性的屬性列表
@Sergio0694在#1009中為“MVVMTK0051”診斷發(fā)出一致的位置
添加更多分析器,通過#1010中的@Sergio0694啟用部分屬性的單元測試
支持更多局部屬性修飾符,禁止在#1015中使用@Sergio0694的指針類型
在#1016中通過@Sergio0694將NuGet包更新到最新穩(wěn)定版本
在#1019中,@Sergio0694改進(jìn)了[GeneratedBindableCustomProperty]分析器的過濾邏輯
提高SpanExtensions的測試覆蓋率。索引由@Youssef1313在#1023
在#1020中,@Sergio0694將半自動屬性的代碼修復(fù)器添加到“[ServableProperty]”部分屬性中
通過#1024中的@Sergio0694改進(jìn)半自動屬性分析儀中的濾波
在#1026中,@Sergio0694使用表達(dá)式體處理半自動屬性
新貢獻(xiàn)者
@撲克歌手在#926中做出了他們的第一個貢獻(xiàn)
@paulomorgado在#808中做出了他們的第一個貢獻(xiàn)
@realybin在974年做出了他們的第一個貢獻(xiàn)

載地址

下載錯誤?【投訴報錯】

.NET 社區(qū)工具包 .NET Community Toolkit 8.4.0 官方最新開源版

      氣軟件

      關(guān)文章

      載聲明

      ☉ 解壓密碼:www.dbjr.com.cn 就是本站主域名,希望大家看清楚,[ 分享碼的獲取方法 ]可以參考這篇文章
      ☉ 推薦使用 [ 迅雷 ] 下載,使用 [ WinRAR v5 ] 以上版本解壓本站軟件。
      ☉ 如果這個軟件總是不能下載的請在評論中留言,我們會盡快修復(fù),謝謝!
      ☉ 下載本站資源,如果服務(wù)器暫不能下載請過一段時間重試!或者多試試幾個下載地址
      ☉ 如果遇到什么問題,請評論留言,我們定會解決問題,謝謝大家支持!
      ☉ 本站提供的一些商業(yè)軟件是供學(xué)習(xí)研究之用,如用于商業(yè)用途,請購買正版。
      ☉ 本站提供的.NET 社區(qū)工具包 .NET Community Toolkit 8.4.0 官方最新開源版資源來源互聯(lián)網(wǎng),版權(quán)歸該下載資源的合法擁有者所有。