Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NET Core 3.0 Õýʽ¹«²¼£ºÐÂÌØÐÔÏêϸ½â¶Á
 
×÷ÕߣºRichard Lander
  7104  次浏览      32
 2019-10-10
 
±à¼­ÍƼö:

±¾ÎÄÖ÷Òª½éÉÜÁË.NET Core 3.0ÐÂÌØÐÔ¡£Ï£ÍûÄܶÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚ΢ÐŹ«Öںţ¬ÓÉ»ðÁú¹ûÈí¼þÁõè¡±à¼­ÍÆ¼ö

½üÈÕ£¬.NET Core 3.0 Õýʽ·¢²¼¡£´Ë´Îа汾°üº¬Ò»ÏµÁÐÖØÒª¸Ä½ø£¬Ìí¼ÓÁË Windows Forms Óë WPF¡¢Ìí¼ÓÐ嵀 JSON API¡¢¶Ô ARM64 µÄÖ§³ÖÄÜÁ¦ÒÔ¼°È«ÃæÌá¸ßµÄÐÔÄÜˮƽµÈ¡£´ËÍ⣬C# 8 Ò²ÊÇ´Ë´Îа汾µÄÖØÒª×é³É²¿·Ö£¬ÆäÖаüº¬¿É¿Õ¡¢Òì²½Á÷ÒÔ¼°¸ü¶àģʽ¡£F# 4.7 ÔòרעÓÚ·Å¿íÓï·¨ÏÞÖÆ£¬²¢×¨ÃÅÆ¥Åä .NET Standard 2.0¡£¿ª·¢ÕßÏÖÔÚ¿ÉÒÔÁ¢¼´½«Ô­ÓÐÏîÄ¿¸üÐÂΪ .NET Core 3.0£¬´Ë´Îа汾ÓëÔ­Óа汾¼æÈÝ£¬´ó¼Ò¿ÉÒÔ·ÅÐÄÌåÑé¡£

¸ù¾Ý΢Èí²©¿ÍµÄ½éÉÜ£¬¿ª·¢Õß¿ÉÒÔÃæÏò Windows¡¢MacOS ÒÔ¼° Linux µÈϵͳƽ̨ÏÂÔØ .NET Core 3.0 £º

.NET Core 3.0 SDK ÓëÔËÐÐʱ

Snap °²×°³ÌÐò

Docker ¾µÏñ

´ËÍ⣬ ASP .NET Core 3.0 Óë EF Core 3.0 Ò²ÒѾ­Ò»Í¬·¢²¼¡£Visual Studio 2019 16.3 Óë Visual Studio for Mac 8.3 Òàͬʱ·¢²¼£¬ÇÒÐèÒª¸üвÅÄÜÈ·±£ .NET Core 3.0 Óë Visual Studio µÄЭͬʹÓá£.NET Core 3.0 Ϊ Visual Studio 2019 16.3 ÖеÄ×é³É²¿·Ö£¬¿ª·¢Õß¿ÉÒÔÑ¡ÔñÖ±½ÓÉý¼¶ÖÁ Visual Studio 2019 16.3£¬´Ó¶øÁ¢¿Ì»ñÈ¡ .NET Core¡£

¸ÐлËùÓÐΪ .NET Core 3.0 ×ö³ö¹±Ï×µÄÅóÓÑÃÇ£¡´Ë´Î×îа汾µÄ·¢²¼Ô´×ÔÊý°ÙλÍŶӳÉÔ±µÄŬÁ¦£¬Ò²°üÀ¨¼¼ÊõÉçÇøµÄÖØ´ó¹±Ïס£

·¢ÐÐ˵Ã÷£º

.NET Core 3.0 ·¢ÐÐ˵Ã÷

.NET Core 2.2 -> 3.0 API µÄÇø±ð

.NET Core 3.0 ¹±Ï×ÕßÃûµ¥

GitHub ·¢Ðаæ

¹ØÓÚ .NET Core 3.0 µÄ GitHub ÎÊÌâ½â´ð

3.0 °æ±¾£¬¿ª·¢ÕßÐèÒªÁ˽âʲô£¿

ÔÚÉîÈë̽¾¿ .NET Core 3.0 ÖеÄÈ«²¿Ð¹¦ÄÜ֮ǰ£¬ÎÒÃÇÊ×ÏÈÐèҪǿµ÷¼¸Ïî¹Ø¼üÐԵĸĽøÓëÖ¸µ¼ÄÚÈÝ¡£ÒÔÏÂÊÇÕûÀí³öµÄÒªµãÇåµ¥£º

.NET Core 3.0 ÒѾ­ÔÚ dot.net ÒÔ¼° Bing.com ÉÏÍйÜÁ˼¸¸öÔ£¬Í¨¹ýÁËһϵÁÐÑÏ¿ÁµÄ²âÊÔ¡£ÖÚ¶àÆäËû΢ÈíÍŶÓÒ²½«ºÜ¿ìÔÚÉú²úÁ÷³Ìµ±ÖÐͨ¹ý .NET Core 3.0 ²¿ÊðһϵÁдóÐ͹¤×÷¸ºÔØ¡£

¶àÖÖ×é¼þµÄÐÔÄܵõ½ÏÔÖøÌáÉý£¬¸ÐÐËȤµÄÅóÓÑ¿ÉÒÔµã»÷´Ë´¦²ÎÔÄ .NET Core 3.0 µÄÐÔÄܸĽøËµÃ÷¡£

C# 8 ¼ÓÈëÁËÒì²½Á÷¡¢·¶Î§ / Ë÷Òý¡¢¸ü¶àģʽÒÔ¼°¿ÉΪ¿ÕµÄÒýÓÃÀàÐÍ¡£¿ÉΪ¿ÕÒâζ×Å¿ÉÒÔÖ±½Ó·¢ÏÖÄÇЩµ¼Ö NullReferenceException ÎÊÌâµÄ´úÂëȱÏÝ¡£¿ò¼Ü¿âµÄ×îµ×²ã×¢ÊÍÒ²ÒÑÌí¼ÓÍê³É£¬ÒÔ°ïÖúÁ˽âºÎʱΪ Null¡£

F# 4.7 ÖÂÁ¦ÓÚͨ¹ýÒþʽ yield ±í´ïʽ¼°Ïà¹ØÓï·¨½µµÍijЩ²Ù×÷µÄʵÏÖÄѶȡ£ÆäÖл¹°üº¬¶Ô LangVersion µÄÖ§³Ö£¬Ìṩ nameof ²¢¿ÉÒÔÔ¤ÀÀÐÎʽ´ò¿ª¾²Ì¬Àà¡£F# Core ºËÐÄ¿âÏÖÔÚ»¹Óë .NET Standard 2.0 ÏàÆ¥Åä¡£Äú¿ÉÒÔµã»÷´Ë´¦²ÎÔÄ F# 4.7 ·¢²¼¹«¸æÖеÄϸ½ÚÐÅÏ¢¡£

.NET Standard 2.1 Ôö¼ÓÁË¿ÉÓë .NET Core ÒÔ¼° Xamarin ¹²Í¬Ê¹ÓõĴúÂëÀàÐͼ¯¡£.NET Standar 2.1 µ±Öаüº¬ .NET Core 2.1 ÒÔ¼°Ö®ºó°æ±¾ÖеÄËùÓÐÀàÐÍ¡£

Windows ×ÀÃæÓ¦ÓÃÏÖÒÑÃæÏò Windows Forms Óë WPF£¨¿ªÔ´£©µÃµ½ .NET Core Ö§³Ö¡£ÆäÖУ¬WPF Éè¼ÆÆ÷Ϊ Visual Studio 2019 16.3 °æ±¾ÖеÄ×é³É²¿·Ö¡£Windows Forms Éè¼ÆÆ÷ÈÔ´¦ÓÚÔ¤ÀÀ״̬£¬²¢¿Éͨ¹ý VSIX ÏÂÔØµÄÐÎʽ»ñÈ¡¡£

.NET Core Ó¦ÓÃÏÖÔÚĬÈϾ߱¸¿ÉÖ´ÐÐÎļþ¡£ÔÚÒÔÍùµÄ·¢ÐаæÖУ¬Ó¦ÓÃÐèҪͨ¹ý dotnet ÃüÁî·½Æô¶¯£¬ÀýÈç dotnet myapp.dll¡£ÏÖÔÚ£¬¿ÉÒÔͨ¹ýÓ¦ÓÃÌØ¶¨¿ÉÖ´ÐÐÎļþʵÏÖÓ¦ÓÃÆô¶¯£¬ÀýÈç myapp »òÕß./myapp£¬¾ßÌåÊÓʹÓõIJÙ×÷ϵͳ¶ø¶¨¡£

¸ßÐÔÄÜ JSON API ¼ÓÈëа汾£¬ÊÊÓÃÓÚ reader/writer¡¢¶ÔÏóÄ£ÐÍÒÔ¼°ÐòÁл¯³¡¾°µÈ¡£ÕâЩ API ÔÚ Span »ù´¡Ö®ÉÏÖØÐ¹¹½¨¶ø³É£¬ÇÒÔڵײãʹÓà UTF8£¨¶ø·Ç string µÈ UTF16£©¡£ÕâЩ API Äܹ»½«·ÖÅäÐèÇó¿ØÖÆÔÚ×îµÍ³Ì¶È£¬´Ó¶øÌá¸ßÐÔÄÜ¡¢¼õÉÙÀ¬»øÊÕ¼¯Æ÷µÄ¹¤×÷Á¿¡£¾ßÌåÇë²ÎÔÄ.NET Core 3.0 ÖÐµÄ JSON δÀ´·¢Õ¹ËµÃ÷¡£

ĬÈÏÇé¿öÏ£¬À¬»øÊÕ¼¯Æ÷µÄÄÚ´æÕ¼ÓÃÁ¿µÃµ½ÁËÏÔÖøÏ÷¼õ¡£¶ÔÓÚ½«ÖÚ¶àÓ¦ÓóÌÐòÍйÜÔÚͬһ·þÎñÆ÷Ö®ÉϵÄʹÓó¡¾°£¬ÕâÏî¸Ä½ø¿ÉνÒâÒåÖØ´ó¡£À¬»øÊÕ¼¯Æ÷±¾ÉíÒ²µÃµ½Á˸üУ¬Äܹ»ÀûÓà 64 ºË¼°ÒÔÉÏÉ豸µÄ´óÁ¿¼ÆËãºËÐÄ¡£

.NET Core ÒÑÕë¶Ô Docker ½øÐÐÁËÔöÇ¿£¬ÒÔʹ .NET Ó¦ÓóÌÐòÄܹ»ÔÚÈÝÆ÷ÖÐÒÔ¿ÉÔ¤²âµÄ·½Ê½¸ßЧÔË×÷¡£ÔÚÈÝÆ÷ÅäÖÃÖеÄÄÚ´æ»ò CPU ×ÊÔ´ÓÐÏÞʱ£¬Ä¿Ç°µÄÀ¬»øÊÕ¼¯Æ÷ÓëÏ̳߳ظüнá¹ûÒ²ÄÜ´øÀ´¸üºÃµÄÔË×÷Ч¹û¡£.NET Core docker ¾µÏñÒ²±äµÃ¸üС£¬ÆäÖÐ SDK ¾µÏñµÄÊÝÉíЧ¹ûÓÈÆäÃ÷ÏÔ¡£

Raspberry Pi Óë ARM оƬÏÖÒѵõ½Ö§³Ö£¬¿ÉÅäºÏÔ¶³Ì Visual Studio µ÷ÊÔ³ÌÐòµÈ¹¤¾ßʵÏÖÎïÁªÍø¿ª·¢¡£¿ª·¢Õ߿ɲ¿ÊðÓ¦ÓÃÒÔ¼àÌý¸÷´«¸ÐÆ÷£¬Í¬Ê±½«ÏûÏ¢»òÕßͼÏñÊä³öÖÁÏÔʾÆ÷ÉÏ£¬Õû¸ö¹ý³Ì½Ô¿Éͨ¹ýÐ嵀 GPIO API ʵÏÖ¡£ASP.NET Ôò¿ÉÓÃÓÚ½«Êý¾Ý¹«²¼ÓÚ API »òÕßÒÔÕ¾µãµÄÐÎʽ¶ÔÎïÍøÉ豸½øÐÐÅäÖá£

.NET Core 3.0 ¼´Îª¡°µ±Ç°¡±°æ±¾£¬ÎÒÃǼƻ®ÔÚ 2019 Äê 11 ÔÂÍÆ³öÏÂÒ»´ú .NET Core 3.1 °æ±¾¡£.NET Core 3.1 ½«Îª³¤ÆÚÖ§³Ö£¨LTS£©°æ±¾£¨ÖÜÆÚÖÁÉÙΪ 3 Ä꣩¡£ÎÒÃǽ¨ÒéÄúÊ×ÏȲÉÓà .NET Core 3.0£¬¶øºó¸üÐÂÖÁ 3.1 °æ£¬Éý¼¶¹ý³Ì½«·Ç³£ÇáËÉ¡£

.NET Core 2.2 ½«ÓÚ½ñÄê 12 Ô 23 ÈÕÍ£Ö¹·þÎñ£¬¾ßÌåÇé¿öÇë²ÎÔÄ .NET Core Ö§³Ö²ßÂÔ¡£

.NET Core 3.0 ½«Í¨¹ý RHEL 8 µÄºìñ Applicaltion Streams ½»¸¶£¬ÕâÒ²ÊÇÎÒÃÇÓëºìñ¹«Ë¾¶àÄêºÏ×÷µÄ×îгɹû¡£

¶ÔÓÚÏ£ÍûÔÚ Windows ÉÏʹÓà .NET Core 3.0 µÄÓû§£¬½«±ØÐëÉý¼¶ÖÁ Visual Studio 2019 16.3¡£

¶ÔÓÚÏ£ÍûÔÚ Mac ÉÏʹÓà .NET Core 3.0 µÄÓû§£¬½«±ØÐëÉý¼¶ÖÁ Visual Studio for Mac 8.3¡£

Visual Studio Code Óû§Ó¦Ê¼ÖÕʹÓÃ×îа汾µÄ C# À©Õ¹£¬ÒÔÈ·±£Äܹ»Õý³£Ö§³Ö×îз½°¸£¬°üÀ¨Óë .NET Core 3.0 µÄÆ¥Åä¡£

.NET Core 3.0 µÄ Azure App Serivce ²¿ÊðĿǰÕýÔÚ½øÐе±ÖС£

.NET Core 3.0 µÄ Azure Dev Ops ²¿Êð¼´½«ÍƳö¡£ÎÒÃǽ«ÔÚ×¼±¸¾ÍÐ÷Ö®ºó·¢²¼¸üС£

ƽ̨֧³Ö

.NET Core 3.0 ½«ÔÚÒÔϲÙ×÷ϵͳƽ̨Éϵõ½Ö§³Ö£º

Alpine: 3.9+

Debian: 9+

openSUSE: 42.3+

Fedora: 26+

Ubuntu: 16.04+

RHEL: 6+

SLES: 12+

macOS: 10.13+

Windows Client: 7, 8.1, 10 (1607+)

Windows Server: 2012 R2 SP1+

±¸×¢£ºWindows Forms Óë WPF Ó¦ÓÃÖ»ÊÊÓÃÓÚ Windows ²Ù×÷ϵͳ¡£

оƬ֧³ÖÇé¿ö£º

x64£¬Windows¡¢macOS ÒÔ¼° Linux

x86£¬Windows

ARM32£¬Windows Óë Linux

ARM64£¬Linux (kernel 4.14+)

±¸×¢£ºÇëÈ·±£ .NET Core 3.0 ARM64 ²¿Êð·½°¸²ÉÓà Linux ÄÚºË 4.14 »òÕ߸üа汾¡£ÀýÈ磬Ubuntu 18.04 Äܹ»Âú×ãÕâÒ»Ìõ¼þ£¬µ« 16.04 °æ±¾ÎÞ·¨Ö§³Ö¡£

WPF Óë Windows Forms

¿ª·¢Õß¿ÉÒÔÔÚ Windows ϵͳÉÏÀûÓà .NET Core 3 ¹¹½¨ WPF Óë Windows Forms Ó¦ÓôÓÏîÄ¿Æð²½Ö®³õ£¬ÎÒÃǾÍÖÆ¶¨ÁËÇ¿´óµÄ¼æÈÝÐÔÄ¿±ê£¬Ö¼ÔÚ±£Ö¤×ÀÃæÓ¦ÓóÌÐòÄܹ»´Ó .NET Framework ÇáËÉÇ¨ÒÆÖÁ .NET Core µ±ÖС£ÎÒÃÇÒѾ­ÊÕµ½Öڶ࿪·¢ÈËÔ±µÄ·´À¡£¬Á˽⵽ËûÃÇÒѾ­³É¹¦½«×Ô¼ºµÄÓ¦ÓÃÇ¨ÒÆÖÁ .NET Core 3.0£¬ÇÒÕû¸öÁ÷³Ì·Ç³£ÇáËɱã½Ý¡£´ÓÁ˾¡¿ÉÄܽµµÍ¶Ô¿ª·¢ÈËÔ±µÄÓ°Ï죬WPF ÒÔ¼° Windows Forms ûÓÐÊܵ½ÈκÎÓ°Ï죬ÆäÈÔ¿ÉÔÚ .NET Core ÉÏÕý³£ÔËÐС£ÊÂʵÉÏ£¬ÏîÄ¿±¾Éí½øÐÐÁËÖØ´óµ÷Õû£¬µ«ÎÒÃÇÈÏΪ²»¶ÔÓû§Ôì³ÉÓ°Ïì²ÅÊÇ×îºÃµÄµ÷Õû·½Ê½¡£

ÏÂͼËùʾΪһ¿î .NET Core Windows Forms Ó¦Óãº

Visual Studio 2019 16.3 ÒѾ­Ö§³Ö´´½¨Äܹ»Æ¥Åä .NET Core µÄ WPF Ó¦Óá£ÆäÖаüÀ¨ÐµÄÄ£°å¡¢¾­¹ý¸üÐ嵀 XAML Éè¼ÆÆ÷ÒÔ¼° XMAL Hot Reload¡£¸ÃÉè¼ÆÆ÷ÀàËÆÓÚÏÖÓÐ XAML Éè¼ÆÆ÷£¨Äܹ»Æ¥Åä.NET Framework£©£¬µ«¶þÕßÔÚÌåÑéÉÏÈÔÈ»ÂÔÓв»Í¬¡£

´Ó¼¼Êõ²ãÃæÀ´¿´£¬×î´óµÄÇø±ðÔÚÓÚÃæÏò .NET Core µÄÉè¼ÆÆ÷²ÉÓÃеĽӿڽø³Ì£¨wpfsurface.exe£©ÒÔ½öÔËÐÐÕë¶Ô .NET Core °æ±¾µÄÔËÐÐʱ´úÂë¡£ÒÔÍù£¬.NET Framework WPF Éè¼ÆÆ÷½ø³Ì£¨xdesproc.exe£©±¾Éí¼´Îª³ÐÔØÉè¼ÆÆ÷µÄ WPF .NET Framework ½ø³Ì£»ÓÉÓÚÔËÐÐʱ²»¼æÈÝ£¬ÎÒÃÇÎÞ·¨Ê¹Óà WPF .NET Framework ½ø³Ì£¨ÔÚ±¾Ê¾ÀýΪÖÐ Visual Studio£©½«Á½¸ö°æ±¾µÄ .NET£¨¼´ .NET Framework Óë .NET Core£©¼ÓÔØÖÁͬһ½ø³Ìµ±ÖС£ÕâÒâζ×ÅÉè¼ÆÆ÷ÔÚÒ»¶¨³Ì¶ÈÉÏ£¨ÀýÈçÉè¼ÆÆ÷À©Õ¹£©ÎÞ·¨ÒÔͬÑùµÄ·½Ê½ÔË×÷¡£Èç¹ûÕýÔÚ±àдÉè¼ÆÆ÷À©Õ¹£¬ÎÒÃǽ¨ÒéÈÏÕæÔĶÁ XAML Éè¼ÆÆ÷À©Õ¹Ç¨ÒÆÎĵµ¡£

ÏÂͼËùʾΪÏÔʾÔÚÐÂÉè¼ÆÆ÷µ±ÖÐµÄ WPF Ó¦Óãº

Windows Forms Éè¼ÆÆ÷ĿǰÈÔ´¦ÓÚÔ¤ÀÀ״̬£¬¿ÉÒÔµ¥¶À½øÐÐÏÂÔØ¡£Æä½«ÔÚºóÐø¸ü¸ß°æ±¾ÄÚ±»Ìí¼ÓÖÁ Visual Studio µ±ÖС£¸ÃÉè¼ÆÆ÷µÄµ±Ç°Ô¤Ëã°æ°üº¬¶Ô×î³£ÓÿؼþÒÔ¼°µ×²ã¹¦ÄܵÄÖ§³Ö¡£ÎÒÃǽ«Í¨¹ýÿÔ¸üв»¶Ï¶Ô¸ÃÉè¼ÆÆ÷×ö³ö¸üС£ÎÒÃÇĿǰ²»½¨Òé´ó¼Ò½«×Ô¼ºµÄ Windows Forms Ó¦ÓóÌÐòÒÆÖ²ÖÁ .NET Core£¬ÌرðÊÇÔڸ߶ÈÒÀÀµÉè¼ÆÆ÷µÄÇé¿öÏ¡£Ï£Íû¿ª·¢ÕßÌåÑéĿǰµÄÉè¼ÆÆ÷Ô¤ÀÀ°æ£¬²¢»ý¼«ÏòÎÒÃÇ·´À¡ÎÊÌâ¡£

ÁíÍ⣬´ó¼ÒÒ²¿ÉÒÔÀûÓà .NET CLI ͨ¹ýÃüÁîÐнøÐÐ×ÀÃæÓ¦ÓóÌÐòµÄ´´½¨Óë¹¹½¨¡£ÀýÈ磬Äú¿ÉÒÔͨ¹ýÒÔÏÂÃüÁî¿ìËÙ´´½¨Ò»¸öÐ嵀 Windows Forms Ó¦Óãº

dotnet new winforms -o myapp
cd myapp
dotnet run

ÄúÒ²¿ÉÒÔÀûÓÃͬÑùµÄÁ÷³Ì´´½¨ WPF Ó¦Óãº

dotnet new wpf -o mywpfapp
cd mywpfapp
dotnet run

ÔçÔÚ 2018 Äê 12 Ô£¬ÎÒÃǾͽ« Windows Forms Óë WPF ת»¯Îª¿ªÔ´ÏîÄ¿¡£ºÜ¸ßÐË¿´µ½£¬Ä¿Ç°¼¼ÊõÉçÇøÒÔ¼° Windows Forms ¼° WPF ÍŶÓÕý¹²Í¬Å¬Á¦ÒԸĽøÕâÁ½Ì× UI ¿ò¼Ü¡£ÔÚ WPF ·½Ã棬ÎÒÃÇ×î³õÔÚ GitHub ¿âÖÐÖ»ÓµÓÐÉÙÁ¿´úÂ룬µ«Ä¿Ç°¼¸ºõÈ«²¿ WPF ´úÂë¶¼ÒѾ­·¢²¼ÖÁ GitHub¡£Ëæ×Åʱ¼äµÄÍÆÒÆ£¬Î´À´»¹½«Óиü¶à×é¼þ³öÏÖ¡£ÓëÆäËû .NET Core ÏîĿһÑù£¬ÕâЩеĿ⽫³ÉΪ .NET Foundation µÄÒ»²¿·Ö£¬²¢×ñÑ­ MIT ¿ªÔ´Ðí¿É¡£

System.Windows.Forms.DataVisualization Èí¼þ°ü£¨°üº¬Í¼±í¿Ø¼þ£©Ä¿Ç°Ò²ÊÊÓÃÓÚÐ嵀 .NET Core °æ±¾¡£´ó¼ÒÏÖÔÚ¿ÉÒÔ½«ÕâЩ¿ØÖÆÌí¼Óµ½ÄúµÄ .NET Core WinForms Ó¦ÓóÌÐòµ±ÖС£¸Ãͼ±í¿Ø¼þµÄÔ´´úÂë¿É´Ó Github É쵀 dotnet/winforms-datavisualization ´¦»ñÈ¡¡£¿Ø¼þ±¾ÉíÒѾ­½øÐÐÁ˵÷Õû£¬ÒÔ¼ò»¯ÃæÏò .NET Core 3 µÄÒÆÖ²¹ý³Ì£¬µ«ÎÒÃDz¢²»´òËã¶ÔÆä×ö³ö´ó¹æÄ£¸üС£

Windows Ô­Éú»¥²Ù×÷

Windows ÒÔ³£¹æ API¡¢COM ÒÔ¼° WinRT µÄÐÎʽÌṩ·á¸»µÄÔ­Éú API¡£ÎÒÃÇÒ²´Ó .NET Core 1.0 ʱ´úÆð¼´Ìṩ¶Ô P/Invoke µÄÖ§³Ö£»ÔÚ´Ë´Î .NET Core 3.0 µ±ÖУ¬ÎÒÃǽøÒ»²½Ìí¼ÓÁË CoCreate COM API¡¢Ö÷¶¯ WinRT API£¬ÒÔ¼°½«ÍйܴúÂëÒÔ COM ×é¼þÐÎʽ´¦ÀíµÈ¹¦ÄÜ¡£ºÜ¶à¿ª·¢ÈËÔ±¶¼¾ÍÕâЩ¹¦ÄÜÏòÎÒÃÇÌá³öÉêÇ룬ÎÒÃÇÏàÐÅÆäÕýÊ½ÍÆ³öÒ²½«¸ø´ó¼ÒµÄÈÕ³£¹¤×÷´øÀ´¾Þ´ó±ãÀû¡£

È¥ÄêϰëÄ꣬ÎÒÃÇÐû²¼ÒѾ­É跨ͨ¹ý .NET Core ʵÏÖÁË Excel ×Ô¶¯»¯¡£ÄǾø¶ÔÊǸöÓÐȤµÄʱ¿Ì¡£Ôڵײ㣬ÎÒÃǵÄչʾÀûÓõ½ COM »¥²Ù×÷»úÖÆ£¬ÀýÈç NOPIA¡¢¶ÔÏóµÈЧÐÔÒÔ¼°×Ô¶¨Òå±à×éÆ÷µÈµÈ¡£ÏÖÔÚ£¬Äú¿ÉÒÔÔÚÀ©Õ¹Ê¾Àýµ±ÖÐÇ××ÔÌåÑé¶àÖÖÏà¹ØÑÝʾ·½°¸¡£

Ŀǰ£¬.NET Core 3.0 Ö»²¿·ÖÖ§³ÖÍÐ¹Ü C++ Óë WinRT »¥²Ù×÷£¬ÍêÕûµÄÖ§³ÖÄÜÁ¦½«ÔÚ .NET Core 3.1 µ±ÖÐÍÆ³ö¡£

¿É¿ÕÒýÓÃÀàÐÍ

C# 8.0 µ±ÖÐÒýÈëÁ˿ɿÕÓë²»¿É¿ÕÁ½ÖÖеÄÒýÓÃÀàÐÍ£¬ÕâÒâζ×ÅÓû§¿ÉÒÔ¶ÔÒýÓÃÀàÐͱäÁ¿µÄÊôÐÔ×ö³öÖØÒªÉùÃ÷£º

ijÏîÒýÓò»Ó¦Îª¿Õ¡£µ±±äÁ¿²»Ó¦Îª¿Õʱ£¬Ôò±àÒëÆ÷»áÇ¿ÖÆÖ´ÐйæÔòÒÔÈ·±£°²È«µØ³·ÏúÕë¶Ô¿Õ±äÁ¿µÄÒýÓ㬶øÎÞÐèÔ¤Ïȼì²éÒýÓÃÄ¿±êÊÇ·ñΪ¿Õ¡£

ijÏîÒýÓÿÉÒÔΪ¿Õ¡£µ±±äÁ¿¿ÉÒÔΪ¿Õʱ£¬±àÒëÆ÷»áÇ¿ÖÆÖ´ÐйæÔòÒÔÈ·±£ÄúÒѾ­¶ÔËùÒýÓõıäÁ¿ÊÇ·ñΪ¿Õ×ö³ö¼ì²é¡£

Ïà½ÏÓÚÎÞ·¨´ÓÒýÓñäÁ¿µÄ±äÁ¿ÉùÃ÷µ±ÖÐÈ·¶¨Éè¼ÆÒâͼµÄÔçÆÚ C# °æ±¾£¬´Ë´Î·¢²¼µÄй¦ÄܾßÓÐÃ÷ÏÔµÄÓÅÊÆ¡£Í¨¹ýÌí¼Ó¿É¿ÕÕâһȫÐÂÒýÓÃÀàÐÍ£¬Äú½«Äܹ»¸üÃ÷È·µØÉùÃ÷×Ô¼ºµÄÉè¼ÆÒâͼ£¬¶ø±àÒëÆ÷Ôò¿ÉÒÔ°ïÖúÄúÕýÈ·µØÍê³ÉÕâһĿ±ê²¢¼°Ê±·¢ÏÖ´úÂëÖеĴíÎó¡£

½Ó¿Ú³ÉÔ±µÄĬÈÏʵÏÖ

Ŀǰ£¬Ò»µ©½Ó¿Ú·¢²¼Íê±Ï£¬Äú½«ÎÞ·¨¶ÔÆä×ö³öÈκαä¸ü£º»»ÑÔÖ®£¬ÒªÏòÆäÖÐÌí¼ÓгÉÔ±£¬ÎÒÃǾͱØÈ»»á¶ÔÏÖÓнçÃæµÄʵÏÖ³ÉÔ±Ôì³ÉÆÆ»µ¡£

ÔÚ C# 8.0 µ±ÖУ¬´ó¼Ò¿ÉÒÔΪijһ½Ó¿Ú³ÉÔ±ÌṩÖ÷Ìå¡£½á¹û¾ÍÊÇ£¬Èç¹ûʵÏָýӿڵÄÀàûÓÐʵÏָóÉÔ±£¨¿ÉÄÜÊÇÒòΪ±àд´úÂëʱ»¹²»´æÔڸóÉÔ±£©£¬ÄÇôµ÷ÓôúÂ뽫ֻÄÜ»ñµÃĬÈϵÄʵÏÖЧ¹û¡£

interface ILogger
{
void Log(LogLevel level, string message);
void Log(Exception ex) => Log(LogLevel.Error, ex. ToString()); // New overload }

class ConsoleLogger : ILogger
{
public void Log(LogLevel level, string message) { ... }
// Log(Exception) gets default implementation }

ÔÚ±¾Ê¾Àýµ±ÖУ¬ConsoleLogger Àಢ²»ÐèҪʵÏÖ¶Ô ILogger ÖÐµÄ Log(Exception) ÖØÔØ£¬ÒòΪÆäÊÇͨ¹ýĬÈÏʵÏÖ½øÐÐÉùÃ÷µÄ¡£ÏÖÔÚ£¬Ö»ÒªÎªÏÖÓÐʵÏÖ³ÉÔ±ÌṩĬÈÏʵÏÖ£¬Äú¾Í¿ÉÒÔËæÊ±ÏòÏÖÓнӿÚÌí¼ÓеijÉÔ±¡£

Òì²½Á÷

ÏÖÔÚ£¬Äú¿ÉÒÔÀûÓà IAsyncEnumerable ¶ÔÒì²½Êý¾ÝÁ÷½øÐÐ foreach¡£ÕâһеĽӿÚÂú×ãÁËÖڶ࿪·¢ÈËÔ±µÄ³¤¾ÃÐèÇó£¬Ò²¾ÍÊÇ IEnumerable µÄÒì²½°æ±¾¡£¸ÃÓïÑÔÔÊÐí´ó¼Ò¶ÔÈÎÎñ½øÐÐ await foreach ÒÔʹÓÃÆäÔªËØ¡£ÔÚ²úÉú·½Ã棬ÄúµÄ yield return ÌõÄ¿¿ÉÄÜ»á²úÉúÒì²½Á÷¡£ËäÈ»ÌýÆðÀ´Ëƺõ±È½Ï¸´ÔÓ£¬µ«Æäʵ¼ÊÉϽ«ÔÚʵ¼ùµ±ÖÐÏÔÖø¼ò»¯²Ù×÷¡£

ÒÔÏÂʾÀýչʾÁËÒì²½Á÷µÄ²úÉúÓëʹÓÃÇé¿ö¡£ÆäÖÐµÄ foreach ÉùÃ÷ΪÒì²½£¬Æä±¾Éí»áÀûÓà yield return Ϊµ÷ÓóÌÐò²úÉúÒ»ÌõÒì²½Á÷¡£ÕâÖÖÀûÓà yield return µÄģʽÒàÊÇÎÒÃÇÍÆ³öµÄÒì²½Á÷±ê×¼Éú²ú·½Ê½¡£

async IAsyncEnumerable<int> GetBigResultsAsync()
{
await foreach (var result in GetResultsAsync())
{
if (result > 20) yield return result;
}
}

³ýÁËÄܹ»ÊµÏÖ await foreach Ö®Í⣬´ó¼ÒÒ²¿ÉÒÔ´´½¨³öÒì²½µü´úÆ÷£¬ÀýÈçÒ»¸öÄܹ»·µ»Ø IAsyncEnumerable/IAsyncEnumerator ²¢ÔÚÆäÖÐͬʱʵÏÖ await Óë yield return µÄµü´úÆ÷¡£¶ÔÓÚÐèÒª´¦ÀíµÄ¶ÔÏó£¬ÄúÒ²¿ÉÒÔʹÓÃÄܹ»ÊµÏÖ Stream ÒÔ¼° Timer µÈ¶àÖÖ¿ò¼ÜÀàÐ굀 IAsyncDisposable¡£

Ë÷ÒýÓ뷶Χ

ÎÒÃÇ»¹´´½¨ÁËеÄÓï·¨ÓëÀàÐÍ£¬¿ÉÓÃÓÚÃèÊöË÷ÒýÆ÷¡¢Êý×éÔªËØ·ÃÎÊ»òÕß¿ÉÒÔÖ±½Ó½øÐÐÊý¾Ý·ÃÎʵÄÈÎºÎÆäËûÀàÐÍ¡£ÆäÖаüÀ¨¶Ôµ¥Ò»Öµ£¨Ë÷ÒýµÄͨ³£¶¨Ò壩»òÕßÁ½¸öÖµ£¨ÃèÊö·¶Î§£©µÄÖ§³Ö¡£

Index ÊÇÒ»ÖÖÓÃÓÚÃèÊöÊý×éË÷ÒýµÄÐÂÀàÐÍ¡£Äú¿ÉÒÔ´Óͨ¹ý int ´ÓÁ㿪ʼ¶Ô Index ½øÐмÆÊý£¬Ò²¿ÉÒÔʹÓà ^ ǰ׺ÔËËã·û´´½¨Ë÷Òý¡£ÔÚÒÔÏÂʾÀýÖУ¬ÎÒÃÇ¿ÉÒÔͬʱ¹Û²ìµ½ÕâÁ½ÖÖÇé¿ö£º

Index i1 = 3; // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"

Range µÄ¸ÅÄî»ù±¾Ïàͬ£¬ÆäÓÉÁ½¸ö Index Öµ¹¹³É£¬ÆäÒ»´ú±í¿ªÊ¼¡¢Æä¶þ´ú±í½áÊø£¬ÇÒ¿ÉÒÔÓà x¡­y µÄ·¶Î§±í´ïʽ±àд¡£½ÓÏÂÀ´£¬´ó¼Ò¼´¿ÉʹÓà Range Ë÷ÒýÒÔÉú³Éµ×²ãÊý¾ÝµÄÒ»¸öÇÐÆ¬£¬¾ßÌåÈçÏÂËùʾ£º

var slice = a[i1..i2]; // { 3, 4, 5 }

ʹÓÃÉùÃ÷ºÜ¶àÅóÓÑ¿ÉÄÜÒѾ­Ñá¾ëÁËʹÓÃÄÇЩҪÇóËõ½ø´úÂëµÄÓï¾ä£¬¶Ô°É£¿Ã»ÎÊÌ⣬ÏÖÔÚ²»»áÁË¡£Äú¿ÉÒÔ°´ÒÔÏÂÐÎʽ±àд´úÂ룬¸Ã´úÂ뽫ÔÚµ±Ç°Óï¾ä¿éµÄ×÷ÓÃÓòĩβÌí¼Ó using ÉùÃ÷£¬¶øºó½«¶ÔÏó·ÅÖÃÔÚÆäĩβ¡£

<br />using System;
using System.Linq;
using System.Collections.Generic;
using static System.Console;
using System.IO;
namespace usingapp
{
class Program
{
static void Main()
{
var filename = "Program.cs";
var line = string.Empty;
var magicString = "magicString";
var file = new FileInfo(filename);
using var reader = file.OpenText();
while ((line = reader.ReadLine())!= null)
{
if (line.Contains(magicString))
{
WriteLine("Found string");
return;
}
}
WriteLine("String not found");
} // reader disposed here
}
}

Switch ±í´ïʽ

¼¸ºõÿһλ C# Óû§¶¼·Ç³£Ï²»¶ switch Óï¾äµÄ¸ÅÄµ«È´²»Ì«Ï²»¶ËüµÄÓï·¨¡£C# 8 ÒýÈëÁË switch ±í´ïʽ£¬¸Ã±í´ïʽ¿ÉʵÏÖÒÔϹ¦ÄÜ£º

terser Óï·¨

ÓÉÓÚÆäÊôÓÚ±í´ïʽ£¬ËùÒԻ᷵»ØÒ»¸öÖµ

ÓëģʽƥÅäÈ«Ãæ¼¯³É

Switch ±í´ïʽÖеĹؼü×ÖΪ¡°infix¡±£¬Òâζןùؼü×ÖλÓÚ²âÊÔÖµ£¨ÔÚµÚÒ»¸öʾÀýÖÐΪ 0£©ÓëʾÀýÁбíÖ®¼ä£¬ÕâÖÖÐÎʽÓë Lambda ±í´ïʽ·Ç³£ÏàËÆ¡£

µÚÒ»¸öʾÀý¶Ô¸÷·½·¨Ê¹ÓÃÁË Lambda Óï·¨£¬¸ÃÓï·¨Äܹ»Óë switch ±í´ïʽÁ¼ºÃ¼¯³É£¬µ«²¢·Ç±ØÐè¡£

static string Display(object o) => o switch
{
Point { X: 0, Y: 0 } => "origin",
Point { X: var x, Y: var y } => $"({x}, {y})", _
=> "unknown"
};

ÔÚ´ËʾÀýÖУ¬¹²ÓÐÁ½ÖÖģʽÔÚ·¢»Ó×÷Óá£Ê×ÏÈ£¬0 »áÓë Point ÀàÐÍģʽƥÅ䣬¶øºóÔÙÓë{´óÀ¨ºÅ}ÄÚµÄÊôÐÔģʽƥÅä¡£_ ÓÃÓÚÃèÊö¶ªÆúģʽ£¬ÆäÓë switch Óï¾äµÄĬÈÏģʽÏëÔÙ¡£

´ó¼ÒÒ²¿ÉÒÔ¸ü½øÒ»²½ÒÀÀµÔª×é½â¹¹Óë²ÎÊýλÖ㬾ßÌåÈçÏÂËùʾ£º

static State ChangeState(State current, Transition transition, bool hasKey) => (current, transition) switch
{
(Opened, Close) => Closed,
(Closed, Open) => Opened,
(Closed, Lock) when hasKey => Locked,
(Locked, Unlock) when hasKey => Closed, _
=> throw new InvalidOperationException ($"Invalid transition")
};

ÔÚ±¾Ê¾ÀýÖУ¬´ó¼Ò¿ÉÒÔ¿´µ½ÎÒÃDz¢²»ÐèҪΪÿһÖÖÇé¿ö¶¨Òå±äÁ¿»òÕßÏÔʽÀàÐÍ¡£Ïà·´£¬±àÒëÆ÷¿ÉÒÔ½«µ±Ç°ÕýÔÚ²âÊÔµÄÔª×éÓëÒѾ­¶¨ÒåµÄÔª×é½øÐÐÆ¥Åä¡£

ËùÓÐÕâЩģʽ£¬Ê¹µÃÎÒÃÇÄܹ»±àд³öÒâͼ¸ü¼ÓÃ÷È·µÄÉùÃ÷ÐÔ´úÂ룬¶ø·Çµ¥´¿Ö´ÐвâÊԵĹý³Ì´úÂë¡£±àÒëÆ÷Äܹ»¸ºÔðʵÏÖÎÞÁĵĹý³Ì´úÂ룬²¢±£Ö¤ÆäʼÖյõ½ÕýÈ·Ö´ÐС£

µ±È»£¬ÔÚijЩÇé¿öÏ£¬switch Óï¾äµÄʵ¼ÊЧ¹û¿ÉÄÜÈÔÈ»ÓÅÓÚÐ嵀 switch ±í´ïʽÓëģʽÖеÄÓï·¨ÐÎʽ¡£

Ëٶȸü¿ìµÄ JSON API

.NET Core 3.0 µ±Öаüº¬Ò»¸öÐ嵀 JSON API ¼Ò×壬ÆäÓÃÓÚʵÏÖ reader/writer ³¡¾°¡¢ÀûÓÃÎĵµ¶ÔÏóÄ£ÐÍ£¨DOM£©ÊµÏÖËæ»ú·ÃÎÊÍâ¼ÓÒ»¸öÐòÁл¯³ÌÐò¡£´ó¼Ò¿ÉÄÜÒѾ­·Ç³£ÊìϤÈçºÎʹÓà Json.NET ¡£Ð嵀 API Ö¼ÔÚÂú×ã´ó¶àÊýͬÀೡ¾°ÐèÇ󣬵«ÄÚ´æÐèÇó¸üµÍ¡¢Ö´ÐÐËٶȸü¿ì¡£

¼ò¶øÑÔÖ®£¬ÎÒÃÇÏ£Íû¹¹½¨Ò»¸öÐ嵀 JSON API£¬´Ó¶ø³ä·ÖÀûÓÃ.NET Core ÖеÄËùÓÐÈ«ÐÂÐÔÄÜÓÅÊÆ£¬²¢ÒÔ´ËΪ»ù´¡È«ÃæÌáÉýÐÔÄÜˮƽ¡£ºÜÃ÷ÏÔ£¬ÎÒÃDz»¿ÉÄÜÔÚ±£³ÖÏÖÓдúÂë¿â£¨ÀýÈç Jason.NET £©¼æÈÝÐÔµÄͬʱ´ï³ÉÕâһĿ±ê¡£

ÏÂÃæ£¬ÈÃÎÒÃÇ·Ö²ã¶ÔÕâÒ»Ð嵀 API ¼Ò×å×ö³ö²ûÊö¡£

Utf8JsonReader

System.Text.Json.Utf8JsonReader ÊÇÖÖÃæÏòÃæÏò UTF-8 ±àÂë JSON Îı¾µÄ¸ßÐÔÄÜ¡¢µÍ·ÖÅä¡¢´¿×ª·¢¶ÁÈ¡Æ÷£¬¸ºÔð´Ó ReadOnlySpan µ±ÖжÁÈ¡ÄÚÈÝ¡£Utf8JsonReader ÊÇÒ»ÖÖ»ù´¡µÄµÍ¼¶ÀàÐÍ£¬ÎÒÃÇ¿ÉÒÔÀûÓÃËü¹¹½¨×Ô¶¨Òå½âÎöÆ÷Óë½â´®Æ÷¡£ÀûÓÃÐ嵀 Utf8JasonReader£¬¶Ô JSON ¸ºÔصĶÁÈ¡ËٶȽ«¿É´ïµ½ÒÔÍù Json.NET ÖжÁÈ¡ËٶȵÄÁ½±¶¡£ÁíÍ⣬³ý·Ç´ó¼ÒÐèÒª½« JSON ÁîÅÆÊµÏÖΪ£¨UTF16£©×Ö·û´®£¬·ñÔòÆä²»»á½øÐзÖÅä¡£

Utf8JsonWriter

System.Text.Json.Utf8JsonWriter ÌṩһÖÖ¸ßÐÔÄÜ¡¢·Ç»º´æ¡¢´¿×ª·¢·½Ê½£¬¿ÉÓÃÓÚ½« String¡¢Int32 ÒÔ¼° DateTime µÈ³£¹æ.NET ÀàÐÍдÈëΪ UTF-8 ±àÂë JSON Îı¾¡£Óë reader ÀàËÆ£¬writer ÊÇÒ»ÖÖ»ù´¡µÍ¼¶ÀàÐÍ£¬¿ª·¢ÈËÔ±¿ÉÒÔÀûÓÃËü¹¹½¨×Ô¶¨ÒåÐòÁл¯³ÌÐò¡£Ê¹ÓÃÐ嵀 Utf8JasonWriter£¬JSON ¸ºÔصıàдËٶȽ«±È Json.NET дÈëÆ÷¸ß 30% µ½ 80%£¬ÇÒ²»½øÐзÖÅä¡£

JsonDocument

System.Text.Json.JsonDocument Äܹ»¶Ô JSON Êý¾Ý½øÐнâÎö£¬²¢½¨Á¢Ö»¶ÁÎĵµ¶ÔÏóÄ£ÐÍ£¨DOM£©¹¦ÄÜ£¬ÓÃÒÔ²éѯ¸Ã¶ÔÏóÒÔÖ§³ÖËæ»ú·ÃÎÊÓëö¾Ù¡£Æä½¨Á¢ÔÚ Utf8JasonReader »ù´¡Ö®ÉÏ£¬×é³ÉÊý¾ÝµÄ JSON ÔªËØ¿ÉÒÔͨ¹ýÓÉ JsonDocument ÀàÐÍ£¨±»³ÆÎª RootElement ÊôÐÔ£©¹«¿ªµÄ JsonElement ÀàÐͽøÐзÃÎÊ¡£JsonElement µ±Öаüº¬ JSON Êý×éÓë¶ÔÏóö¾ÙÆ÷£¬Íâ¼ÓÓÃÓÚ½« JSON Îı¾×ª»»Îª³£¼û.NET ÀàÐ굀 API¡£ÀûÓà JsonDocument£¬¶Ô³£¹æ JSON ¸ºÔؽøÐнâÎö²¢·ÃÎÊÆäÖи÷³ÉÔ±µÄËÙ¶È£¬Ò»°ã¿ÉÒÔ´ïµ½ÒÔÍù Json.NET µÄ 2 µ½ 3 ±¶£»¶øÇÒÓÉÓÚÊý¾Ý±¾Éí´óСºÏÀí£¨Ð¡ÓÚ 1 MB£©£¬Òò´Ë¼¸ºõ²»ÐèÒª½øÐÐÊý¾Ý·ÖÅä¡£

JSON ÐòÁл¯Æ÷

System.Text.Json.JsonSerializer ²ãλÓÚ¸ßÐÔÄÜ Utf8JsonReader Óë Utf8JsonWriter Ö®ÉÏ¡£Æä¸ºÔð¶ÔÀ´×Ô JSON µÄ¶ÔÏó½øÐз´ÐòÁл¯£¬²¢¶ÔÖ¸Ïò JSON µÄ¶ÔÏó½øÐÐÐòÁл¯¡£ÄÚ´æ·ÖÅäµÃµ½Ñϸñ¿ØÖÆ£¬Í¬Ê±Ö§³ÖÀûÓà Stream ÒÔÒì²½·½Ê½½øÐÐ JSON ¶ÁÈ¡ÓëдÈë¡£

ÒýÈëȫРSqlClient

SqlClient ÊÇÒ»¿îÊý¾ÝÌṩ³ÌÐò£¬Äú¿ÉÒÔÀûÓÃËüÖ±½ÓÀûÓà ADO .NET API ·ÃÎÊ΢Èí SQL Server ÒÔ¼° Azure SQL Database µÈ¡£SqlClient ÒѾ­Õýʽ·¢²¼£¬²¢Í¨¹ý Microsoft.Data.SqlClient NuGet ¹¤¾ß°ü½øÐиüУ¬ÇÒͬʱ֧³Ö .NET Freamework Óë .Net Core Ó¦ÓóÌÐò¡£Í¨¹ýʹÓà NuGet£¬SQL ÍŶӽ«Äܹ»¸üÇáËɵØÎª Freamework Óë .Net Core Óû§Ìṩ¸üС£

ARM ÓëÎïÁªÍøÖ§³Ö

ÎÒÃÇÔÚ±¾´Î·¢Ðа浱ÖÐʵÏÖÁË¶Ô Linux ARM64 µÄÖ§³Ö£¬ÕâÒ²ÊǶԴËǰ .NET Core 2.1 Óë 2.2 °æ±¾µ±ÖÐÃæÏò Linux Óë Windows Ìṩ ARM32 Ö§³ÖÄÜÁ¦µÄÑÓÐø¡£ËäȻijЩÎïÁªÍø¹¤×÷¸ºÔØÄܹ»·¢»ÓÎÒÃÇÏÖÓÐ x64 ¹¦ÄÜÌṩµÄÓÅÊÆ£¬µ«ÈÔÓв»ÉÙÓû§Ç¿ÁÒÒªÇó·¢²¼ ARM Ö§³Ö¹¦ÄÜ¡£ÏÖÔÚÕâÒ»¹¦ÄÜÒѾ­Âäʵµ½Î»£¬ÎÒÃÇÒ²ÔÚÓë¼Æ»®½øÐдó¹æÄ£²¿ÊðµÄ¿Í»§¿ªÕ¹¹ã·ººÏ×÷¡£

²»ÉÙÀûÓÃ.NET µÄÎïÁªÍø²¿Ê𳡾°Éæ¼°±ßÔµÉ豸£¬ÇÒÍêÈ«ÃæÏòÍøÂç¡£ÆäËûһЩ³¡¾°ÔòÒªÇó¶ÔÓ²¼þ½øÐÐÖ±½Ó·ÃÎÊ¡£ÔÚ±¾´Î·¢ÐаæÖУ¬ÎÒÃÇÌí¼ÓÁËÐµĹ¦ÄÜÒÔÔÚ Linux ÉÏʹÓô®Ðж˿ڣ¬Í¬Ê±¿ÉÀûÓà Raspberry Pi µÈÉ豸ÉϵÄÊý×ÖÒý½Å¹¦ÄÜ¡£¸ÃÒý½ÅʹÓöàÏîЭÒé¡£ÎÒÃÇ»¹Ìí¼ÓÁË¶Ô GPIO¡¢PWM¡¢I2C ÒÔ¼° SPI µÄÖ§³Ö£¬ÒÔÖ§³Ö¶ÁÈ¡´«¸ÐÆ÷Êý¾Ý¡¢ÒÔÎÞÏß·½Ê½½»»¥²¢½«Îı¾ÓëͼÏñÊä³öÖÁÏÔʾÆ÷µÈ¹¦ÄÜ¡£

´Ë¹¦ÄÜÊôÓÚÒÔÏÂÈí¼þ°üÖеÄ×é³É²¿·Ö£º

System.Device.Gpio

Iot.Device.Bindings

×÷Ϊ GPIO£¨¼°ÆäËûͬÀàЭÒ飩֧³ÖµÄÒ»²¿·Ö£¬ÎÒÃÇÉóÊÓÁËÒÔÍù°æ±¾ÖеÄÔ­ÓÐÔªËØ¡£ÎÒÃÇ·¢ÏÖÆäÖÐµÄ C# Óë Python API£¬ÔÚÕâÁ½ÖÖ³¡¾°Ï API ¶¼ÊôÓÚÔ­Éú¿âÉϵĴò°üÆ÷£¬¶øÕâЩ¿âÔò²ÉÓà GPL Ðí¿É¡£ÎÒÃÇÈÏΪÕâÖÖ·½·¨È±·¦¿É³ÖÐøÐÔ¡£Òò´Ë£¬ÎÒÃǹ¹½¨ÁË 100% ´¿ C# ½â¾ö·½°¸ÒÔʵÏÖÕâЩЭÒ飬ÕâÒâζ×ÅÎÒÃÇµÄ API ¿ÉÒÔÔÚÖ§³Ö .NET Core µÄÈκλ·¾³ÏÂÔË×÷£¬ÀûÓà C# µ÷ÊÔÆ÷£¨Í¨¹ý sourcelink£©½øÐе÷ÊÔ£¬²¢Ö§³Ö¶àÖֵײã Linux Çý¶¯³ÌÐò£¨°üÀ¨ sysfs¡¢libgpoid ÒÔ¼°ÆäËüÕë¶ÔÌØ¶¨Ö÷°åµÄÇý¶¯³ÌÐò£©¡£ËùÓдúÂë½Ô×ñÑ­ MIT Ðí¿É¡£ÓëÏÖÓм¼ÊõÏà±È£¬ÎÒÃÇÈÏΪÕâÖÖз½·¨½«¸ø.NET ¿ª·¢ÈËÔ±´øÀ´¾Þ´óµÄ±ãÀû¡£

.NET Core ÔËÐÐʱǰ¹ö²ßÂÔ¸üÐÂ

ÏÖÔÚ£¬.NET Core ÔËÐÐʱ£¨¸ü¾ßÌ嵨½²£¬ÔËÐÐʱ°ó¶¨³ÌÐò£©¿ªÊ¼ÌṩÖ÷°æ±¾µÄǰ¹öÑ¡Ôñ²ßÂÔ¡£ÔËÐÐʱ°ó¶¨³ÌÐò½«Ä¬ÈÏÆôÓÃÃæÏò²¹¶¡Óë´Î°æ±¾µÄǰ¹ö¹¦ÄÜ¡£ÎÒÃǾö¶¨¹«¿ªÒ»×é¸üΪ¹ã·ºµÄ²ßÂÔ£¬ÒÔ°ïÖú¿ª·¢ÈËÔ±¿ìËÙ»Ö¸´¿ÉÄÜ´æÔڵĸüÐÂÎÊÌ⣬µ«Ô­ÓÐǰ¹ö²Ù×÷²¢²»ÊÜÓ°Ïì¡£

ÎÒÃÇ·¢²¼ÁËÒ»ÏîÃûΪ RollForward µÄÐÂÊôÐÔ£¬¸ÃÊôÐÔÄܹ»½ÓÊÜÒÔÏÂÖµ£º

LatestPatch¡ª¡ªÇ°¹öÖÁ×îв¹¶¡°æ±¾¡£Æä»á½ûÓà Minor ²ßÂÔ¡£

Minor ¡ª¡ªÇ°¹öÖÁ×îÔç´Î°æ±¾ÒÔ½â¾öËùÐè´Î°æ±¾È±Ê§ÎÊÌâ¡£Èç¹û¸Ã´Î°æ±¾´æÔÚ£¬Ôò LatesPatch ²ßÂÔ¼´¿ÉÆðЧ¡£ÕâÒ²ÊÇϵͳÖвÉÓõÄĬÈϲßÂÔ¡£

Major ¡ª¡ªÇ°¹öÖÁ×îÔçÖ÷°æ±¾Óë×îÔç´Î°æ±¾£¬ÒÔ½â¾öËùÐèÖ÷°æ±¾È±Ê§ÎÊÌâ¡£Èç¹û¸ÃÖ÷°æ±¾´æÔÚ£¬ÔòËæºóʹÓà Minor ²ßÂÔ¡£

LatestMinor¡ª¡ªÇ°¹öÖÁ×îдΰ汾£¬¼´Ê¹´æÔÚËùÇëÇóµÄ´Î°æ±¾Ò಻ÊÜÓ°Ïì¡£

LatestMajor ¡ª¡ªÇ°¹öÖÁ×îÐÂÖ÷°æ±¾£¬¼´Ê¹´æÔÚËùÇëÇóµÄÖ÷°æ±¾Ò಻ÊÜÓ°Ïì¡£

Disable ¡ª¡ª²»½øÐÐǰ¹ö¡£½ö°ó¶¨ÖÁÖ¸¶¨°æ±¾¡£ÎÒÃDz»½¨Òé´ó¼ÒÔÚ³£¹æÓÃ;ÖÐʹÓÃÕâһѡÏÒòΪÆä»á½ûÓÃǰ¹öÖÁ×îв¹¶¡ºó°æ±¾µÄ¹¦ÄÜ¡£½ö½¨ÒéÄúÔÚ²âÊÔ»·¾³ÖÐʹÓá£

Docker Óë cgroup ÏÞÖÆ

ºÜ¶à¿ª·¢ÈËÔ±¶¼ÔÚÀûÓÃÈÝÆ÷¼¼Êõ´ò°ü²¢ÔËÐÐ×Ô¼ºµÄÓ¦ÓóÌÐò¡£ÆäÖеÄÒ»´óÖØÒªÎÊÌ⣬ÔÚÓÚÈÝÆ÷µÄ CPU »òÕßÄÚ´æµÈ×ÊÔ´¿ÉÄÜÊܵ½ÏÞÖÆ¡£ÎÒÃÇÔçÔÚ 2017 Äê¾ÍʵÏÖÁ˶ÔÄÚ´æÏÞÖÆ¹¦ÄܵÄÖ§³Ö£¬Òź¶µÄÊÇ£¬ÎÒÃÇ·¢ÏÖ¸ÃʵÏÖµÄÖ÷¶¯ÐÔ²»×ãÒÔ½«ÈÝÆ÷»·¾³ÒÔ¿É¿¿·½Ê½±£³ÖÔÚÅäÖÃÏÞÖÆÖ®Ï£¬Òâζ׿´Ê¹ÉèÖÃÁËÄÚ´æÏÞÖÆ£¨ÌرðÊÇСÓÚ 500 MB µÄÇé¿ö£©£¬Ó¦ÓóÌÐòÈÔÈ»ÓпÉÄܳöÏÖ OOM ÎÊÌâ¡£ÎÒÃÇÒѾ­ÔÚ .NET Core 3.0 µ±ÖÐÐÞ¸´ÁËÕâÒ»ÎÊÌâ¡£ÕâÒ»¸Ä½øÒâÒåÖØ´ó£¬ÎÒÃÇÇ¿ÁÒ½¨ÒéʹÓà .NET Core Docker µÄÓû§Éý¼¶ÖÁ .NET Core 3.0¡£

Docker ×ÊÔ´ÏÞÖÆ¹¦Äܹ¹½¨ÔÚ cgroup »ù´¡Ö®ÉÏ£¬¶ø cgroup ÓÖÊÇÒ»Ïî Linux Äں˹¦ÄÜ¡£´ÓÔËÐÐʱµÄ½Ç¶ÈÀ´¿´£¬ÎÒÃÇÐèÒªÒÔ cgroup »ùԪΪĿ±ê¡£

´ó¼Ò¿ÉÒÔÀûÓà docker run -m ²ÎÊýÀ´ÏÞÖÆÈÝÆ÷µÄ¿ÉÓÃÄڴ棬ÈçÏÂËùʾ£¬´ËʾÀýÓÃÓÚ´´½¨Ò»¸ö»ùÓÚ Alpine ÇÒÄÚ´æÈÝÁ¿Îª 4 MB µÄÈÝ£¨¶øºóÊä³öÄÚ´æÏÞÖÆ£©£º

C:\>docker run -m 4mb --rm alpine cat /sys/fs/cgroup/memory/memory. limit_in_bytes 4194304

ÎÒÃÇ»¹Ìí¼ÓÁËеıä¸ü£¬ÒÔ¸üºÃµØÖ§³Ö CPU ÏÞÖÆ£¨¨Ccpus£©¡£ÆäÖаüÀ¨¸üÐÂÔËÐÐʱ¶ÔÊ®½øÖÆ CPU Öµ½øÐÐËÄÉáÎåÈëµÄ·½Ê½¡£Èç¹û½«¡ªcpus ÉèÖÃΪ£¨×ã¹»£©½Ó½üij¸ö½ÏСµÄÕûÊý£¨ÀýÈç 1.499999999£©µÄÖµ£¬ÔòÔËÐÐʱ»á¶Ô¸ÃÖµ½øÐÐËÄÉáÎåÈ루ÕâÖÖÇé¿öϽ«ËÄÉáÎåÈëΪ 1£©¡£½á¹û¾ÍÊÇ£¬ÔËÐÐʱËùʹÓÃµÄ CPU ÊýÁ¿µÍÓÚÐèÇ󣬴Ӷøµ¼Ö CPU ×ÊÔ´²»×㡣ͨ¹ý¶Ô¸ÃÖµ½øÐÐÖ±½Ó½øÎ»£¬ÔËÐÐʱÔÚÀíÂÛÉÏ»áÔö¼Ó OS Ï̵߳÷¶È³ÌÐòµÄѹÁ¦£¬µ«¼´Ê¹ÊÇÔÚ×¶ËµÄÇé¿öÏ£¨¨Ccpus=1.000000001£¬ÒÔÍù Æä»á±»ËÄÉáÎåÈëΪ 1£¬µ«ÏÖÔÚ»áÖ±½Ó½øÎ»Îª 2£©£¬ÎÒÃÇҲûÓз¢ÏÖ CPU ³öÏÖÈκÎÐÔÄÜϽµ¡£

ÏÂÒ»²½ÊÇÈ·±£Ï̳߳Ø×ñÑ­ CPU ÏÞÖÆ¡£Ï̳߳ØËã·¨ÖÐÓÐÒ»²¿·Ö¸ºÔð¼ÆËã CPU µÄ·±Ã¦Ê±¼ä£¬Ò²¾ÍÊǼÆËã¿ÉÓà CPU ÈÝÁ¿¡£Í¨¹ýÔÚ¼ÆËã CPU ·±Ã¦Ê±¼äµ±Öп¼ÂÇ CPU ÏÞÖÆ£¬ÎÒÃǵÃÒÔ±ÜÃâÏ̳߳ØÔÚÕùÓÃÖÐÖ´Ðеĸ÷ÖÖÊÔ̽²Ù×÷£ºÒ»ÖÖ·½·¨¿ÉÄܳ¢ÊÔ·ÖÅä¸ü¶àÏß³ÌÒÔÔö¼Ó CPU ·±Ã¦Ê±¼ä£»µ«ÁíÒ»ÖÖ·½·¨Ôò¿ÉÄܳ¢ÊÔ·ÖÅä¸üÉÙỊ̈߳¬ÒÔ±ÜÃâ²»±ØÒªµÄÏß³ÌÀË·Ñ¡£

ĬÈÏÇé¿öϽµµÍ GC ¶Ñ´óС

ÔÚÖÂÁ¦ÓÚ¸ÄÉÆ¶Ô docker ÄÚ´æÏÞÖÆÖ§³ÖÄÜÁ¦µÄͬʱ£¬ÎÒÃÇÒ²Êܵ½ÁËÆô·¢£¬²¢×ÅÊÖ¶ÔͨÓà GC ²ßÂÔ¼ÓÒÔ¸üУ¬Ö¼ÔÚΪ¸üΪ¹ã·ºµÄÓ¦ÓóÌÐòµÄÄÚ´æÊ¹ÓÃÂÊ´øÀ´¸ÄÉÆ£¨¼´Ê¹Î´ÔËÐÐÔÚÈÝÆ÷Ö®ÄÚ£©¡£ÕâЩ±ä¸üʹµÃµÚ 0 ´úÔ¤Ëã·ÖÅäÄܹ»¸üºÃµØÓëÏÖ´ú´¦ÀíÆ÷µÄ»º´æ´óС¼°»º´æ²ã¼¶±£³ÖÒ»Ö¡£

ÎÒÃǵÄÍŶӳÉÔ± Damian Edwards ×¢Òâµ½£¬ASP.NET »ù×¼²âÊÔµÄÄÚ´æÊ¹ÓÃÁ¿¼õÉÙÁËÒ»°ë£¬µ«ÆäËüÐÔÄÜÖ¸±ê²¢Î´³öÏÖÈκθºÃæÓ°Ïì¡£ÕâÊÇÒ»ÏÈ˵Ľø²½£¡ÈçËûËùÑÔ£¬ÕâЩ½«³ÉΪеÄĬÈÏÉèÖã¬ÇÒ²»ÐèÒª¶ÔÄúµÄ´úÂë×ö³öÈκÎÐ޸ģ¨Ö»Ðè²ÉÓà .NET Core 3.0 ¼´¿É£©¡£

µ±È»£¬ÎÒÃÇÔÚ ASP.NET »ù×¼²âÊÔÖй۲쵽µÄÄÚ´æ½ÚԼЧ¹û£¬¿ÉÄÜ´ú±í / ²»´ú±íÄúµÄʵ¼ÊÌåÑé¡£ÎÒÃÇÏ£ÍûÌýµ½¸ü¶àÅóÓÑÔÚʵ¼ÊÓ¦ÓóÌÐòÄÚ´æÊ¹ÓÃÁ¿·½Ãæ¹Û²ìµ½µÄ½á¹û¡£

¸ÄÉÆ¶Ô¶à´¦ÀíÆ÷É豸µÄÖ§³ÖÄÜÁ¦

»ùÓÚ .NET µÄ Windows ´«Í³£¬GC ÐèÒªÅäºÏ Windows ´¦ÀíÆ÷×é¸ÅÄî²ÅÄÜÖ§³Ö°üº¬ 64 ¿éÒÔÉÏ´¦ÀíÆ÷µÄ¼ÆËã»ú¡£ÕâһʵÏÖÔçÔÚ 5 µ½ 10 ÄêǰµÄ .NET Framework µ±Öм´ÒÑÍê³É¡£µ«ÀûÓà .NET Core£¬ÎÒÃÇ×î³õÑ¡ÔñÁË Linux PAL ÒÔʵÏÖÀàËÆµÄ¸ÅÄ¡ªËäÈ» Linux µ±Öв»´æÔÚÕâÒ»Ô­Éú¸ÅÄî¡£´Ëºó£¬ÎÒÃÇÔÚ GC µ±ÖÐ·ÅÆúÁËÕâÒ»¸ÅÄ²¢½«Æäת»¯Îª Windows APL¡£

GC ÏÖÔÚ¹«¿ªÁËÒ»¸öÅäÖÿª¹Ø£¬¼´ GCHeapAffinitizeRanges£¬ÓÃÓÚÔÚ°üº¬ 64 ¸öÒÔÉÏ´¦ÀíÆ÷µÄ¼ÆËã»úÉÏÖ¸¶¨ÏàËÆµÄÑÚÂë¡£

GCLarge Page Ö§³Ö

Large Pages »òÕ߽РHuge Pages ÊÇÒ»ÏÄÜ£¬²Ù×÷ϵͳ¿ÉÀûÓÃÆä¹¹½¨Æð´óÓÚÔ­ÉúÒ³Ãæ´óС£¨Í¨³£Îª 4K£©µÄÄÚ´æÇøÓò£¬´Ó¶øÌá¸ßµ÷ÓÃÕâЩ´óÒ³ÃæµÄÓ¦ÓóÌÐòµÄÐÔÄܱíÏÖ¡£

µ±·¢ÉúÐéÄâµ½ÎïÀíµØÖ·µÄת»»Ê±£¬ÏµÍ³»áÊ×ÏȲéѯ£¨Í¨³£Îª²¢ÐУ©±»³ÆÎª×ª»»ºó±¸»º³åÇø£¨TLB£©µÄ¸ßËÙ»º´æ£¬ÒÔ¼ì²éÊÇ·ñ´æÔÚ¿ÉÓÃÓÚËù·ÃÎÊÐéÄâµØÖ·µÄ¿ÉÓÃÎïÀí·­Ò룬ÒÔ±ÜÃâ½øÐпÉÄÜÕ¼ÓôóÁ¿×ÊÔ´µÄÒ³ÃæÒÆ¶¯²Ù×÷¡£Ã¿¸ö´óÒ³Ãæ·­Òë¶¼ÐèҪʹÓà CPU ÄÚ²¿µÄÒ»¸ö·­Ò뻺³åÇø¡£¸Ã»º³åÇøµÄ´óСͨ³£Òª±È±¾µØÒ³Ãæ´óÈý¸öÊýÁ¿¼¶£»ÕâÄܹ»¼«´óÌá¸ßת»»»º³åÇøµÄЧÂÊ£¬´Ó¶ø¸ÄÉÆÄÚ´æÔÚÆµ·±·ÃÎÊϵÄÐÔÄÜ¡£ÔÚ¾ßÓÐË«²ã TLB µÄÐéÄâ»úµ±ÖУ¬ÕâÒ»¸Ä½øÏÔµÃÓÈÎªÖØÒª¡£

GC ÏÖÔÚÄܹ»ÀûÓà GCLargePages Ñ¡ÏÄܽøÐÐÅäÖ㬴ӶøÑ¡ÔñÔÚ Windows ÉÏ·ÖÅä´óÒ³Ãæ¡£ÀûÓôóÒ³ÃæÄܹ»¼õÉÙ TLB ÒÅ©£¬½ø¶øÔÚ×ÜÌåÉÏÌá¸ßÓ¦ÓóÌÐòµÄÐÔÄÜ£»µ«ÊÇ£¬ÕâÏÄÜÒ²ÓÐ×Å×Ô¼ºµÄ¾ÖÏÞ£¬Ó¦µ±ÈÏÕæ¿¼Á¿¡£Bing.com ¾Í²ÉÓÃÁËÕâÏÄÜ£¬²¢ÇÐʵ»ñµÃÁËÐÔÄÜÌáÉý¡£

.NET Core °æ±¾ API

ÎÒÃÇÔÚ.NET Core 3.0 µ±ÖжÔ.NET Core °æ±¾ API ×ö³ö¸Ä½ø£¬ÏÖÔÚËüÃÇÄܹ»·µ»ØÄúËùÐèÒªµÄ°æ±¾ÐÅÏ¢¡£ÕâЩ±ä¸üËäÈ»Ôڿ͹ÛÉÏ´øÀ´Á˱ãÀû£¬µ«È´´æÔÚ¼¼ÊõÆÆ»µÐÔ£¬¶øÇÒÓпÉÄÜÓ°Ïìµ½ÒÀÀµÏÖÓа汾 API »ñÈ¡¸÷ÀàÐÅÏ¢µÄÓ¦ÓóÌÐò¡£

ÏÖÔÚ£¬´ó¼Ò¿ÉÒÔ·ÃÎÊÒÔϰ汾ÐÅÏ¢£º

C:\git\testapps\versioninfo>dotnet run **.NET Core info** Environment.Version: 3.0.0 RuntimeInformation.FrameworkDescription: .NET Core 3.0.0 CoreCLR Build: 3.0.0 CoreCLR Hash: ac25be694a5385a6a1496db40de932df0689b742 CoreFX Build: 3.0.0 CoreFX Hash: 1bb52e6a3db7f3673a3825f3677b9f27b9af99aa **Environment info** Environment.OSVersion: Microsoft Windows NT 6.2.9200.0 RuntimeInformation.OSDescription: Microsoft Windows 10.0.18970 RuntimeInformation.OSArchitecture: X64 Environment.ProcessorCount: 8

Event Pipe ¸Ä½ø Event Pipe ÏÖÔÚÖ§³Ö¶à¸ö»á»°¡£ÕâÒâζ×Å´ó¼Ò¿ÉÒÔʹÓà EventListener ÔÚ½ø³ÌÄÚʹÓÃʼþ£¬Í¬Ê±»ñµÃ½ø³ÌÍâ event pipe ¿Í»§¶Ë¡£

Ìí¼ÓÁËÐ嵀 Perf Counters£º

GC ÖеÄʱ¼ä°Ù·Ö±È

Gen 0 ¶Ñ´óС

Gen 1 ¶Ñ´óС

Gen 2 ¶Ñ´óС

LOH ¶Ñ´óС

·ÖÅäÂÊ

¼ÓÔØ×é¼þÊýÁ¿

ThreadPool Ïß³ÌÊýÁ¿

Ëø¶¨ÕùÓÃÂÊ

ThreadPool ¹¤×÷ÌõÄ¿¶ÓÁÐ

ThreadPool ÒÑÍê³É¹¤×÷Ïî±ÈÀý

ÏÖÔÚ£¬´ó¼Ò¿ÉÒÔʹÓÃͬÑùµÄ Event Pipe »ù´¡ÉèʩʵÏÖ Profiler ÏÕ±ð¡£

HTTP/2 Ö§³Ö

ÏÖÔÚ£¬ÎÒÃÇÔÚ HttpClinet µ±ÖÐÖ§³Ö HTTP/2¡£²ÉÓÃÐÂЭÒéÊÇΪÁËÂú×ãijЩ API µÄÒªÇó£¬ÀýÈç gRPC Óë Apple Push Notification Service¡£ÎÒÃÇÏ£ÍûδÀ´»áÓиü¶à·þÎñʹÓà HTTP/2 ЭÒé¡£´ËÍ⣬ASP.NET ҲͬÑùÖ§³Ö HTTP/2¡£

±¸×¢£ºÊ×Ñ¡ HTTP ЭÒé°æ±¾½«Í¨¹ý TLS/ALPN ЭÉÌ£¬²¢½öÔÚ·þÎñÆ÷Ñ¡ÔñʹÓà HTTP/2 ʱ²Å¼ÓÒÔʹÓá£

·Ö²ã±àÒë

·Ö²ã±àÒëÊÇ .NET Core 2.1 ÖеÄÒ»Ïî¿ÉÑ¡¹¦ÄÜ£¬¸Ã¹¦ÄÜʹµÃÔËÐÐʱÄܹ»¸üÁé»îµØÊ¹Óü´Ê±£¨JIT£©±àÒëÆ÷£¬´Ó¶øÔÚÆô¶¯Ê±»ñµÃ¸ü¼ÑÐÔÄܲ¢×î´ó³Ì¶ÈÌáÉýÍÌÍÂÁ¿¡£.NET Core 3.0 ÔÚĬÈÏÇé¿öϼ´ÆôÓÃÕâÒ»¹¦ÄÜ¡£È¥Ä꣬ÎÒÃǶԸù¦ÄÜ×ö³öÁËһϵÁиĽø£¬°üÀ¨Õë¶Ô¸÷À๤×÷¸ºÔØ£¨ÀýÈçÍøÕ¾¡¢PowerShell ÒÔ¼° Windows ×ÀÃæÓ¦ÓóÌÐò£©½øÐвâÊÔ¡£ÐÔÄÜȷʵӭÀ´ÏÔÖøÌáÉý£¬Òò´ËÎÒÃǾö¶¨½«Æä×÷ΪĬÈÏÑ¡Ïî¡£

IEEE ¸¡µã¸Ä½ø

ÎÒÃǶԸ¡µã API ½øÐÐÁ˸üУ¬ÒÔ·ûºÏ IEEE 754-2008 ÐÞ¶©°æµÄÒªÇó¡£.NET Core ¸¡µãÏîÄ¿µÄÄ¿±ê£¬ÔÚÓÚ¹«¿ªËùÓС°±ØÒª¡±ÔËË㣬ÒÔÈ·±£ÆäÔÚÐÐΪ²ãÃæ·ûºÏ IEEE Ìá³öµÄ¹æ·¶¡£

½âÎöÓë¸ñʽ»¯ÐÞ¸´£º

ÕýÈ·½âÎö²¢ÉáÈëÈκγ¤¶ÈµÄÊäÈë¡£

ÕýÈ·½âÎö²¢¸ñʽ»¯¸ºÁã¡£

ͨ¹ý½øÐв»Çø·Ö´óСдµÄ¼ì²é£¬²¢ÔÚÊÊÓÃʱÔÊÐíʹÓÿÉѡǰÖà + ÒÔÕýÈ·½âÎöÎÞÏÞÓë NaN¡£

Ð嵀 Math API£º

BitIncrement/BitDecrement ¡ª¡ª¶ÔÓ¦ÓÚ nextUp Óë nextDown IEEE ÔËËã¡£¶þÕ߷ֱ𷵻شóÓÚ»òÕßСÓÚÊäÈëÄÚÈݵÄ×îС¸¡µãÊý¡£ÀýÈ磬Math.BitIncrement£¨0.0£©½«·µ»Ø double.Epsilon¡£

MaxMagnitude/MinMagnitude¡ª¡ª¶ÔÓ¦ÓÚ maxNumMag Óë minNumMag IEEE ÔËË㣬¶þÕ߷ֱ𷵻شóÓÚ»òÕßСÓÚÊäÈëÄÚÈݵÄÖµ¡£ÀýÈ磬Math.MaxMagnitude(2.0 -3.0) ½«·µ»Ø -3.0¡£

ILogB ¡ª¡ª¶ÔÓ¦ÓÚ logB IEEE ÔËË㣬¸ÃÔËË㽫·µ»ØÒ»¸öÕûÊýÖµ£¬ÇÒ¸ÃֵΪÊäÈë²ÎÊýµÄÒÔ 2 Ϊµ×µÄÕûÊý¶ÔÊý¡£Êµ¼ÊÉÏÓë floor(log2(x)) Ïàͬ£¬µ«ÉáÈëÎó²î×îС¡£

ScaleB¡ª¡ª¶ÔÓ¦ÓÚ²ÉÓÃÕûÊýÖµµÄ scaleB IEEE ÔËË㣬ÆäÏ൱ÓÚ·µ»Ø x * pow(2,n) µÄÖµ£¬µ«ÉáÈëÎó²î×îС¡£

Log2¡ª¡ª¶ÔÓ¦ÓÚ log2 IEEE ÔËË㣬·µ»ØÒÔ 2 Ϊµ×µÄ¶ÔÊý£¬ÇÒÉáÈëÎó²î×îС¡£

FusedMultiplyAdd ¡ª¡ª¶ÔÓ¦ÓÚ fma IEEE ÔËË㣬¸ºÔðÖ´ÐлýºÍÈÛ¼ÓÔËËã¡£¾ßÌå¶øÑÔ£¬Æäͨ¹ýÒ»´ÎÔËËãÍê³É£¨xy£©+ z ÔËË㣬ͬʱʹÉáÈëÎó²î×îС¡£ÒÔ FusedMultiplyAdd (1e308, 2.0, -1e308) ΪÀý£¬Æä·µ»ØÖµÎª 1e308¡£³£¹æ£¨1e308 2.0£©-1e308 ½«·µ»Ø double.PositiveInfinity¡£

CopySign ¡ª¡ª¶ÔÓ¦ÓÚ copySign IEEE ÔËË㣬Æä·µ»Ø x µÄÖµ£¬µ«Í¬Ê±´øÓÐ y ·ûºÅ¡£

.NET ƽ̨Ïà¹Ø¸Ä½ø

ÎÒÃÇÌí¼ÓÁËһЩÐ嵀 API£¬ÓÃÒÔ·ÃÎÊÄ³Ð©ÃæÏòÐÔÄÜµÄ CPU Ö¸Á°üÀ¨ SIMD »ò Bit Manipulation Ö¸Á¡£ÕâЩָÁîÄܹ»ÔÚijЩ³¡¾°ÏÂʵÏÖ¾Þ´óµÄÐÔÄÜÌáÉý£¬ÀýÈç¸ü¸ßЧµØ²¢Ðд¦ÀíÊý¾Ý¡£³ýÁ˹«¿ªÕâЩ¿É¹©Ó¦ÓóÌÐòʹÓÃµÄ API Ö®Í⣬ÎÒÃÇ»¹¿ªÊ¼ÀûÓÃÏà¹ØÖ¸Áî¶Ô.NET ¿â½øÐÐÌáËÙ¡£

ÒÔÏ CoreCLR PRs ͨ¹ýʵÏÖ»òÕßʹÓõķ½Ê½Õ¹Ê¾ÁËÒ»²¿·ÖÄÚ²¿º¯Êý£º

ʵÏÖ¼òµ¥ SSE2 Ó²¼þÄÚ²¿º¯Êý

ʵÏÖ SSE Ó²¼þÄÚ²¿º¯Êý

Arm64 Base Ó²¼þÄÚ²¿º¯Êý

ÃæÏò Locate{First|Last}Found{Byte|Char}ʹÓà TZCNT Óë LZCNT

ÏÖ¿ÉÔÚ Linux ÉÏÖ§³Ö TLS 1.3 Óë OpenSSL 1.1.1

.NET Core ÏÖÔÚÄܹ»ÀûÓà OpenSSL 1.1.1 ÖÐµÄ TLS 1.3 Ö§³ÖÄÜÁ¦¡£TLS 1.3 Äܹ»Îª OpenSSL ÍŶÓÌṩ¶àÏîÓÅÊÆ£º

ͨ¹ý¼õÉÙ¿Í»§¶ËÓë·þÎñÆ÷¼äµÄÍù·µ´ÎÊýËõ¶ÌÁ¬½Óʱ³¤¡£

ͨ¹ýÏû³ý¸÷ÖÖ¹ýʱ¼°²»°²È«µÄ¼ÓÃÜËã·¨¡¢Í¬Ê±¼ÓÃܸü¶àÁ¬½ÓÎÕÊÖ£¬ÒÔÌá¸ß°²È«ÐÔ¡£

.NET Core 3. Äܹ»ÀûÓà OpenSSL 1.1.1¡¢OpenSSL 1.1.0 ÒÔ¼° OpenSSL 1.0.2£¨ÒÔ¼°ÄúÄܹ»ÔÚ Linux ϵͳÉÏÕÒµ½ÈκÎ×î¼Ñ°æ±¾£©¡£Èç¹û¿Í»§¶ËÓë·þÎñÆ÷¾ùÖ§³Ö TLS 1.3£¬ÇÒ OpenSSL 1.1.1 ¿ÉÓã¬Ôò SslStream Óë HttpClinet ÀàÐͽ«ÔÚʹÓà SslProtocols.None ʱѡÔñ TLS 1.3£¨ÏµÍ³Ä¬ÈÏЭÒ飩¡£

.NET Core ºóÐø»¹½«ÔÚ Windows Óë MacOS ÉÏÖ§³Ö TLS 1.3¡ª¡ªÔ¤¼ÆÒÔ×Ô¶¯»¯·½Ê½ÊµÏÖ£¬¾´ÇëÆÚ´ý¡£

¼ÓÃÜ

ÎÒÃÇÔö¼ÓÁË¶Ô AES-GCM ÒÔ¼° AES-CCM ¼ÓÃÜ»úÖÆµÄÖ§³Ö£¬ÕâЩ¼ÓÃÜËã·¨½«Í¨¹ý System.Security.Cryptography.AesGcm Óë System.Security.Cryptography.AesCcm ʵÏÖ¡£ÕâЩËã·¨½ÔÊôÓÚ´ø¹ØÁªÊý¾ÝµÄ¼ÓÃÜÈÏÖ¤£¨AEAD£©Ëã·¨£¬Í¬Ê±Ò²ÊÇÊ×Åú±»Ìí¼ÓÖÁ .NET Core µ±ÖеÄÑéÖ¤¼ÓÃÜ£¨AE£©Ëã·¨¡£

.NET Core 3.0 ÏÖÔÚÖ§³Öͨ¹ý±ê×¼¸ñʽµ¼Èë¼°µ¼³ö·Ç¶Ô³Æ¹«Ô¿Óë˽Կ£¬ÇÒÎÞÐèʹÓà X.509 Ö¤Êé¡£

ËùÓÐÃÜÔ¿ÀàÐÍ£¨RSA¡¢DSA¡¢ECDsa¡¢ECDiffieHellman£©¶¼Ö§³Ö X.509 SubjectPublicKeyInfo ¸ñʽµÄ¹«Ô¿£¬ÒÔ¼° PKCS#8 PrivateKeyInfo Óë PKCS#8 EncryptedPrivateKeyInfo ¸ñʽµÄ˽Կ¡£´ËÍ⣬RSA »¹Ö§³Ö PKCS#1 RSAPublicKey Óë PKCS#1 RSAPrivateKey¡£ËùÓе¼³ö·½·¨½Ô²úÉú DER ±àÂëµÄ¶þ½øÖÆÊý¾Ý£¬¶øµ¼Èë·½·¨Ò²»ù±¾Ïàͬ£»Èç¹ûijһÃÜÔ¿ÒÔÎı¾ÓÑºÃµÄ PEM ¸ñʽ´æ´¢£¬Ôòµ÷ÓóÌÐò½«ÐèÒªÏȶÔÄÚÈݽøÐÐ base64 ½âÂ룬¶øºó²ÅÄܽøÐз½·¨µ¼Èë¡£

PKCS#8 Îļþ¿Éͨ¹ý System.Security.Cryptography.Pkcs.Pkcs8PrivateKeyInfo Àà½øÐмì²é¡£

PFX/PKCS#12 Îļþ¿É·Ö±ðͨ¹ý System.Security.Cryptography.Pkcs.Pkcs12Info Óë System.Security.Cryptography.Pkcs.Pkcs12Builder ½øÐмì²éÓëÐ޸ġ£

Ö§³ÖеÄÈÕ±¾ÄêºÅ£¨ÁîºÍ£©

2019 Äê 5 Ô 1 ÈÕ£¬ÈÕ±¾¿ªÊ¼Ê¹ÓÃеÄÄêºÅ¡ª¡ªÁîºÍ¡£Òò´Ë£¬Ö§³ÖÈÕÓïÈÕÀúµÄÈí¼þ£¨ÀýÈç .NET Core£©±ØÐë½øÐиüÐÂÒÔÖ§³ÖÕâÒ»ÐÂÄêºÅ¡£.NET Core Óë .NET Framework ÒѾ­¸üУ¬ÏÖÔÚ¿ÉÒÔÕýÈ·´¦ÀíÐÂÄêºÅϵÄÈÕÎÄÈÕÆÚ¸ñʽÓë½âÎö½á¹û¡£

.NET ÒÀÀµÓÚ²Ù×÷ϵͳ»òÆäËû¸üÐÂÒÔÕýÈ·´¦ÀíÁîºÍÈÕÆÚ¡£Èç¹ûÄú»òÕßÄúµÄ¿Í»§Ê¹Óà Windows ϵͳ£¬ÇëÏÂÔØ Windows °æ±¾µÄ×îиüС£Èç¹ûÄúÔËÐеÄÊÇ MacOS »òÕß Linux£¬ÇëÏÂÔØ²¢°²×°Ö§³ÖÈÕ±¾ÐÂÄêºÅµÄ ICU 64.2 °æ±¾¡£

Assembly Load Context ¸Ä½ø

¹ØÓÚ AssemblyLoadContext µÄ¸Ä½ø£º

ʵÏÖÉÏÏÂÎÄÃüÃû

Ìí¼Ó ALC ö¾Ù¹¦ÄÜ

¶Ô ALC ÄÚ³ÌÐò¼¯½øÐÐö¾ÙµÄ¹¦ÄÜ

ʵÏÖÀàÐ;ßÌ廯¡ª¡ªÖ¼ÔÚ¼ò»¯ÊµÀý»¯£¨¼òµ¥³¡¾°²»ÐèÒª×Ô¶¨ÒåÀàÐÍ£©

ͨ¹ý½« AssemblyDependencyResolyer Óë×Ô¶¨Òå AssemblyLoadContext ¼ÓÒÔ½áºÏ£¬Ó¦ÓóÌÐò½«Äܹ»ÔÚ¼ÓÔØ²å¼þµÄ¹ý³ÌÖУ¬´Ó¸÷¸öÕýȷλÖüÓÔØ¸Ã²å¼þËùÐèÒªµÄÒÀÀµÏÇÒijһ²å¼þµÄÒÀÀµÏî²»»áÓëÆäËû²å¼þµÄÒÀÀµÏî·¢Éú³åÍ»¡£

Assembly ¿ÉÐ¶ÔØÐÔ

Assembly µÄ¿ÉÖÆ²ÃÐÔÊÇ AssemblyLoadContext ÖÐÌṩµÄÒ»Ïîй¦ÄÜ¡£´Ó API µÄ½Ç¶ÈÀ´¿´£¬ÕâÏîй¦ÄܾßÓм«¸ßµÄ͸Ã÷¶È£¬ÇÒÃæÏò²¿·ÖРAPI ¹«¿ª¡£ÆäÔÊÐí¿ª·¢ÈËÔ±¶Ô¼ÓÔØ³ÌÐòµÄÉÏÏÂÎĽøÐÐÐ¶ÔØ£¬´Ó¶øÊÍ·ÅÔ­±¾±»ÊµÀý»¯ÀàÐÍ¡¢¾²Ì¬×Ö¶ÎÒÔ¼°³ÌÐò¼¯±¾ÉíËùÕ¼ÓõÄÄÚ´æ¡£Ó¦ÓóÌÐò¿ÉÒÔͨ¹ýÕâÖÖ»úÖÆÊµÏÖ³ÌÐò¼¯µÄÓÀ¾Ã¼ÓÔØÓëÐ¶ÔØ£¬ÇÒ²»»áÒý·¢ÄÚ´æÐ¹Â©¡£

ÎÒÃÇÏ£ÍûÕâÏîй¦Äܱ»ÓÃÓÚÒÔϳ¡¾°£º

ÐèÒª¶¯Ì¬²å¼þ¼ÓÔØÓëÐ¶ÔØµÄ²å¼þʹÓó¡¾°¡£

¶Ô´úÂëµÄ¶¯Ì¬±àÒë¡¢ÔËÐÐÒÔ¼°Ë¢Ð¡£ÊÊÓÃÓÚÍøÕ¾¡¢½Å±¾ÒýÇæµÈ¡£

¼ÓÔØ³ÌÐò¼¯ÒÔ½øÐÐ×ÔÎÒ¼ì²é£¨ÀýÈç ReflectionOnlyLoad£©£¬µ«ÔÚ´ó¶àÊýÇé¿öÏ MetadataLoadContext ÈÔÈ»ÊǸüºÃµÄÑ¡Ôñ¡£

ÀûÓà MetadataLoadContext ¶ÁÈ¡ Assembly ÔªÊý¾Ý

ÎÒÃÇÌí¼ÓÁË MetadataLoadContext£¬Ï£ÍûÔÚ²»Ó°Ïìµ÷ÓóÌÐòÓòµÄǰÌá϶ÁÈ¡ assembly ÔªÊý¾Ý¡£¸÷ assembly ÕâÒÔÊý¾ÝµÄÐÎʽ¶ÁÈ¡£¬ÆäÖаüÀ¨Ó뵱ǰÔËÐÐʱ»·¾³²»Í¬µÄ¸÷Àà¼Ü¹¹¼°Æ½Ì¨É쵀 assembly¡£MetadataLoadContext Óë ReflectionOnlyLoad ´æÔÚÒ»¶¨½»¼¯£¬µ«ºóÕß½öÊÊÓÃÓÚ .NET Framework¡£

MetdataLoadContext Ŀǰͨ¹ý System.Reflection.MetadataLoadContext Èí¼þ°ü·¢²¼£¬ÆäÊôÓÚ .NET Standard 2.0 Èí¼þ°ü¡£

MetadataLoadContext µÄÊÊÓó¡¾°°üÀ¨Éè¼ÆÊ±¹¦ÄÜ¡¢¹¹½¨Ê±¹¤¾ßÓëÔËÐÐʱµãÁÁ¹¦ÄܵÈÐèÒª½«Ò»×é assembly ×÷ΪÊý¾Ý½øÐмì²é£¬²¢ÔÚÖ´Ðмì²éºóÊÍ·ÅËùÓÐÎļþËøÓëÄÚ´æµÄ³¡¾°¡£

Native Hosting ʾÀý

.NET Core ÍŶӻ¹·¢²¼ÁËÒ»¸ö Native Hosting ʾÀý£¬ÆäÖÐչʾÁËÔÚ±¾»úÓ¦ÓóÌÐòµ±ÖÐÍÐ¹Ü .NET Core µÄÏà¹Ø×î¼Ñʵ¼ù¡£

×÷Ϊ .NET Core 3.0 ÖеÄ×é³É²¿·Ö£¬ÎÒÃÇÏÖÔÚÃæÏò .NET Core ±¾µØÖ÷»ú¹«¿ªÁËÕâÒ»Ô­±¾Ö»Í¨¹ý¹Ù·½ .NET Core Ö÷»úΪ .NET Core ÍйÜÓ¦ÓóÌÐòÌṩµÄ¹¦ÄÜ¡£´ËÏÄÜÖ÷ÒªÓë assembly ¼ÓÔØÏà¹Ø£¬ÀûÓÃÕâÏÄܿɰïÖú´ó¼Ò¸üÇáËɵع¹½¨Äܹ»ÀûÓà .NET Core ÍêÕû¹¦Äܼ¯µÄ±¾µØÖ÷»ú¡£

ÆäËû API ¸Ä½ø

ÎÒÃÇÔøÔÚ .NET Core 2.1 °æ±¾µ±ÖÐ¶Ô Span¡¢Memory ÒÔ¼°ÆäËûÏà¹ØÀàÐÍ×ö³öÓÅ»¯¡£ÏÖÔÚ£¬span construction¡¢ÇÐÆ¬¡¢½âÎöÒÔ¼°¸ñʽ»¯µÈ³£¹æ²Ù×÷µÄÖ´ÐÐЧ¹û½«ÓÐËùÌáÉý¡£´ËÍ⣬String µÈÀàÐÍÒ²µÃµ½ÁËÃ÷ÏԸĽø£¬Äܹ»ÔÚÓë Dictionary< TKey,TValue > ¼°ÆäËû¼¯ºÏ¹²Í¬³äµ±¼üʱӵÓиüºÃµÄÖ´ÐÐЧÂÊ¡£ËùÓиĽø¿ªÏä¼´Óã¬ÎÞÐè¶ÔÄúµÄ´úÂë×ö³öÈκαä¸ü¡£

ÏÂÃæÀ´¿´ÆäËü×îиĽø£º

Brotli ÄÚÖà HttpClient Ö§³ÖÄÜÁ¦

ThreadPool.UnsafeQueueWorkItem(IThreadPoolWorkItem)

Unsafe.Unbox

CancellationToken.Unregister

¸´ÔÓËãÊõÔËËã·û

Socket APIs for TCP ÈÔÈ»ÓÐЧ

StringBuilder.GetChunks

IPEndPoint ½âÎö

RandomNumberGenerator.GetInt32

System.Buffers.SequenceReader

ĬÈÏÇé¿öÏ£¬Ó¦ÓóÌÐòÏÖÔÚ¾ßÓÐÔ­Éú¿ÉÖ´ÐÐÎļþ

.NET Core Ó¦ÓóÌÐòÏÖÔÚÓµÓÐ×Ô¼ºµÄÔ­Éú¿ÉÖ´ÐÐÎļþ¡£¶ÔÓÚÒÀÀµ¿ò¼ÜµÄÓ¦ÓóÌÐò¶øÑÔ£¬ÕâÊÇÒ»ÏîǰËùδÓеÄй¦ÄÜ¡£ÔÚ´Ë֮ǰ£¬Ö»ÓжÀÁ¢Ó¦ÓóÌÐò¾ßÓпÉÖ´ÐÐÎļþ¡£ÕâЩеĿÉÖ´ÐÐÎļþ£¬½«ÔÚЧ¹ûÉÏÓë´ËǰµÄÔ­Éú¿ÉÖ´ÐÐÎļþ±£³ÖÒ»Ö£º

Äú¿ÉÒÔË«»÷¿ÉÖ´ÐÐÎļþÒÔÆô¶¯¶ÔÓ¦Ó¦ÓóÌÐò¡£

Äú¿ÉÒÔÔÚ Windows ÉÏʹÓà myapp.exe£¬»òÕßÔÚ Linux ¼° MacOS ÉÏʹÓÃ./myapp ͨ¹ýÃüÁîÌáʾ·ûÆô¶¯Ó¦ÓóÌÐò¡£

×÷Ϊ build µÄ×é³É²¿·Ö£¬ÐÂÉú³ÉµÄ¿ÉÖ´ÐÐÎļþ½«ÓëÄúµÄ²Ù×÷ϵͳÒÔ¼° CPU ÏàÆ¥Åä¡£ÀýÈ磬Èç¹ûÄúʹÓõÄÊÇ Linux x64 ¼ÆËã»ú£¬ÄÇô¿ÉÖ´ÐÐÎļþ½«½ö¿ÉÔÚ¸ÃÀàÐ͵ļÆËã»úÉÏÔËÐСª¡ªÎÞ·¨ÔÚ Windows ÒÔ¼° Linux ARM ¼ÆËã»úÉÏÔËÐС£ÕâÊÇÒòΪ¿ÉÖ´ÐÐÎļþʹÓñ¾»ú´úÂ루ÀýÈç C++£©¡£Èç¹ûÒª¶¨Î»ÎªÆäËû»úÆ÷ÀàÐÍ£¬ÔòÐèÒªÔÚ·¢²¼Ê±Ê¹ÓöÔÓ¦µÄÔËÐÐʱ²ÎÊý¡£Èç¹ûÔ¸Ò⣬ÄúÒ²¿ÉÒÔ¼ÌÐøÊ¹Óà dotnet ÃüÁîÆô¶¯Ó¦ÓóÌÐò£¬¶ø²»Ê¹ÓÃÔ­Éú¿ÉÖ´ÐÐÎļþ¡£

ÀûÓà ReadyToRun ¾µÏñÓÅ»¯ .NET Core Ó¦ÓÃ

ͨ¹ý½«Ó¦ÓóÌÐò assemblies ±àÒëΪ ReadyToRun£¨R2R£©¸ñʽ£¬¿ÉÒԸĽø .NET Core Ó¦ÓóÌÐòµÄÆô¶¯ËÙ¶È¡£R2R ÊÇÒ»ÖÖÌáǰ£¨AOT£©±àÒë¸ñʽ£¬ÔÚ .NET Core 3.0 °æ±¾ÖÐÒÔ¿ÉÑ¡¹¦ÄܵÄÐÎʽÌṩ¡£

R2R ¶þ½øÖÆÎļþÄܹ»¼õÉÙÓ¦ÓóÌÐò¼ÓÔØÊ± JIT ÐèÒªÍê³ÉµÄ¹¤×÷Á¿£¬´Ó¶øÌá¸ßÆô¶¯ÐÔÄÜ¡£¶þ½øÖÆÎļþµ±Öаüº¬Óë JIT ²úÉúµÄ´úÂëÏàËÆµÄ±¾»ú´úÂ룬Äܹ»Í¨¹ý·Öµ£ JIT µÄ¸ºÔØÑ¹Á¦´øÀ´¸üÀíÏëµÄÆô¶¯ÐÔÄÜ¡£R2R ¶þ½øÖÆÎļþÌå»ý½Ï´ó£¬ÒòΪÆäÖмȰüº¬ÖмäÓïÑÔ£¨IL£©´úÂ루ijЩÇé¿öÏÂÈÔÈ»ÐèÒª´Ë´úÂ룩£¬Í¬Ê±°üº¬Í¬Ò»´úÂëµÄ±¾»ú°æ±¾£¬ÓÃÒÔ¸ÄÉÆÆô¶¯ËÙ¶È¡£

ÒªÆôÓà R2R ±àÒ룺

½« PublishReadyToRun ÊôÐÔÉèÖÃΪ true¡£

ʹÓà RuntimeIdentifie ÏÔʽ²ÎÊý·¢²¼¡£

±¸×¢£ºÔÚ±àÒëÓ¦ÓóÌÐò assemblies ʱ£¬Éú³ÉµÄ±¾»ú´úÂë½«ÌØ¶¨ÓÚµ±Ç°Æ½Ì¨Óë¼Ü¹¹£¨Òò´Ë£¬´ó¼ÒÔÚ·¢²¼Ê±±ØÐëÖ¸¶¨ÓÐЧµÄ RuntimeIdentifier£©¡£

ÒÔÏÂΪ¾ßÌåʾÀý£º

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType> <Target Framework> netcoreapp3.0 </TargetFramework> <PublishReadyToRun> true </PublishReadyToRun> </PropertyGroup> </Project>

ʹÓÃÒÔÏÂÃüÁî½øÐз¢²¼£º

dotnet publish -r win-x64 -c Release

±¸×¢£ºRuntimeIdentifier ¿ÉÉèÖÃΪÆäËû²Ù×÷ϵͳ»òÕßоƬÀàÐÍ£¬Òà¿ÉÔÚÏîÄ¿ÎļþÄÚ½øÐÐÉèÖá£

Assembly Linking

.NET core 3.0 SDK ¸½´øÒ»¿î¹¤¾ß£¬¿Éͨ¹ý·ÖÎö IL ÓëÐÞ¼ôδʹÓÃµÄ assemblies ÒÔ½µµÍÓ¦ÓóÌÐòµÄÌå»ý¡£ÕâÊÇ .NET Core 3.0 ÖеÄÁíÒ»Ïî·¢ÐÐʱ¿ÉÑ¡¹¦ÄÜ¡£

ÔÚ .NET Core µ±ÖУ¬ÎÒÃÇ¿ÉÒÔËæÊ±·¢²¼°üº¬´úÂëÔËÐÐËùÐèµÄÒ»ÇÐÔªËØµÄ×Ô°üº¬Ó¦ÓóÌÐò£¬¶øÎÞÐèÔÚ²¿ÊðÄ¿±êÉϰ²×° .NET¡£ÔÚijЩÇé¿öÏ£¬¸ÃÓ¦ÓýöÐèÒª¿ò¼ÜÖеÄһС²¿·Ö¼´¿ÉÔËÐУ¬Òò´ËÐÞ¼ôµô²»±ØÒªµÄ¿ò¼Ü²¿·ÖÄܹ»ÓÐЧ½µµÍÓ¦ÓóÌÐòÌå»ý¡£ÎÒÃÇÀûÓà IL linker ¶ÔÓ¦ÓóÌÐòµÄ IL ½øÐÐɨÃ裬´Ó¶ø¼ì²â³öÄÄЩ´úÂëÈ·ÓбØÒª£¬¶øºó¶ÔδʹÓõĿò¼Ü¿â½øÐÐÐÞ¼ô¡£ÕâÄܹ»ÏÔÖø½µµÍijЩӦÓóÌÐòµÄÌå»ý¡£Ò»°ãÀ´½²£¬Ð¡Ð͹¤¾ß¿ØÖÆÌ¨ÀàÓ¦ÓóÌÐòµÄÊÝÉíЧ¹û×îΪÃ÷ÏÔ£¬ÒòΪÆäͨ³£Ê¹Óÿò¼ÜÖеĽÏС×Ó¼¯£¬ÇÒµ÷ÕûÄѶȸüµÍ¡£

ҪʹÓà linker ¹¤¾ß£º

½« PublishTrimmed µÄÊôÐÔÉèÖÃΪ true¡£

½« RuntimeIdentifier ×÷ΪÏÔʽ²ÎÊý½øÐз¢²¼¡£

ÒÔÏÂΪÏà¹ØÊ¾Àý£º

<PublishTrimmed>true</PublishTrimmed> </PropertyGroup> </Project>

ʹÓÃÒÔÏÂÃüÁî½øÐз¢²¼£º

dotnet publish -r win-x64 -c Release

±¸×¢£ºRuntimeIdentifier ¿ÉÉèÖÃΪÆäËû²Ù×÷ϵͳ»òÕßоƬÀàÐÍ£¬Òà¿ÉÔÚÏîÄ¿ÎļþÄÚ½øÐÐÉèÖá£

¸ù¾ÝÓ¦ÓóÌÐò´úÂëµÄʵ¼Êµ÷ÓÃÇé¿ö£¬Ëù·¢²¼µÄÊä³ö½á¹û½«°üº¬¿ò¼Ü¿âÖеÄÒ»¸ö×Ó¼¯¡£¶ÔÓÚ×î¼òµ¥µÄ helloworld Ó¦Óã¬linker ¹¤¾ßÄܹ»½«Ó¦ÓóÌÐòÌå»ýËõС 68 MB µ½ 28 MB¡£

ÔÚÐÞ¼ôÖ®ºó£¬ÐèҪʹÓ÷´Éä»òÕßÏà¹Ø¶¯Ì¬¹¦ÄܵÄÓ¦ÓóÌÐò»òÕß¿ò¼Ü£¨°üÀ¨ ASP .NET Core ÒÔ¼° WPF£©Í¨³£ÎÞ·¨Õý³£Ö´ÐУ¬ÕâÊÇÒòΪ linker ÎÞ·¨Ê¶±ðÕâÖÖ¶¯Ì¬ÐÐΪ£¬Òò´ËÒ»°ã²»ÄÜÈ·¶¨·´Éä²Ù×÷ÔÚÔËÐÐʱÖÐÐèÒªµÄ¿ò¼ÜÀàÐÍ¡£ÒªÐÞ¼ôÕâÀàÓ¦ÓóÌÐò£¬´ó¼ÒÐèÒª¸æÖª linker Ïà¹Ø´úÂëµ±ÖÐËùÒÀÀµµÄ¸÷À๤¾ß°ü»ò¿ò¼ÜÒÔ¼°¸÷ÖÖÏà¹ØÐÅÏ¢ÀàÐÍ¡£ÇëÈ·±£ÄúÔÚÐÞ¼ôÖ®ºó¶ÔÓ¦ÓóÌÐò½øÐÐÈ«Ãæ²âÊÔ£¬ÎÒÃÇÒ²ÕýÔÚ .NET 5 µ±ÖжÔÕâÒ»ÌåÑé×ö³ö¸Ä½ø¡£

¹ØÓÚ IL Linker µÄ¸ü¶àϸ½ÚÐÅÏ¢£¬Çë²ÎÔÄ˵Ã÷Îĵµ»òÕß·ÃÎÊ mono/linker ¿â¡£

±¸×¢£ºÔÚ .NET Core ֮ǰµÄ°æ±¾µ±ÖУ¬ILLink Tasks ÒÔÍⲿ NuGet Èí¼þ°üµÄÐÎʽÌṩ£¬ÆäÖаüº¬¶àÖÖÏàͬ¹¦ÄÜ¡£µ«Ïà¹ØÈí¼þ°üÏÖÒѲ»ÔÙÊܵ½Ö§³Ö£¬Çë¸üÐÂÖÁ .NET Core 3.0 SDK ÒÔ»ñÈ¡ÎÒÃÇΪÄú×¼±¸µÄÈ«ÐÂÌåÑé.

Linker Óë R2R ±àÒëÆ÷¿Éͬʱ×÷ÓÃÓÚÒ»¿îÓ¦ÓóÌÐò¡£Ò»°ãÀ´½²£¬Linker Äܹ»Ê¹ÄúµÄÓ¦ÓóÌÐòÌå»ý¸üС£¬¶ø R2R ÔòÄܹ»Ôٴλָ´ÆäÌå»ý£¬²¢ÔÚÐÔÄÜÉÏ´øÀ´ÏÔÖøÌáÉý¡£´ó¼Ò¿ÉÒÔÔÚ¸÷ÖÖÅäÖõ±ÖнøÐвâÊÔ£¬ÒÔÁ˽â¸÷¸öÑ¡Ïî´øÀ´µÄ¾ßÌåÓ°Ïì¡£

·¢²¼µ¥Îļþ¿ÉÖ´ÐÐÎļþ

ÏÖÔÚ£¬´ó¼Ò¿ÉÒÔÀûÓà dotnet publish ÃüÁî·¢²¼µ¥Îļþ¿ÉÖ´ÐÐÎļþÁË¡£ÕâÖÖÐÎʽµÄµ¥Ò» EXE ʵ¼ÊÉÏÊÇÒ»¸ö×Ô½âѹ¿ÉÖ´ÐÐÎļþ£¬ÆäÖÐÒÔ×ÊÔ´ÐÎʽ°üº¬ËùÓÐÒÀÀµÏ°üÀ¨±¾µØÒÀÀµÏ¡£ÔÚÆô¶¯Ê±£¬Ëü»á½«ËùÓÐÒÀÀµÏî¸´ÖÆµ½Ä³¸öÁÙʱĿ¼£¬Í¨¹ý¸ÃĿ¼½øÐмÓÔØ¡£ÒÀÀµÏîÖ»ÐèÒª½âѹһ´Î£¬ºóÐøÆô¶¯½«Ëٶȼ«¿ì£¬²»ÔÙ´æÔÚÈκÎÐÔÄÜËðʧ¡£

´ó¼Ò¿ÉÒÔͨ¹ýÔÚÏîÄ¿ÎļþÖÐÌí¼Ó PublishSingleFile ÊôÐÔ£¬»òÕßÔÚÃüÁîÐÐÖÐÌí¼Óпª¹ØµÄ·½Ê½ÆôÓÃÕâÒ»·¢²¼Ñ¡Ïî¡£

ÒªÉú³É¶ÀÁ¢µÄµ¥ EXE Ó¦ÓóÌÐò£¬ÒÔÏÂʾÀýΪ 64 λ Windows ϵͳϵÄÃüÁ

dotnet publish -r win10-x64 /p: PublishSingleFile=true

±¸×¢£ºRuntimeIdentifier ¿ÉÉèÖÃΪÆäËû²Ù×÷ϵͳ»òÕßоƬÀàÐÍ£¬Òà¿ÉÔÚÏîÄ¿ÎļþÄÚ½øÐÐÉèÖá£

ÈôÐèÁ˽â¸ü¶àϸ½ÚÐÅÏ¢£¬Çë²ÎÔĵ¥ÎļþÀ¦°óÆ÷˵Ã÷Îĵµ¡£

Assembly ÐÞ¼ôÆ÷¡¢Ìáǰ±àÒ루ͨ¹ý crossgen£©ÒÔ¼°µ¥ÎļþÀ¦°ó¹¦ÄܽÔΪ .NET Core 3.0 ÖÐÌṩµÄÈ«ÐÂÑ¡Ï´ó¼Ò¿ÉÒÔ¸ù¾ÝÐèÇó¶ÀÁ¢Ê¹ÓûòÕßÒÔ×éºÏ·½Ê½Ê¹Óá£ÏàÐÅÒ»²¿·ÖÓû§¿ÉÄÜϲ°®Í¨¹ýÌáǰ±àÒëÆ÷ÌṩµÄµ¥ exe ·¢²¼Ñ¡Ï¶ø·ÇÎÒÃÇÔÚ.NET Core 3.0 µ±ÖÐÌṩµÄ×Ô½âѹ¿ÉÖ´ÐÐÎļþ·½·¨¡£.NET 5 ·¢Ðа浱Öн«ÕýʽÌṩÌáǰ±àÒëÆ÷·½·¨¡£

dotnet build ÏÖÔڿɸ´ÖÆÒÀÀµÏî

dotnet build ÏÖÔÚÄܹ»ÔÚ build ²Ù×÷¹ý³Ìµ±ÖУ¬½«Ó¦ÓóÌÐòÖÐµÄ NuGet ÒÀÀµÏî´Ó NuGet »º´æ¸´ÖƵ½ build Êä³öÎļþ¼ÐÄÚ¡£Ôڴ˰汾֮ǰ£¬¸÷ÒÀÀµÏî½öÄÜ×÷Ϊ dotnet publish ÖеÄÒ»²¿·Ö½øÐи´ÖÆ¡£´Ë´Î±ä¸üʹÄúÄܹ»ÀûÓà xcopy ½« build Êä³öÖÁ²»Í¬¼ÆËã»úµ±ÖС£

³ý´ËÖ®Í⣬Äú»¹ÐèÒªµ¥¶À·¢²¼ linking ÒÔ¼° razor page publishing µÈ²Ù×÷¡£

.NET Core ¹¤¾ß£º±¾µØ°²×°

.NET Core ¹¤¾ßÒ²¾­¹ý¸üÐÂÒÔÖ§³Ö±¾µØ°²×°¡£ÕâЩ¹¤¾ß±È .NET Core 2.1 °æ±¾ÖеÄÔ­ÓÐÈ«¾Ö¹¤¾ß¸üÇ¿´ó¡£

±¾µØ°²×°¾ßÓÐÒÔÏÂÌØÐÔ£º

ÏÞÖÆ¹¤¾ßµÄʹÓ÷¶Î§¡£

ʼÖÕʹÓøù¤¾ßµÄÄ³Ò»ÌØ¶¨°æ±¾£¬¸Ã°æ±¾¿ÉÄܲ»Í¬ÓÚÈ«¾Ö°²×°¹¤¾ß»òÕ߯äËü±¾µØ°²×°¹¤¾ß¡£¾ßÌå»ùÓÚ±¾µØ¹¤¾ß manifest ÎļþÖж¨ÒåµÄ°æ±¾¡£

¿ÉʹÓà dotnet ÃüÁîÆô¶¯£¬ÀýÈç dotnet mytool¡£

±¸×¢£ºÇë²ÎÔı¾µØ¹¤¾ßÔçÆÚÔ¤ÀÀ°æËµÃ÷ÎĵµÒÔÁ˽â¸ü¶àϸ½ÚÐÅÏ¢¡£

.NET Core SDK °²×°³ÌÐòÏÖÔÚ½«¾ÍµØÉý¼¶

Windows °æ±¾µÄ .NET Core SDK MSI °²×°³ÌÐò½«Ó­À´¾ÍµØÉý¼¶¡£Õ⽫¼õÉÙ¿ª·¢Õß¼ÆËã»ú¼°Éú²ú¼ÆËã»úÉÏËùÐè°²×°µÄ SDK ÊýÁ¿¡£

´ËÏîÉý¼¶²ßÂÔ½«×¨ÃÅÕë¶Ô .NET Core SDK ¹¦ÄÜ·¶Î§¡£¸÷¹¦ÄÜ·¶Î§ÔÚ°æ±¾ºÅÖÐÒÔ×îºóÈýλÊý×ÖÖеİÙλÌåÏÖ£¬ÀýÈç 3.0.101 Óë 3.0.201 ´ú±íÁ½¸ö²»Í¬µÄ°æ±¾¹¦ÄÜ·¶Î§£¬¶ø 3.0.101 Óë 3.0.199 Ôò´¦ÓÚͬһ°æ±¾¹¦ÄÜ·¶Î§¡£

ÕâÒâζ×ŵ± .NET Core SDK 3.0.101 Õýʽ·¢²¼²¢°²×°Íê±Ïºó£¬.NET Core SDK 3.0.100 ½«±»´Ó¼ÆËã»úÖÐɾ³ý£¨Èç¹û´æÔÚ£©¡£µ± .NET Core SDK 3.0.200 ¿ÉÓò¢°²×°ÔÚͬһ̨¼ÆËã»úÉÏʱ£¬.NET Core SDK 3.0.101 Ôò²»»á±»É¾³ý¡£ÔÚÕâÖÖÇé¿öÏ£¬ÏµÍ³ÈÔ½«Ä¬ÈÏʹÓà .NET Core SDK 3.0.200£¬µ«Èç¹û½«ÆäÅäÖÃΪͨ¹ý global.json ÆðЧ£¬ÔòϵͳÈÔȻʹÓà .NET Core SDK 3.0.101£¨»òÕ߸ü¸ß°æ±¾µÄ.1xx °æ±¾£©¡£

ÕâÖÖ·½·¨Óë global.json µÄÐÐΪ±£³ÖÒ»Ö£¬ÔÊÐíÔÚ¸÷²¹¶¡°æ±¾Ö®¼ä½øÐÐǰ¹ö £¬µ«ÎÞ·¨¿çÔ½ SDK ¹¦ÄÜ·¶Î§¡£Òò´Ë£¬Í¨¹ý SDK °²×°³ÌÐò²¢½øÐÐÉý¼¶£¬¿ÉÈ·±£Ó¦ÓóÌÐò²»»áÒòȱÉÙ SDK ¶ø·¢Éú´íÎó¡£¶ÔÓÚÒѾ­°²×°ÁË Visual Studio ±ØÒª SDK µÄÓû§£¬Æä¹¦ÄÜ·¶Î§Ò²½«Óë Visual Studio °²×°Çé¿ö±£³ÖÒ»Ö¡£

ÈôÐèÁ˽â¸ü¶àϸ½ÚÐÅÏ¢£¬Çë²ÎÔÄ£º

.NET Core °æ±¾¿ØÖÆ

ɾ³ý.NET Core SDK °æ±¾

.NET Core SDK Ìå»ý¸Ä½ø

ÔÚ .NET Core 3.0 µ±ÖУ¬.NET Core SDK µÄÌå»ýÃ÷ÏÔ¸üС¡£Ö÷ÒªÔ­ÒòÔÚÓÚ£¬ÎÒÃÇת¶ø²ÉÓóöÓÚ¸÷ÖÖÄ¿µÄ£¨ÒýÓà assembiles¡¢¿ò¼Ü¡¢Ä£°åµÈ£©µÄרÓá°ÄÚÖðü¡±£¬´Ó¶ø¸Ä±äÁËÎÒÃǹ¹½¨ SDK µÄ·½Ê½¡£ÔÚÒÔÍùµÄ°æ±¾£¨°üÀ¨ .NET Core 2.2£©µ±ÖУ¬ÎÒÃÇÒ»Ö±ÀûÓà NuGet Èí¼þ°ü¹¹½¨ SDK£¬µ«ÆäÖаüº¬´óÁ¿²¢²»ÐèÒªµÄ¹¹¼þ£¬ÇÒ¶Ô´æ´¢¿Õ¼äÔì³ÉÑÏÖØÀË·Ñ¡£

.NET Core 3.0 SDK Ìå»ý£¨À¨ºÅÖÐΪÌå»ý±äÁ¿£©

Linux Óë MacOS °æ±¾µÄÌå»ý±ä»¯×îΪÏÔÖø£¬Ïà±È֮ϠWindows °æ±¾µÄ¸Ä½ø½ÏС£¬ÕâÊÇÒòΪÎÒÃÇÔÚ .NET Core 3.0 µ±ÖÐÌí¼ÓÁË WPF Óë Windows Forms¡£ÁîÈ˾ªÑȵÄÊÇ£¬¾¡¹ÜÐÂÔöÁË WPF Óë Windows Forms£¬°²×°³ÌÐòµÄÌå»ýÈÔÈ»±ÈÔ­ÏÈСÁËÒ»µã¡£

´ó¼ÒÒ²¿ÉÒÔÔÚ .NET Core SDK Docker ¾µÏñµ±ÖиÐÊܵ½ÕâÒ»ÊÝÉíЧ¹û£¨½öÏÞÓÚ x64 Debian Óë Alpine£©¡£

´ó¼Ò¿ÉÒÔÔÚ .NET Core 3.0 SDK Ìå»ý¸Ä½øÎĵµÖÐÁ˽âÎÒÃÇÈçºÎ¼ÆËãÕâЩÎļþµÄ´óС¡£ÕâÀïÌṩÏêϸµÄ˵Ã÷£¬Äú¿ÉÒÔ×ñѭͬÑùµÄ·½·¨ÔÚ×Ô¼ºµÄ»·¾³ÖÐÔËÐвâÊÔ¡£

Docker ·¢²¼¸üÐÂ

΢Èí¸÷ÍŶÓĿǰ¶¼ÔÚÃæÏò΢ÈíÈÝÆ÷×¢²á±í£¨MCR£©·¢²¼ÐµÄÈÝÆ÷¾µÏñ¡£ÕâÒ»±ä»¯Ö÷ÒªÓÐÁ½´óÔ­Òò£º

½«Î¢ÈíÌṩµÄÈÝÆ÷¾µÏñЭͬÖÁ¶à¸ö×¢²á±í£¬°üÀ¨ Docker Hub Óë Red Hat¡£

ÀûÓÃ΢Èí Azure ×÷ΪȫÇò CDN ÒÔ½»¸¶Î¢ÈíÌṩµÄÈÝÆ÷¾µÏñ¡£

ÔÚ.NET ÍŶӣ¬ÎÒÃÇĿǰ½«ËùÓÐ .NET Core ¾µÏñ·¢²¼ÖÁ MCR¡£ÎÒÃÇÔÚ Docker Hub ÉÏά»¤ÓÐ×Ô¼ºµÄÖ÷Ò³£¬²¢´òË㳤ÆÚ±£³ÖÔËÓª¡£ÔÚÁíÒ»·½Ã棬MCR ²¢²»ÌṩÀàËÆµÄÒ³Ãæ£¬µ«¿ÉÒÔͨ¹ý Docker Hub µÈ¹«¹²×¢²á±íΪÓû§ÌṩÓë¾µÏñÓйصÄÐÅÏ¢¡£Microsoft.dotnet ÒÔ¼° microsoft.dotnet-nightly µÈ¾ÉÓдúÂë¿âÁ´½ÓÏÖÔÚ¶¼ÒѾ­Ö¸ÏòеĵØÖ·¡£²»¹ý¾ÉÓÐλÖÃÖеĸ÷¾µÏñÈÔ½«´æÔÚ£¬²»»á±»É¾³ý¡£

ÔÚÖ§³ÖÉúÃüÖÜÆÚÖ®ÄÚ£¬ÎÒÃǽ«¼ÌÐøÎª .NET Core ¸÷¸ö°æ±¾µÄ´úÂë¿âÌṩ¸¡¶¯±ê¼Ç·þÎñ¡£ÀýÈ磬2.1-sdk¡¢2.2-runtime ÒÔ¼° lastest ¾ÍÊôÓÚ´ËÀม¶¯±ê¼Ç¡£Ïñ 2.1.2-sdk ÕâÀà°üº¬Èý¸öÊý×ֵıêÇ©½«²»ÔÙÌṩ£¬ÎÒÃÇÒѾ­ÔÚ°æ±¾ºÅÄÚ¼ÓÒÔÌåÏÖ¡£½ÓÏÂÀ´£¬ÎÒÃǽ«½öͨ¹ý MCR Ö§³Ö .NET Core 3.0 ¾µÏñ¡£

ÀýÈ磬ÏÖÔÚÓÃÓÚÌáÈ¡ 3.0 SDK ¾µÏñµÄÕýÈ·±êÇ©×Ö·û´®Ó¦¸ÃΪ£º

mcr.microsoft.com/dotnet/core/sdk:3.0

Ð嵀 MCR ×Ö·û´®½«ÓÉ docker pull ÒÔ¼° Dockerfile FROM Óï¾ä¹²Í¬Ê¹Óá£

¸ÐÐËȤµÄÅóÓÑ¿ÉÒÔ²ÎÔÄ΢ÈíÈÝÆ÷×¢²á±íÖеÄÏÖÓÐ .NET Core ¾µÏñÒÔÁ˽â¸ü¶àϸ½ÚÐÅÏ¢¡£

SDK Docker ¾µÏñÖаüº¬ PowerShell Core

Ó¦ÉçÇøµÄÒªÇó£¬PowerShell Core ÒѾ­±»Ìí¼ÓÖÁ .NET Core SDK Docker ÈÝÆ÷¾µÏñµ±ÖС£PowerShell Core ÊÇÒ»Ì×¿çÆ½Ì¨£¨Windows¡¢Linux ÒÔ¼° MacOS£©×Ô¶¯»¯ÓëÅäÖù¤¾ß / ¿ò¼Ü£¬Äܹ»Óë´ó¼ÒµÄÏÖÓй¤¾ßÁ¼ºÃЭ×÷£¬²¢Õë¶Ô½á¹¹»¯Êý¾Ý£¨ÀýÈç JSON£©CSV¡¢XML µÈ£©¡¢REST API ÒÔ¼°¶ÔÏóÄ£ÐͽøÐÐÁËÓÅ»¯¡£ÆäÖаüº¬Ò»¸öÃüÁîÐÐ shell¡¢Ò»ÖÖÏà¹Ø½Å±¾ÓïÑÔÒÔ¼°Ò»Ì×ÓÃÓÚ´¦Àí cmdlets µÄ¿ò¼Ü¡£

ÏÖÔÚ£¬´ó¼Ò¿ÉÒÔͨ¹ýÒÔÏ Docker ÃüÁ PowerShell Core ÊÓΪ .NET Core SDK ÈÝÆ÷¾µÏñÖеÄÒ»²¿·Ö£º


docker run --rm mcr.microsoft.com /dotnet/core/sdk:3.0
pwsh -c Write-Host "Hello Powershell"

ĿǰֻÓÐÁ½ÖÖ½« PowerShell ÒýÈë .NET Core SDK ÈÝÆ÷¾µÏñµÄ·½·¨£¬¾ßÌåÈçÏ£º

ÃæÏòÈÎÒâ²Ù×÷ϵͳÀûÓà PowerShell Óï·¨±àд .NET Core Ó¦ÓóÌÐò Dockerfiles¡£

±àдÄܹ»ÇáËÉʵÏÖÈÝÆ÷»¯µÄ .NET Core Ó¦ÓóÌÐò / ¿â¹¹½¨Âß¼­¡£

ÒÔÏÂΪÈÝÆ÷»¯ build£¨´æ´¢¾í¹ÒÔØ£©µÄ PowerShell Æô¶¯Ó﷨ʾÀý£º

docker run -it -v c:\myrepo:/ myrepo -w /myrepo mcr.microsoft.com/dotnet/core/ sdk:3.0 pwsh build.ps1

docker run -it -v c:\myrepo:/ myrepo -w /myrepo mcr.microsoft.com/dotnet/core/sdk:3.0 ./build.ps1

ΪÁËÈõڶþÌõʾÀýÃüÁîÕý³£ÆðЧ£¬ÎÒÃÇÐèÒªÔÚ Linux ÉÏÈ·±£.ps1 Îļþ¾ßÓÐÒÔϸñʽ£¬²¢ÐèÒªÀûÓà Unix£¨LF£©¶ø·Ç Windows£¨CRLF£©×÷ΪÐÐβÒÔÖ´Ðиñʽ»¯£º

#!/usr/bin/env pwsh Write-Host "test"

±¸×¢£ºPowerShell Core ĿǰÒѾ­×÷Ϊ.NET Core 3.0 SDK ÈÝÆ÷¾µÏñµÄÒ»²¿·Ö½øÐз¢²¼£¬¶ø²»ÔÙ¹éÊôÓÚ .NET Core 3.0 SDK¡£

ºìñÈí¼þÖ§³Ö

2015 Äê 4 Ô£¬ÎÒÃÇÐû²¼ .NET Core ½«È«ÃæµÇ½ Red Hat Enterprise Linux¡£Í¨¹ýÓëºìñ·½ÃæµÄ³öÉ«¹¤³ÌºÏ×÷£¬.NET Core 1.0 ÓÚ 2016 Äê 6 ÔÂÒÔ×é¼þµÄÐÎʽ³öÏÖÔÚºìñϵÁÐÈí¼þµ±ÖС£ÁíÍ⣬ÔÚÓëºìñ¹¤³ÌʦÃǵijÖÐø½»Á÷µ±ÖУ¬ÎÒÃÇÒ²Á˽⵽ Linux ÉçÇøÔÚÈí¼þ·¢²¼·½ÃæµÄ·´À¡ÓëÒâ¼û¡£

¹ýÈ¥ËÄÄêÒÔÀ´£¬ºìñ¹«Ë¾ÏȺ󷢲¼Á˶à´ÎÃæÏò .NET Core µÄ¸üÐÂÓë´ó°æ±¾Éý¼¶£¬°üÀ¨ 2.1 Óë 2.2 °æ±¾¡£ÔÚ .NET Core 2.2 °æ±¾µ±ÖУ¬ºìñ¹«Ë¾½«Æä .NET Core ²úÆ·À©Õ¹ÖÁ°üÀ¨ OpenShift ÔÚÄڵĶà¸öƽ̨¡£¶øËæ×Å RHEL 8 µÄ·¢²¼£¬ÎÒÃÇÒ²¸ßÐ˵ؿ´µ½Î¢Èí .NET Core 2.1 ÒÔ¼°¼´½«ÍƳöµÄ 3.0 °æ±¾¶¼±»ÄÉÈëºìñ Application Streams µ±ÖС£

×ܽá

.NET Core 3.0 ÊÇ .NET Core ·¢Õ¹Àú³ÌÖеÄÓÖÒ»ÖØÒªÐ°汾£¬ÆäÖдøÀ´ÁË´óÁ¿¸Ä½ø¡£ÎÒÃǽ¨Òé´ó¼Ò¾¡¿ì×ÅÊÖ²ÉÓÃÐ嵀 .NET Core 3.0¡£Ð°汾ͨ¹ý¶àÖÖ·½Ê½¶Ô .NET Core ×ö³ö¾Þ´ó¸Ä½ø£¬ÀýÈçÏÔÖø½µµÍÁË SDK µÄÌå»ý¡¢¼«´óÌáÉý¶ÔÓڹؼü³¡¾°£¨ÀýÈçÈÝÆ÷ÒÔ¼° Windows ×ÀÃæÓ¦ÓóÌÐò£©µÄÖ§³ÖЧ¹û¡£Êܵ½Æª·ùËùÏÞ£¬ÕâÀïÎÞ·¨Ò»Ò»ÁгöÆäËüСµÄ¸Ä½ø£¬µ«ÏàÐÅËæ×Åʱ¼äµÄÍÆÒÆ£¬´ó¼ÒÒ»¶¨Äܹ»´ÓÕâЩϸ½ÚÔöÇ¿ÖÐÊÜÒæ¡£

×îºó£¬Ï£Íû´ó¼ÒÄܹ»ÔÚ½ÓÏÂÀ´µÄʹÓõ±ÖÐÓëÎÒÃÇ·ÖÏíÌåÑéÓë¸ÐÊÜ¡£Ï£Íû¿ª·¢Õßϲ»¶ .NET Core 3.0£¬ÎÒÃÇÒ²ÈÈÇÐÏ£Íû¸ù¾Ý´ó¼ÒµÄϲºÃ¶Ô²úÆ·½øÐдòÄ¥¡£

   
7104 ´Îä¯ÀÀ       32
 
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
 
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
 
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì