<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【翻譯】.NET 5 Preview8發(fā)布

          共 10678字,需瀏覽 22分鐘

           ·

          2020-08-28 05:23

          今天,.NET 5預(yù)覽8發(fā)布了,對于.NET5.0的功能開發(fā)已經(jīng)完成了,這必須要排除待處理的bug,預(yù)覽8是最后一次預(yù)覽版本。預(yù)計(jì)11月正式的.NET5.0版本發(fā)布之前還將發(fā)布兩個(gè)正式之前的候選版本,這篇文章描述了.NET5.0版本中的一系列功能。
          You can?download .NET 5.0, for Windows, macOS, and Linux:

          • Installers and binaries

          • Container images

          • Snap installer

          • Release notes

          • Known issues

          • GitHub issue tracker

          今天同時(shí)也發(fā)布了ASP.NET Core?和?EF Core?。
          要使用.NET5我們需要最新版本的?Visual Studio?(包括?Visual Studio for Mac)?才能使用 .NET 5.0.
          .NET 5.0包括許多改進(jìn),特別是單個(gè)文件應(yīng)用程序,較小的容器映像,更強(qiáng)大的JsonSerializer API,一整套可空的引用類型注釋以及對Windows ARM64的支持。在NET庫,GC和JIT中,性能得到了極大的提高。ARM64是性能投資的重點(diǎn),可提高吞吐量并減少二進(jìn)制文件。.NET 5.0包括新的語言版本C#9和F#5.0。
          .NET 5.0包括了許多的改進(jìn),特別是單個(gè)文件應(yīng)用程序,較小的容器映像,更強(qiáng)大的JsonSerializer APIs,一整套可空的引用類型注釋以及對Windows ARM64的支持。在.NET庫,GC和JIT中,性能得到了極大的提高,ARM6是性能的重點(diǎn)項(xiàng),可提高吞吐量并減少二進(jìn)制文件。.NET5.0包括新的語言版本C# 9?和F# 5.0.


          現(xiàn)在這個(gè)版本功能開發(fā)已經(jīng)完成,讓我們看一下.NET5.0的一部分,該帖子由一組主題部分組成:語言,工具、API、運(yùn)行時(shí)技術(shù)和應(yīng)用程序部署。這些部分及其順序大致反映了開發(fā)過程和生命周期,如果您對一個(gè)開發(fā)方面對比另一個(gè)方面更敢興趣,這將幫助您找到所需的內(nèi)容。

          Languages

          C#9和F#5是.NET5.0版本的一部分,并包含在.NET5.0 SDK中,Visual SDK也包含了在5.0 SDK中,它不包括語言的更改,但進(jìn)行了改進(jìn)以支持.NET Core上的Visual Basic應(yīng)用程序框架。
          C#源碼生成器是一項(xiàng)重要的新c#編譯器新功能,由于它沒有任何語言語法,因此在技術(shù)上不屬于C#9,請參閱新的c#源代碼生成器示例,以幫助您開始使用此新功能。

          C# 9

          c#9是該語言的重要版本,這個(gè)版本專注于程序的簡單性,數(shù)據(jù)不變形和更多的模式.

          Top-level programs

          高級的程序提供了更簡單的語法,而儀式感卻變少了,此語法將首先幫助我們學(xué)習(xí)該語言,我們希望高級程序語法在后續(xù)發(fā)行版中變得更加簡單,例如刪除默認(rèn)的?using?語句
          下面是c# 9版本的“hello world”。

          using System;

          Console.WriteLine("Hello World!");

          高級的程序可以擴(kuò)展為使用更多功能,例如在同一文件中定義和調(diào)用方法或者類.

          using System;
          using System.Runtime.InteropServices;
          Console.WriteLine("Hello World!");
          FromWhom();
          Show.Excitement("Top-level programs can be brief, and can grow as slowly or quickly in complexity as you'd like", 8);
          void FromWhom()
          {
          Console.WriteLine($"From {RuntimeInformation.FrameworkDescription}");
          }
          internal class Show
          {
          internal static void Excitement(string message, int levelOf)
          {
          Console.Write(message);
          for (int i = 0; i < levelOf; i++)
          {
          Console.Write("!");
          }
          Console.WriteLine();
          }
          }

          該程序生成以下輸出。

          [rich@taumarunui test]$ ~/dotnet/dotnet run
          Hello World!
          From .NET 5.0.0-preview.8
          Top-level programs can be brief, and can grow as slowly or quickly in complexity as you'd like!!!!!!!!


          Pattern matching

          Patterns test值具有特定的形狀,并在其具有匹配形狀時(shí)可以從值中提取信息。最新的c#版本中已添加了新的模式匹配改進(jìn)。
          我將分享兩個(gè)示例,第一個(gè)演示了屬性的模式,在將上下文對象與特定模式進(jìn)行比較之前,他會檢查是否為null(帶有is).

          if (context is {IsReachable: true, Length: > 1 })
          {
          Console.WriteLine(context.Name);
          }
          This is equivalent to:
          if (context is object && context.IsReachable && context.Length > 1 )
          {
          Console.WriteLine(context.Name);
          }
          Also equivalent to:
          if (context?.IsReachable && context?.Length > 1 )
          {
          Console.WriteLine(context.Name);
          }

          以下示例使用relational patterns(如<,<=)和邏輯模式(如and,or和not)。以下代碼根據(jù)毛重計(jì)算出送貨的卡車在高速公路的通行費(fèi)(decimal?),對于那些不熟悉的人,在數(shù)字文字告訴編譯器之后,m表示數(shù)字是decimal?而不是double.

          DeliveryTruck t when t.GrossWeightClass switch
          {
          < 3000 => 8.00m,
          >= 3000 and <= 5000 => 10.00m,
          > 5000 => 15.00m,
          },

          Target-typed?new?expressions
          Target-typed?new?expressions是在構(gòu)造對象/值時(shí)移除類型重復(fù)的一種新方法。
          下面的示例都是等效的,中間是新的語法。

          List<string> values = new List<string>();
          List<string> values = new();
          var values = new List<string>();

          我猜很多人都會喜歡這個(gè)新語法?var?有兩個(gè)原因:許多人閱讀從左到右和希望的類型信息左邊?=?,可能更重要的是左邊的事完全致力于類型信息,而不是被一個(gè)特定的構(gòu)構(gòu)造函數(shù)的復(fù)雜性和細(xì)微差別(右邊)


          Tools

          在這篇文章中,我們將重點(diǎn)關(guān)注運(yùn)行時(shí)診斷工具。

          Microsoft.Extensions.Logging

          我們對Microsoft.Extensions.Logging?庫中的控制臺日志提供程序進(jìn)行了改進(jìn),開發(fā)人員現(xiàn)在可以實(shí)現(xiàn)自定義的[ConsoleFormatt](https://github.com/dotnet/runtime/issues/34742)?,以完全控制控制臺輸出的格式和顏色,格式化程序API通過實(shí)現(xiàn)?VT-100?(大多數(shù)現(xiàn)代終端支持)轉(zhuǎn)移序列的子集來實(shí)現(xiàn)豐富的格式化,控制臺記錄器可以解析不受支持的終端上的轉(zhuǎn)義序列,使您可以為所有終端編寫單個(gè)格式化程序。
          除了支持自定義格式化程序外,我們還添加了一個(gè)內(nèi)置的JSON格式化程序,它會將結(jié)構(gòu)化JSON日志發(fā)送到控制臺。

          Dump debugging

          調(diào)試托管代碼需要對托管對象和構(gòu)造有特殊的了解,數(shù)據(jù)訪問組件(DAC)事運(yùn)行時(shí)執(zhí)行引擎的子集,他具有這些構(gòu)造的知識,并且可以在沒有運(yùn)行時(shí)的情況下訪問這些托管對象,從Preview 8開始,他們已經(jīng)開始針對Windows編譯Linux DAC,現(xiàn)在可以使用WinDBG或?dotnet dump analysis?在Windows上分析在Linux上收集的.NET Core進(jìn)程轉(zhuǎn)儲。
          在Preview 8中,我們還添加了對從macOS上運(yùn)行的.NET進(jìn)程捕獲ELF轉(zhuǎn)儲的支持,由于ELF并不是macOS上的本機(jī)可執(zhí)行文件(像?lldvb?這樣本地調(diào)試器將不適用于這些轉(zhuǎn)儲)文件格式,因此我們將其設(shè)為可選功能,要在macOS上啟用對轉(zhuǎn)儲收集的支持,請?jiān)O(shè)置環(huán)境變量COMPlus_DbgEnableElfDumpOnMacOS=1?可以使用?dotnet?dump analyze對生成的dump進(jìn)行分析

          Assembly load diagnostics added to event pipe

          我們向事件管道添加了程序集加載信息,您可以將其視為Fusion Log Viewer的替代品,現(xiàn)在您可以使用?dotnet-trace?通過以下命令來收集此信息

          Microsoft-Windows-DotNETRuntime:4:4 --process-id [process ID]


          Printing environment information

          隨著.NET擴(kuò)展了對新操作系統(tǒng)和芯片體系結(jié)構(gòu)的支持,人們有時(shí)需要一種打印環(huán)境信息的方法,我們創(chuàng)建了一個(gè)簡單的.NET工具成為dotnet-runtimeinfo.
          您可以使用以下命令安裝和運(yùn)行該工具

          dotnet tool install -g dotnet-runtimeinfo
          dotnet-runtimeinfo

          該工具為您的環(huán)境生成以下形式的輸出

          [rich@taumarunui ~]$ dotnet-runtimeinfo
          .NET information
          Version: 5.0.0
          FrameworkDescription: .NET 5.0.0-preview.8.20407.11
          Libraries version: 5.0.0-preview.8.20407.11
          Libraries hash: bf456654f9a4f9a86c15d9d50095ff29cde5f0a4
          **Environment information
          OSDescription: Linux 5.8.3-2-MANJARO-ARM #1 SMP Sat Aug 22 21:00:07 CEST 2020
          OSVersion: Unix 5.8.3.2
          OSArchitecture: Arm64
          ProcessorCount: 6
          **CGroup info
          cfs_quota_us: -1
          memory.limit_in_bytes: 9223372036854771712
          memory.usage_in_bytes: 2945581056


          Library APIs

          在.NET5.0中添加并改進(jìn)了許多新的api,下面是一些重要的變化,需要注意。

          Nullable Annotations

          可空引用類型是c#8和.NET Core3.0的重要功能,他的發(fā)布充滿了希望,但缺少詳細(xì)的平臺注釋,以使其真正有用且使用,等待(大部分)結(jié)束了,現(xiàn)在該平臺已為可控性添加了80%的注釋,他們正在研究是否可以在發(fā)布.NET5.0 RTM之前注釋剩余的20%如果沒有,他們將在.NET6.0的早期完成其余的注釋。

          下圖展示了他們這段時(shí)間內(nèi)取得的進(jìn)展。



          這也意味著,當(dāng)您將現(xiàn)有的.NET Core3.1代碼重新定位到.NET 5.0時(shí),可能會生成新的診斷(如果啟用了可空性),如果發(fā)生這種情況,您可以感謝我們幫助您避免使用?null?

          Regular expression performance improvements

          我們對Regex引擎進(jìn)行了重大的改進(jìn),在他們嘗試過許多表達(dá)式中,這些改進(jìn)通常會讓吞吐量提高3-6倍,在某些情況下甚至更多,他們在System.Text.RegularExpressions?中所做的更改。經(jīng)常的壓力已經(jīng)對他們自己的使用產(chǎn)生了可衡量的影響。他們希望這些改進(jìn)也能在你的庫和應(yīng)用程序中帶來可衡量的勝利

          .NET 5.0 Target Framework

          我們正在改變,.NET5.0目標(biāo)框架的使用方法,下面的項(xiàng)目文件演示了新的.NET5.0目標(biāo)框架

          "Microsoft.NET.Sdk">

          Exe
          net5.0



          到目前為止,新的.NET5.0表單比我們使用netcoreapp3.1樣式更緊湊,更直觀。此外他們正在將目標(biāo)框架擴(kuò)展為操作系統(tǒng)進(jìn)行建模。他們希望通過.NET6.0中的Xamarin定位IOS和Android,從而推動(dòng)這一變化。
          Windows桌面API僅在面向net5.0-windows?時(shí)可用,您可以指定操作系統(tǒng)版本,例如?net5.0-windows7或?net5.0-windows10.17763?(October 2018 Update) ,如果要使用WinRT APIs.,則需要定位Windows10版本。
          變動(dòng)匯總:

          • net5.0?is the new Target Framework Moniker (TFM) for .NET 5.0.

          • net5.0?combines and replaces?netcoreapp?and?netstandard?TFMs.

          • net5.0?supports?.NET Framework compatibility mode

          • net5.0-windows?will be used to expose Windows-specific functionality, like Windows Forms and WPF.

          • .NET 6.0 will use the same approach, with?net6.0?and will add?net6.0-ios?and?net6.0-android.

          • The OS-specific TFMs can include?OS version numbers, like?net6.0-ios14.

          • Portable APIs, like ASP.NET Core and Xamarin.Forms, will be usable with?net5.0.

          WinRT Interop (Breaking Change)

          我們已經(jīng)移至一個(gè)新模型,作為.NET5.0的一部分,他支持WinRT API,這包括調(diào)用API(在任一方向上; CLR <==> WinRT),兩個(gè)類型系統(tǒng)之間的數(shù)據(jù)封送處理以及旨在跨越邊界被視為相同類型的統(tǒng)一(既“projected types”;?IEnumerable?和?IIterable?是示例)
          他們將以來WinRT團(tuán)隊(duì)在Windows中提供的一套新的WinRT工具,他將生成基于c#的WinRT互操作程序集

          新的WinRT互操作系統(tǒng)有幾個(gè)好處:

          • It can be developed and improved separate from the .NET runtime.

          • Symmetrical with interop systems provided for other OSes, like iOS and Android.

          • Can take advantage of many other .NET features (AOT, C# features, IL linking).

          • Simplifies?the .NET runtime codebase.

          現(xiàn)有的WinRT互操作系統(tǒng)已經(jīng)作為.NET5.0的一部分,從.NET運(yùn)行時(shí)(以及任何其他相關(guān)組件)中刪除,這是一個(gè)突破性的變化,這將意味者使用WinRT和.NET Core3.x 應(yīng)用程序需要重新構(gòu)建,不能按照原樣在.NET5上運(yùn)行。

          Runtime Technology

          在.NET5.0中添加了許多新特性。下面介紹一小部分選擇。

          Windows ARM64

          我們在這個(gè)版本中增加了對Windows ARM64的支持。我們已經(jīng)做出了相對較晚的決定,推遲Windows桌面組件(Windows Forms, WPF)的發(fā)布。Windows窗體已接近就緒,但WPF還沒有,而且我們不想只發(fā)布Windows桌面組件的一半,部分原因是我們沒有在分割配置中測試它。我們希望在5.0服務(wù)更新中添加Windows桌面組件。
          我們正在與一些ISV合作,他們希望其應(yīng)用程序在Windows ARM64上可用。如果符合您的情況,請通過[email protected]與我們聯(lián)系。我們希望盡快為您提供構(gòu)建版本。

          Event pipe profiler APIs

          事件管道是在.NET Core 2.2中添加的新子系統(tǒng)和API,可以在任何操作系統(tǒng)上執(zhí)行性能和其他診斷調(diào)查。在.NET 5.0中,事件管道已得到擴(kuò)展,以使事件探查器能夠?qū)懭胧录艿朗录?。對于以前依靠ETW監(jiān)視應(yīng)用程序行為和性能的分析探查器,此方案至關(guān)重要。

          Native exports

          您現(xiàn)在可以將托管方法導(dǎo)出到本機(jī)代碼。該功能的構(gòu)建塊是托管對UnmanagedCallersOnlyAttribute的API支持。

          開發(fā)團(tuán)隊(duì)的Aaron Robinson一直在從事.NET Native Exports項(xiàng)目,該項(xiàng)目為將.NET組件作為本機(jī)庫發(fā)布提供了更完整的體驗(yàn)。我們正在尋求有關(guān)此功能的反饋,以幫助決定是否在更高版本中將該方法包括在產(chǎn)品中。

          有一些現(xiàn)有的項(xiàng)目可以實(shí)現(xiàn)類似的場景,例如:

          • Unmanaged Exports

          • DllExport

          Application deployment

          編寫或更新應(yīng)用程序后,您需要對其進(jìn)行部署以供用戶利用。在此版本中,我們專注于單個(gè)文件應(yīng)用程序,并改進(jìn)了.NET Core的ClickOnce。

          Single file applications

          單個(gè)文件應(yīng)用程序作為單個(gè)文件發(fā)布和部署。該應(yīng)用程序及其依賴項(xiàng)都包含在該文件中。當(dāng)應(yīng)用程序運(yùn)行時(shí),依賴項(xiàng)直接從該文件加載到內(nèi)存中。這種方法不會降低性能。當(dāng)與程序集修剪和提前編譯結(jié)合使用時(shí),單個(gè)文件應(yīng)用程序?qū)⒆兊酶。瑔?dòng)速度更快。
          在.NET 5.0中,單個(gè)文件應(yīng)用程序主要集中在Linux上(稍后會詳細(xì)介紹)。它們可以是框架相關(guān)的,也可以是獨(dú)立的。依賴于全局安裝的.NET運(yùn)行時(shí),依賴于框架的單個(gè)文件應(yīng)用程序可能很小。自包含的單文件應(yīng)用程序更大(由于帶有運(yùn)行時(shí)),但是不需要作為安裝前步驟就安裝.NET運(yùn)行時(shí),因此可以正常工作。通常,依賴框架對開發(fā)和企業(yè)環(huán)境有利,而對于ISV,獨(dú)立包含通常是更好的選擇。
          我們使用.NET Core 3.1制作了一個(gè)單文件應(yīng)用程序版本。它將二進(jìn)制文件打包到一個(gè)文件中以進(jìn)行部署,然后將這些文件解壓縮到一個(gè)臨時(shí)目錄中以加載并執(zhí)行它們。在某些情況下,這種方法可能會更好,但是我們希望我們?yōu)?.0構(gòu)建的解決方案將是首選,并且會受到歡迎。
          創(chuàng)建真正的單文件解決方案需要克服多個(gè)障礙。我們必須創(chuàng)建一個(gè)更復(fù)雜的應(yīng)用程序捆綁器,教導(dǎo)運(yùn)行時(shí)從二進(jìn)制資源中加載程序集,并使調(diào)試器與內(nèi)存映射的程序集兼容。我們還遇到了一些我們無法清除的障礙。

          在所有平臺上,我們都有一個(gè)名為“ apphost”的組件。這是成為可執(zhí)行文件的文件,例如Windows上的?myapp.exe?或基于Unix平臺上的?./myapp?。對于單文件應(yīng)用程序,我們創(chuàng)建了一個(gè)新主機(jī),稱為“超級主機(jī)”。它具有與常規(guī)apphost相同的角色,但還包含運(yùn)行時(shí)的靜態(tài)鏈接副本。超級主機(jī)是我們單文件方法的基本設(shè)計(jì)要點(diǎn)。此模型是我們在Linux上使用的模型。由于各種操作系統(tǒng)限制,我們無法在Windows或macOS上實(shí)現(xiàn)此方法。在Windows或macOS上沒有超級主機(jī)。在這些操作系統(tǒng)上,本機(jī)運(yùn)行時(shí)二進(jìn)制文件(約3個(gè))位于單個(gè)文件應(yīng)用程序旁邊。我們將在.NET 6.0中重新審視這種情況,但是,我們希望遇到的問題仍然具有挑戰(zhàn)性。

          您可以使用以下命令生成單文件應(yīng)用程序。

          • Framework-dependent single-file app:

            • dotnet publish?-r linux-x64?--self-contained?false /p:PublishSingleFile=true

          • Self-contained single-file app with assembly trimming and ready to run enabled:

            • dotnet publish?-r linux-x64?--self-contained?true /p:PublishSingleFile=true /p:PublishTrimmed=true /p:PublishReadyToRun=true

          您還可以使用項(xiàng)目文件配置單個(gè)文件發(fā)布。

          "Microsoft.NET.Sdk">

          Exe
          net5.0

          true

          true

          linux-x64

          true

          true


          Notes:

          • Apps are OS and architecture-specific. You need to publish for each configuration (Linux x64, Linux ARM64, Windows x64, …).

          • Configuration files (like?*.runtimeconfig.json) are included in the single file. You can place an additional config file beside the single file, if needed (possibly for testing).

          • .pdb?files are not included in the single file by default. You can enable PDB embedding with the?embed?property.


          我們在以前的預(yù)覽文章中看到了很多評論,詢問有關(guān)單個(gè)文件應(yīng)用程序與提前(AOT)編譯之間的關(guān)系。AOT是一個(gè)頻譜。dotnet發(fā)布生成的現(xiàn)成代碼(將?PublishReadyToRun?設(shè)置為true時(shí))是AOT的示例。當(dāng)您發(fā)布準(zhǔn)備運(yùn)行的映像時(shí),該構(gòu)建會提前為您生成機(jī)器代碼,而不是在運(yùn)行時(shí)由JIT生成。大多數(shù)人可能會將其作為AOT的定義。但是,許多人說AOT時(shí)的意思更具體。他們想要一種具有以下特征的解決方案:啟動(dòng)速度極快,不存在IL(出于大小和混淆的原因),(最多)JIT是可選的,并且二進(jìn)制大小盡可能小。我們使用術(shù)語“本機(jī)AOT”來描述AOT頻譜上的該點(diǎn)。.NET 5.0中提供的單個(gè)文件解決方案不滿足AOT的這一定義。這是一大進(jìn)步,但不是“本地AOT”。我們最近發(fā)布了有關(guān)本機(jī)AOT的調(diào)查,以獲取有關(guān)該模式的更多反饋。我們正在仔細(xì)研究結(jié)果,并將其納入我們的6.0計(jì)劃工作中。

          Reducing the size of container images


          我們一直在尋找使.NET容器映像更小且更易于使用的機(jī)會。我們將SDK映像重新建立在ASP.NET映像之上,而不是buildpack-deps上,以顯著減小您在多階段構(gòu)建方案中提取的聚合映像的大小

          對于多階段構(gòu)建,此更改具有以下優(yōu)勢(Dockerfile中的示例用法)
          Multi-stage build costs with?Ubuntu 20.04 Focal:

          Pull ImageBeforeAfter
          sdk:5.0-focal268 MB232 MB
          aspnet:5.0-focal64 MB10 KB (manifest only)

          Net download savings: 100 MB (-30%)
          Multi-stage build costs with?Debian 10 Buster:

          Pull ImageBeforeAfter
          sdk:5.0280 MB218 MB
          aspnet:5.084 MB4 KB (manifest only)

          Net download savings: 146 MB (-40%)
          See?dotnet/dotnet-docker #1814?for more detailed information.


          此更改有助于多階段構(gòu)建,其中目標(biāo)的sdk和aspnet或運(yùn)行時(shí)映像是同一版本(我們希望這是常見的情況)。進(jìn)行此更改后,aspnet pull(例如)將變?yōu)闊o操作狀態(tài),因?yàn)槟鷮⑼ㄟ^初始sdk pull來拉伸aspnet層。
          我們對Alpine和Nano Server進(jìn)行了類似的更改。對于Alpine或Nano Server,沒有?buildpack-deps?映像。但是,Alpine和Nano Server的sdk映像以前未在ASP.NET映像之上構(gòu)建。我們解決了。對于多階段構(gòu)建,您將看到Alpine和Nano Server以及5.0的巨大成功。


          ClickOnce Support


          幾個(gè)月前,我們宣布將為.NET Core提供ClickOnce支持。該項(xiàng)目仍在進(jìn)行中。我們希望將其作為RC2的一部分提供。我只是想分享一下我們?nèi)栽趶氖麓隧?xiàng)目。

          Closing

          在發(fā)行版中,“關(guān)閉”是一個(gè)有趣的章節(jié)標(biāo)題。該發(fā)布確實(shí)即將結(jié)束。該團(tuán)隊(duì)致力于解決所有剩余的5.0問題,并在發(fā)行版中獲得最終的錯(cuò)誤修復(fù)和改進(jìn)。甚至5.0 Runtime Epics問題也已解決。
          我們正在研究一些深入的帖子,我們計(jì)劃在有關(guān)各種主題的最終版本發(fā)布之前發(fā)布這些帖子。注意那些。您還可以期望最終版本的發(fā)布時(shí)間更長,涵蓋更廣泛的改進(jìn)和功能。
          感謝您對本發(fā)行版的所有支持以及所做的所有貢獻(xiàn)。


          瀏覽 121
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产伦理成人网先锋影音 | 肏屄视频在线免费看 | 欧美黄色免费网战 | 久久美女主播视频 | 国产做爱视频 |