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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NET Core¿çƽ̨µÄ°ÂÃØ[ÏÂÆª]£ºÈ«ÐµIJ¼¾Ö
 
  2293  次浏览      55
 2017-11-22  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcnblogs£¬´ÓʵÀýÑÝʾ½éÉܳÌÐò¼¯£¬ÒÔ¼°¶àƽ̨¸´ÓõÄBCLµÈ¡£Õâ¸öϵÁÐÎÄÕ¿ÉÒÔ°ïÖúÕýÔÚѧϰ.netµÄÄ㣬ÓиüÉîÈëµÄÁ˽⡣

´Ó±¾ÖÊÉϽ²£¬°´ÕÕCLI¹æ·¶Éè¼ÆµÄ.NET´ÓÆä³öÉúµÄÄÇÒ»¿Ì¾Í¾ßÓÐ¿çÆ½Ì¨µÄ»ùÒò£¬ÕâÓëJava±ðÎÞ¶þÖ¡£ÓÉÓÚ²ÉÓÃÁËͳһµÄÖмäÓïÑÔ£¬Î¢ÈíÖ»ÐèÒªÕë¶Ô²»Í¬µÄƽ̨Éè¼Æ²»Í¬µÄÐéÄâ»ú£¨ÔËÐÐʱ£©¾ÍÄÜÃֺϲ»Í¬²Ù×÷ϵͳÓë´¦ÀíÆ÷¼Ü¹¹Ö®¼äµÄ²îÒ죬µ«ÊÇ¡°ÀíÏëºÜ·áÂú£¬ÏÖʵºÜ¹Ç¸Ð¡±¡£ÔÚ¹ýȥʮ¶àÄêÖУ¬Î¢Èí½«.NETÒýÈëµ½Á˸÷¸ö²»Í¬µÄÓ¦ÓÃÁìÓò£¬±íÃæÉÏ¿´ÆðÀ´ËƺõÐÀÐÀÏòÈÙ£¬µ«ÊÇÓÉÓÚ²ÉÓÃÍêÈ«¶ÀÁ¢µÄ¶àÄ¿±ê¿ò¼ÜµÄÉè¼ÆË¼Â·£¬µ¼ÖÂÕë¶Ô¶àÄ¿±ê¿ò¼ÜµÄ´úÂëÆ½Ì¨Ö»ÄÜͨ¹ýPCL£¨²Î¿¼¡¶.NET Core¿çƽ̨µÄ°ÂÃØ[ÖÐÆª]£º¸´ÓÃÖ®éä¡·£©ÕâÖÖ¡°Í×Э¡±µÄ·½Ê½À´½â¾ö¡£Èç¹ûÒÀÈ»°´ÕÕÕâÌõµÀ·×ßÏÂÈ¥£¬.NETµÄ´¥½ÇÑÓÉìµÃÔ½¹ã£¬¼ÏËø½«Ô½À´Ô½¶à£¬ËùÒÔ.NET ÒѾ­µ½Á˲»µÃ²»×ö³ö³¹µ×¸Ä±äµÄʱ¿ÌÁË¡£

Ò»¡¢¿çƽ̨µÄ.NET Core

×ÛÉÏËùÊö£¬ÒªÕæÕýʵÏÖ.NET µÄ¿çƽ̨ΰҵ£¬Ö÷ÒªÐèÒª½â¾öÁ½¸öÎÊÌ⣬һÊÇÕë¶Ô²»Í¬µÄƽ̨Éè¼ÆÏàÓ¦µÄÔËÐÐʱΪÖмäÓïÑÔCILÌṩһ¸öÒ»ÖÂÐÔµÄÖ´Ðл·¾³£¬¶øÊÇÌṩͳһµÄBCLÒÔ³¹µ×½â¾ö´úÂ븴ÓõÄÄÑÌâ¡£¶ÔÓÚÕæÕý¿çƽ̨µÄ.NET CoreÀ´Ëµ£¬Î¢Èí²»½öΪËüÉè¼ÆÁËÕë¶Ô²»Í¬Æ½Ì¨±»³ÉΪCoreCLRµÄÔËÐÐʱ£¬Í¬Ê±»¹ÖØÐÂÉè¼ÆÁËÒ»Ì×±»³ÆÎªCoreFXµÄBCL¡£

ÈçÉÏͼËùʾ£¬NET CoreĿǰ֧³ÖµÄAppModelÖ÷ÒªÓÐÁ½ÖÖ£¬ÆäÖÐASP.NET CoreÓÃÓÚ¿ª·¢·þÎñÆ÷WebÓ¦ÓúͷþÎñ£¬¶øUWP£¨Universal Windows Platform£©ÔòÓÃÓÚ¿ª·¢Äܹ»ÔÚ¸÷ÖÖ¿Í»§¶ËÉ豸£¨Mobile¡¢PC¡¢ Xbox¡¢Devices + IOT¡¢HoloLens ºÍSurface HubµÈ£©ÉÏÒÔ×ÔÊÊÓ¦·½Ê½ÔËÐеÄWindows 10Ó¦Óá£CoreFXÊǾ­¹ýÍêÈ«ÖØÐ´µÄBCL£¬³ýÁË×ÔÉí¾Í¾ßÓÐ¿çÆ½Ì¨Ö´ÐеÄÄÜÁ¦Ö®Í⣬ÆäÌṩµÄAPIÒ²²»ÔÙÊÇͳһ¶¨ÒåÔÚÉÙÊý¼¸¸öµ¥Ò»µÄ³ÌÐò¼¯ÖУ¬¶øÊǾ­¹ýÓÐЧ·Ö×éÖ®ºó±»¶¨ÒåÔÚ¸÷×Ô¶ÀÁ¢µÄÄ£¿éÖС£ÕâЩģ¿é¶ÔÓ¦×ÅÒ»¸öµ¥Ò»µÄ³ÌÐò¼¯£¬²¢×îÖÕÓɶÔÓ¦µÄNuGet°üÀ´·Ö·¢¡£ÖÁÓڵײãµÄÐéÄâ»ú£¬Î¢ÈíÔòΪÖ÷Á÷µÄ²Ù×÷ϵͳÀàÐÍ£¨Windows¡¢Mac OS XºÍLinux£©ºÍ´¦ÀíÆ÷¼Ü¹¹£¨x86¡¢x64ºÍARM£©Éè¼ÆÁËÕë¶ÔÐÔµÄÔËÐÐʱ£¬±»³ÆÎªCoreCLR¡£

×÷ΪÔËÐÐʱµÄCoreCLRºÍÌṩBCLµÄCoreFXÊÇ.NET CoreÁ½¸ùÖØÒªµÄ»ùʯ£¬µ«ÊǾͿª·¢³É±¾À´¿´£¬Î¢ÈíÔÚºóÕßͶÈëµÄ¾«Á¦ÊÇǰÕßÎÞ·¨±ÈÄâµÄ¡£ÎÒÃÇÖªµÀ.NET Core×Ôµ®Éúµ½ÏÖÔÚÒѾ­ÓкÃЩÄêÁË£¬Ä¿Ç°µÄ°æ±¾»¹Ö»Êǵ½ÁË2.0£¬´Ó·¢²¼½ø¶ÈÉÏÏÔµÃÉÔÏÔ»ºÂý£¬ÆäÖÐÒ»¸öÖ÷ÒªµÄÔ­ÒòÊÇ£ºÖØÐ´CoreFXÌṩµÄ»ù´¡APIȷʵÊÇÒ»¼þ·±ËöºÄʱµÄ¹¤³Ì£¬¶øÇÒÕâÏ³ÌԶδ½áÊø¡£ÎªÁ˶ÔCoreFXÌṩµÄBCLÓÐÒ»¸ö´óÖµÄÁ˽⣬ÎÒÃÇ¿´¿´ÕâЩ³£ÓõĻù´¡API¾¿¾¹¶¨ÒåÔÚÄÄЩÃüÃû¿Õ¼äÏ¡£

System.Collections£º¶¨ÒåÁËÎÒÃdz£Óõļ¯ºÏÀàÐÍ¡£

System.Console£ºÌṩAPIÍê³É»ù±¾µÄ¿ØÖÆÌ¨²Ù×÷¡£

System.Data£ºÌṩÓÃÓÚ·ÃÎÊÊý¾Ý¿âµÄAPI£¬Ï൱ÓÚÔ­À´µÄADO.NET¡£

System.Diagnostics£ºÌṩ»ù±¾µÄÕï¶Ï¡¢µ÷ÊÔºÍ×·×ÙµÄAPI¡£

System.DirectoryServices£ºÌṩ»ùÓÚAD£¨Active Directory£©¹ÜÀíµÄAPI¡£

System.Drawing£ºÌṩGDIÏà¹ØµÄAPI¡£

System.Globalization£ºÌṩAPIʵÏÖ¶àÓïÑÔÒÔ¼°È«Çò»¯Ö§³Ö¡£

System.IO£ºÌṩÕë¶ÔÎļþÊäÈëÊä³öÏà¹ØµÄAPI¡£

System.Net£ºÌṩÓëÍøÂçͨÐÅÏà¹ØµÄAPI¡£

System.Reflection£ºÌṩAPIÒÔʵÏÖÓë·´ÉäÏà¹ØµÄ²Ù×÷¡£

System.Runtime£ºÌṩÓëÔËÐÐʱÏà¹ØµÄһЩ»ù´¡ÀàÐÍ¡£

System.Security£ºÌṩÓëÊý¾ÝÇ©ÃûºÍ¼Ó½âÃÜÏà¹ØµÄAPI¡£

System.Text£ºÌṩÕë¶Ô×Ö·û´®/Îı¾±àÂëÓë½âÂëÏà¹ØµÄAPI¡£

System.Threading£ºÌṩÓÃÓÚ¹ÜÀíÏ̵߳ÄAPI¡£

System.Xml£ºÌṩAPIÓÃÒÔ²Ù×÷XML½á¹¹µÄÊý¾Ý¡£

ÎÒÃÇÖªµÀ¶ÔÓÚ´«Í³µÄ.NET FrameworkÀ´Ëµ£¬³ÐÔØBCLµÄAPI¼¸ºõ¶¼¶¨ÒåÔÚmscorlib.dllÕâ¸ö³ÌÐò¼¯ÖУ¬ÕâЩAPI²¢²»ÊÇÈ«²¿¶¼×ªÒƵ½×é³ÉCoreFXµÄÖÚ¶à³ÌÐò¼¯ÖУ¬ÄÇЩÓëÔËÐÐʱ£¨CoreCLR£©¾ßÓнôÃܹØÏµµÄµ×²ãAPI±»¶¨Òåµ½Ò»¸ö½Ð×öSystem.Private.CoreLib.dllµÄ³ÌÐò¼¯ÖУ¬ËùÒÔÏÂͼ·´Ó³ÁËÕæÕýµÄ.NET Core²ã´Î½á¹¹¡£ÎÒÃÇÔÚ±à³Ì¹ý³ÌÖÐʹÓõĻù´¡Êý¾ÝÀàÐÍ»ù±¾É϶¼¶¨ÒåÔÚÕâ¸ö³ÌÐò¼¯ÖУ¬ËùÒÔĿǰÕâ¸ö³ÌÐò¼¯µÄ³ß´çÒѾ­³¬¹ýÁË10M¡£ÓÉÓڸóÌÐò¼¯ÌṩµÄAPIÓëÔËÐÐʱ¹ØÁª½ÏΪ½ôÃÜ£¬½ÏÖ®CoreFXÌṩµÄAPI£¬ÕâЩ»ù´¡API¾ßÓнϸߵÄÎȶ¨ÐÔ£¬ËùÒÔËüÊÇËæ×ÅCoreCLRÒ»Æð·¢²¼µÄ¡£

ËäÈ»ÎÒÃDZà³Ì¹ý³ÌÖÐʹÓõ½µÄ¾ø´ó²¿·Ö»ù´¡ÀàÐͶ¼¶¨ÒåÔÚSystem.Private.CoreLib.dll³ÌÐò¼¯ÖУ¬µ«ÊÇÕâÈ´ÊÇÒ»¸ö¡°Ë½ÓС±µÄ³ÌÐò¼¯£¬ÎÒÃÇ¿ÉÒÔ´ÓÆäÃüÃû¿´³öÕâÒ»µã¡£ÎÒÃǽ«System.Private.CoreLib.dll³ÆÎªÒ»¸ö˽ÓгÌÐò¼¯£¬²¢²»ÊÇ˵¶¨ÒåÆäÖеͼÊÇһЩ˽ÓÐÀàÐÍ£¬¶øÊÇÒòΪÎÒÃÇÔÚ±à³ÌµÄ¹ý³Ì²»»áÕæÕýÒýÓÃÕâ¸ö³ÌÐò¼¯£¬ÕâÓë.NET FrameworkϵÄmscorlib.dllÊDz»Ò»ÑùµÄ¡£²»½öÈç´Ë£¬µ±ÎÒÃDZàдµÄ.NET Core´úÂë±»±àÒëµÄʱºò£¬±àÒëÆ÷Ò²²»»áÁ´½Óµ½Õâ¸ö³ÌÐò¼¯ÉÏ£¬Ò²¾ÍÊÇ˵±àÒëºóÉú³ÉµÄ³ÌÐò¼¯ÖÐͬÑùҲûÓÐÕë¶Ô¸Ã³ÌÐò¼¯ÒýÓõÄÔªÊý¾Ý¡£µ«Êǵ±ÎÒÃǵÄÓ¦Óñ»ÕæÕýÖ´ÐеÄʱºò£¬ËùÓÐÒýÓõĻù´¡ÀàÐÍÈ«²¿»á×Ô¶¯ ¡°×ªÒÆ¡± µ½Õâ¸ö³ÌÐò¼¯ÖС£ÖÁÓÚÈçºÎʵÏÖÔËÐйý³ÌÖеÄÀàÐÍ×ªÒÆ£¬Æäʵ¾ÍÊÇÀûÓÃÁËÎÒÃÇÉÏÃæ½éÉܵÄType Forwarding¼¼Êõ¡£

ʵÀýÑÝʾ£ºÕë¶ÔSystem.Private.CoreLib.dll³ÌÐò¼¯µÄÀàÐÍ×ªÒÆ

¶ÔÉÏÃæ½éÉܵÄÕë¶ÔSystem.Private.CoreLib.dll³ÌÐò¼¯µÄÀàÐÍ×ªÒÆ£¬¿ÉÄܺܶàÈË»¹ÊÇÄÑÒÔÀí½â£¬ÎªÁËÈôó¼Ò¶ÔÕâ¸öÎÊÌâ¾ßÓг¹µ×µÄÈÏʶ£¬ÎÒÃDz»·ÁÀ´×öÒ»¸ö¼òµ¥µÄʵÀýÑÝʾ¡£ÎÒÃÇÀûÓÃVisual Studio´´½¨Ò»¸ö.NET Core¿ØÖÆÌ¨Ó¦Ó㬲¢ÔÚ×÷Ϊ³ÌÐòÈë¿ÚµÄMain·½·¨ÖбàдÈçϼ¸ÐдúÂ룬ËüÃǻὫÎÒÃdz£ÓõöÊý¾ÝÀàÐÍ£¨System.String¡¢System.Int32ºÍSystem.Boolean£©ËùÔڵijÌÐò¼¯Ãû³Æ´òÓ¡ÔÚ¿ØÖÆÌ¨ÉÏ¡£

1: class Program
2: {
3: static void Main()
4: {
5: Console.WriteLine (typeof(string).Assembly.FullName);
6: Console.WriteLine (typeof(int).Assembly.FullName);
7: Console.WriteLine (typeof(bool).Assembly.FullName);
8: }
9: }

¸ù¾ÝÎÒÃÇÉÏÃæµÄ·ÖÎö£¬³ÌÐòÔËÐйý³ÌÖÐʹÓõ½µÄÕâЩ»ù´¡ÀàÐÍÈ«²¿À´Ô´ÓÚSystem.Private.CoreLib.dllÕâ¸ö³ÌÐò¼¯ÖУ¬¹ØÓÚÕâÒ»µãÔÚÈçÏÂͼËùʾµÄÊä³ö½á¹ûÖеõ½ÁË֤ʵ¡£ÎÒÃÇͨ¹ýͼ2-24ËùʾµÄÊä³ö½á¹û£¬ÎÒÃDz»½ö½öÖªµÀÁËÕâ¸öºËÐijÌÐò¼¯µÄÃû³Æ£¬»¹ÖªµÀÁ˸óÌÐò¼¯Ä¿Ç°µÄ°æ±¾£¨4.0.0.0£©£»

ÎÒÃÇ˵ӦÓñàÒëºóÉú³ÉµÄ³ÌÐò¼¯²¢²»»á¾ßÓÐÕë¶ÔSystem.Private.CoreLib.dll³ÌÐò¼¯ÒýÓõÄÔªÊý¾Ý£¬ÎªÁËÖ¤Ã÷ÕâÒ»µã£¬ÎÒÃÇÖ»ÐèÒªÀûÓÃWindows SDK£¨ÔÚĿ¼¡°%ProgramFiles (x86)%Microsoft SDKs \Windows \{version}\Bin¡±Ï£©ÌṩµÄ·´±àÒ빤¾ßildasm.exe¾Í¿ÉÒÔÁË¡£ÀûÓÃildasm.exe´ò¿ªÕâ¸ö¿ØÖÆÌ¨Ó¦ÓñàÒëºóÉú³ÉµÄ³ÌÐò¼¯Ö®ºó£¬ÎÒÃǻᷢÏÖËü¾ßÓÐÈçÏÂÕâÁ½¸ö³ÌÐò¼¯µÄÓ¦Óá£

1: .assembly extern System.Runtime
2: {
3: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
4: .ver 4:2:0:0
5: }
6: .assembly extern System.Console
7: {
8: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
9: .ver 4:1:0:0
10: }

ʵ¼ÊÉÏÎÒÃǵijÌÐòֻɿ¼°µ½ËĸöÀàÐÍ£¬¼´Ò»¸öConsoleÀàÐͺÍÈý¸ö»ù´¡Êý¾ÝÀàÐÍ£¨String¡¢Int32ºÍBoolean£©£¬¶ø³ÌÐò¼¯²ãÃæÔòÖ»ÓÐÕë¶ÔSystem.RuntimeºÍSystem.Console³ÌÐò¼¯µÄÒýÓã¬ÄÇôºÁÎÞÒÉÎÊ£¬ºóÃæÕâÈý¸öÊý¾ÝÀàÐͿ϶¨ÓëSystem.Runtime³ÌÐò¼¯Óйأ¬ÄÇô¸Ã³ÌÐò¼¯Õë¶ÔÕâÈý¸öÊý¾ÝÀàÐ;ßÓÐÔõÑùµÄ¶¨ÒåÄØ£¿ÎªÁ˵õ½´ð°¸£¬ÎÒÃÇÏȵÃÖªµÀÕâ¸ö³ÌÐò¼¯¾¿¾¹±»±£´æÔÚÄÄÀï¡£ÎÒÃÇÖªµÀ¡°%ProgramFiles%dotnet\¡±ÊÇ.NET CoreµÄÓ¦ÓøùĿ¼£¬¶øÕâ¸öSystem.Runtime.dll×÷Ϊ¡°¹²Ïí¡±³ÌÐò¼¯±»±£´æÔÚ×ÓĿ¼¡°\shared\Microsoft. NETCore.App\2.0.0¡±ÏÂÃæ£¬Õâ¸öĿ¼ÏÂÃæ»¹±£´æ×źܶàÆäËûµÄ¹²Ïí³ÌÐò¼¯¡£

ÎÒÃÇÒÀÈ»ÀûÓ÷´±àÒ빤¾ßildasm.exe²é¿´System.Runtime.dll³ÌÐò¼¯Çåµ¥ÎļþµÄÔªÊý¾Ý¶¨Òå¡£ÎÒÃǻᷢÏÖÕû¸ö³ÌÐò¼¯³ýÁ˶¨ÒåÉÙÊý¼¸¸öºËÐÄÀàÐÍ£¨±ÈÈçÁ½¸öÖØÒªµÄίÍÐÀàÐÍActionºÍFunc¾Í¶¨ÒåÔÚÕâ¸ö³ÌÐò¼¯ÖУ©£¬ËüµÄ×÷ÓþÍÊǽ«ËùÓлù´¡µÄÀàÐͲÉÓÃType ForwardingµÄ·½Ê½×ªÒƵ½System.Private.CoreLib.dll³ÌÐò¼¯ÖУ¬ÏÂÃæµÄ´úÂëÆ¬¶ÎΪÄãչʾÁËÕë¶ÔÎÒÃdzÌÐòʹÓõÄÈý¸ö»ù´¡Êý¾ÝÀàÐÍ×ªÒÆµÄÏà¹Ø¶¨Òå¡£

1: .assembly extern System.Private.CoreLib
2: {
3: .publickeytoken = (7C EC 85 D7 BE A7 79 8E )
4: .ver 4:0:0:0
5: }
6: .class extern forwarder System.String
7: {
8: .assembly extern System.Private.CoreLib
9: }
10: .class extern forwarder System.Int32
11: {
12: .assembly extern System.Private.CoreLib
13: }
14: .class extern forwarder System.Boolean
15: {
16: .assembly extern System.Private.CoreLib
17: }

ÎÒÃÇÑÝʾʵÀýÌåÏֵijÌÐò¼¯Ö±½ÓµÄÒýÓùØÏµ£¬ÒÔ¼°ÈçÉÏ´úÂëÆ¬¶ÎÌåÏÖµÄÏà¹Ø»ù´¡ÀàÐÍ£¨System.String¡¢System.Int32ºÍSystem.Boolean£©µÄ×ªÒÆ·½Ïò»ù±¾ÌåÏÖÔÚÈçÏÂͼËùʾµÄ¹ØÏµÍ¼ÖС£

¸´ÓÃ.NET Framework³ÌÐò¼¯

ÎÒÃǽ«ÉÏÊöÕâÖÖÀûÓÃType Forwarding·½Ê½ÊµÏÖ¿ç³ÌÐò¼¯ÀàÐÍ×ªÒÆµÄ¼¼Êõ³ÉΪ¡°µæÆ¬£¨Shim£©¡±£¬ÕâÊÇʵÏÖ³ÌÐò¼¯¿çƽ̨¸´ÓõÄÖØÒªÊֶΡ£³ýÁËSystem.Runtime.dll£¬.NET Core»¹ÌṩÁËÆäËûһЩÆäËûµæÆ¬³ÌÐò¼¯£¬ÕýÊÇÔ´ÓÚÕâÕâЩµæÆ¬³ÌÐò¼¯µÄ´æÔÚ£¬ÎÒÃÇ¿ÉÒÔ½«ÔÚ.NET Framework»·¾³Ï±àÒëµÄ³ÌÐò¼¯ÔÚ.NET CoreÓ¦ÓÃÖÐʹÓá£ÎªÁËÈöÁÕßÅóÓÑÃǶԴËÓÐÉî¿ÌµÄÈÏʶ£¬ÎÒÃÇÕÕÀýÀ´×öÒ»¸ö¼òµ¥µÄʵÀýÑÝʾ¡£

ÎÒÃÇÀûÓÃVisual Studio´´½¨Ò»¸ö¿ÕµÄ½â¾ö·½°¸£¬²¢Ìí¼ÓÈçÏÂÈý¸öÏîÄ¿£¨NetApp¡¢NetCoreApp¡¢NetLib£©£¬ÆäÖÐNetAppºÍNetCoreApp·Ö±ðÊÇÕë¶Ô.NET Framework£¨4.7£©ºÍ.NET Core£¨2.0£©µÄ¿ØÖÆÌ¨³ÌÐò£¬¶øNetLibÔòÊÇÕë¶Ô.NET FrameworkµÄÀà¿âÏîÄ¿£¬¸ÃÏîÄ¿¶¨ÒåµÄAPI½«ÔÚNetAppºÍNetCoreApp±»µ÷Óá£

ÎÒÃÇÔÚNetLibÏîÄ¿Öж¨ÒåÁËÒ»¸öUtils¹¤¾ßÀ࣬²¢ÔÚÆäÖж¨ÒåÁËÒ»¸öPrintAssemblyNames·½·¨¡£ÈçÏÂÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬ÎÒÃÇÔÚÕâ¸ö·½·¨ÖдòÓ¡³öÈý¸ö³£ÓõÄÀàÐÍ£¨Task¡¢UriºÍXmlWriter£©ËùÔڵijÌÐò¼¯µÄÃû³Æ¡£Í¨¹ýÔÚ²»Í¬ÀàÐÍ£¨.NET FrameworkºÍ.NET Core£©µÄÓ¦ÓÃÖе÷ÓÃÕâ¸ö·½·¨£¬ÎÒÃǾͿÉÒÔÈ·¶¨ËüÃÇÔÚÔËÐÐʱ¾¿¾¹ÊÇ´ÓÄǸö³ÌÐò¼¯ÖмÓÔØµÄ¡£ÎÒÃÇ·Ö±ðÔÚNetAppºÍNetCoreAppÕâÁ½¸ö²»Í¬ÀàÐ͵ĿØÖÆÌ¨³ÌÐòÖе÷ÓÃÁËÕâ¸ö·½·¨¡£

NetLib:

1: public class Utils
2: {
3: public static void PrintAssemblyNames()
4: {
5: Console.WriteLine (typeof(Task).Assembly.FullName);
6: Console.WriteLine (typeof(Uri).Assembly.FullName);
7: Console.WriteLine (typeof(XmlWriter).Assembly.FullName);
8: }
9: }

NetApp:

1: class Program
2: {
3: static void Main()
4: {
5: Console.WriteLine (".NET Framework 4.7");
6: Utils.PrintAssemblyNames();
7: }
8: }

NetCoreApp:

1: class Program
2: {
3: static void Main()
4: {
5: Console.WriteLine(".NET Core 2.0");
6: Utils.PrintAssemblyNames();
7: }
8: }

Ö±½ÓÔËÐÐNetAppºÍNetCoreAppÕâÁ½¸ö¿ØÖÆÌ¨³ÌÐòºó£¬ÎÒÃǻᷢÏÖ²»Í¬µÄÊä³ö½á¹û¡£ÈçÏÂͼËùʾ£¬¶ÔÓÚÎÒÃÇÖ¸¶¨µÄÈý¸öÀàÐÍ£¨System.Threading.Tasks.Task¡¢System.UriºÍ System.Xml.XmlWriter£©£¬·Ö±ðÔÚ.NET FrameworkºÍ.NET Core»·¾³Ï³ÐÔØËüÃǵijÌÐò¼¯ÊDz»Í¬µÄ¡£¾ßÌåÀ´Ëµ£¬.NET Framework»·¾³ÏµÄÕâÈý¸öÀàÐÍ·Ö±ð¶¨ÒåÔÚmscorlib.dll¡¢System.dllºÍSystem.Xml.dllÖУ»µ±Çл»µ½.NET Core»·¾³Ïºó£¬ÔËÐÐʱÔò»á´ÓÈý¸ö˽ÓеijÌÐò¼¯System.Private.CoreLib.dll¡¢System.Private.Uri.dllºÍSystem.Private.Xml.dllÖмÓÔØÕâÈý¸öÀàÐÍ¡£

ÓÉÓÚNetAppºÍNetCoreAppÕâÁ½¸ö¿ØÖÆÌ¨Ó¦ÓÃʹÓõͼÊÇͬһ¸öÕë¶Ô.NET Framework±àÒëµÄ³ÌÐò¼¯NetLib.dll£¬ËùÒÔÎÒÃÇÏÈÀûÓ÷´±àÒ빤¾ßildasm.exe²é¿´Ò»ÏÂËü¾ßÓÐÔõÑùµÄ³ÌÐò¼¯ÒýÓá£ÈçÏÂÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬³ÌÐò¼¯NetLib.dllÒýÓõijÌÐò¼¯Óë¿ØÖÆÌ¨Ó¦ÓÃNetAppµÄÊä³ö½á¹ûÊÇÒ»Öµġ£

1: .assembly extern mscorlib
2: {
3: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
4: .ver 4:0:0:0
5: }
6: .assembly extern System
7: {
8: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
9: .ver 4:0:0:0
10: }
11: .assembly extern System.Xml
12: {
13: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
14: .ver 4:0:0:0
15: }

ÄÇôÎÒÃǵĺËÐÄÎÊÌâ±ä³ÉÁË£ºTask¡¢UriºÍXmlWriterÕâÈý¸öÀàÐÍÔÚ.NET CoreµÄÔËÐл·¾³ÏÂÊÇÈçºÎ×ªÒÆµ½ÆäËû³ÌÐò¼¯Öеġ£Òª»Ø´ðÕâ¸öÎÊÌ⣬ÎÒÃÇÖ»ÐèÒªÀûÓÃildasm.exe²é¿´mscorlib.dll¡¢System.dllºÍSystem.Xml.dll·´±àÒëÕâÈý¸ö³ÌÐò¼¯¾Í¿ÉÒÔÁË¡£ÕâÈý¸ö³ÌÐò¼¯Í¬Ñù´æÔÚÓÚ¡°%ProgramFiles%dotnet \\shared \Microsoft.NETCore.App\2.0.0¡±Ä¿Â¼Ï£¬Í¨¹ý·´±àÒëÓëËüÃÇÏà¹ØµÄ³ÌÐò¼¯£¬ÎÒÃǵõ½ÈçÏÂËùʾµÄÏà¹ØÔªÊý¾Ý¡£

mscorlib.dll

1: .assembly extern System.Private.CoreLib
2: {
3: .publickeytoken = (7C EC 85 D7 BE A7 79 8E )
4: .ver 4:0:0:0
5: }
6: .class extern forwarder System.Threading.Tasks.Task
7: {
8: .assembly extern System.Private.CoreLib
9: }

System.dll

1: .assembly extern System.Private.Uri
2: {
3: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
4: .ver 4:0:4:0
5: }
6: .class extern forwarder System.Uri
7: {
8: .assembly extern System.Private.Uri
9: }

System.Xml.dll

1: .assembly extern System.Xml.ReaderWriter
2: {
3: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
4: .ver 0:0:0:0
5: }
6: .class extern forwarder System.Xml.XmlWriter
7: {
8: .assembly extern System.Xml.ReaderWriter
9: }

System.Xml.ReaderWriter.dll

1: .assembly extern System.Private.Xml
2: {
3: .publickeytoken = (CC 7B 13 FF CD 2D DD 51 )
4: .ver 4:0:0:0
5: }
6: .class extern forwarder System.Xml.XmlWriter
7: {
8: .assembly extern System.Private.Xml
9: }

ÈçÉÏÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬Õë¶ÔTask¡¢UriºÍXmlWriterÕâÈý¸öÀàÐ͵Ä×ªÒÆÒ»¹²Éæ¼°µ½Æß¸ö³ÌÐò¼¯£¬ÆäÖÐmscorlib.dll¡¢System.dllºÍSystem.Xml.dllÊÇNetLib.dllÖ±½ÓÒýÓõÄÈý¸ö³ÌÐò¼¯£¬¶øSystem.Private.CoreLib.dll¡¢System.Private.Uri.dllºÍSystem.Private.Xml.dllÔòÊÇ×îÖÕ³ÐÔØÕâÈý¸öÀàÐ͵ijÌÐò¼¯¡£¶ÔÓÚTaskºÍUriÀàÐÍÀ´Ëµ£¬ËüÃÇÖ»¾­ÀúÒ»´Î×ªÒÆ£¬¶øXmlWriterÔò¾­ÀúÁËÁ½´ÎÀàÐÍ×ªÒÆ£¬Ëü×ªÒÆµ½³ÌÐò¼¯System.Xml.ReaderWriter.dllÖУ¬ÔÙ½èÖúºóÕß×ªÒÆµ½Ä¿±ê³ÌÐò¼¯System.Private.Xml.dll£¬³ÌÐò¼¯ÒýÓúÍÀàÐÍ×ªÒÆ¹ØÏµÌåÏÖÔÚÏÂͼÖС£

¶þ¡¢¶àƽ̨¸´ÓõÄBCL

ËäÈ».NET Core½èÖúÓÚCoreCLRºÍCoreFXʵÏÖÁËÕæÕýµÄ¿çƽ̨£¬µ«ÊÇĿǰµÄ.NET Core½ö½öÌṩASP.NET CoreºÍUWPÕâÁ½ÖÖ±à³ÌÄ£ÐÍ£¬ËäÈ»ºóÕßÖ¼ÔÚʵÏÖ¶àÖÖÉ豸µÄͳһ±à³Ì£¬µ«ÒÀÈ»»¹ÊǹØ×¢ÓÚWindowsƽ̨¡£¶ÔÓÚ´«Í³.NET FrameworkÏÂÃæÏò×ÀÃæÓ¦ÓõÄWPFºÍWindows Forms£¬ËüÃDz¢Ã»ÓÐ¿çÆ½Ì¨µÄÒâÒ壬ËùÒÔÒÀÈ»Êǽñºó.NETµÄÒ»´ó·ÖÖ§¡£³ý´ËÖ®Í⣬ËäÈ»ÎÒÃÇÓÐÁË¿çÆ½Ì¨µÄASP.NET Core£¬´«Í³µÄASP.NETÒÀÈ»±»±£ÁôÁËÏÂÀ´£¬²¢ÇÒÔÚ½ñºóÒ»¶Îʱ¼äÄÚ»¹½«¼ÌÐøÉý¼¶¡£³ýÁË.NET FrameworkºÍ.NET Core£¬.NET»¹¾ßÓÐÁíÒ»¸öÖØÒªµÄ·ÖÖ§£¬ÄǾÍÊÇXamarin£¬Ëü¿ÉÒÔ°ïÖúÎÒÃÇΪiOS¡¢OS XºÍAndroid±àдͳһµÄÓ¦Óá£ÔÚ.NETµ®ÉúÊ®¶àÄêºó£¬Î¢Èí¿ªÊ¼¶Ô.NET½øÐÐÁËȫеIJ¼¾Ö£¬½¨Á¢ÁË ¡°´óһͳ¡± µÄ.NETƽ̨¡£×ܵÄÀ´Ëµ£¬Õâ¸öËùνµÄ´óһͳ.NETƽ̨ÓÉÈçÏÂͼËùʾµÄ.NET Framework¡¢.NET CoreºÍXamarinÕâÈý¸ö·ÖÖ§×é³É¡£

ËäÈ»±»Î¢ÈíÖØÐ²¼¾ÖµÄ.NETƽֻ̨°üº¬ÁËÈý¸ö·ÖÖ§£¬µ«ÊÇ֮ǰÓöµ½µÄÒ»¸öÖØÒªµÄÎÊÌâÒÀÈ»´æÔÚ£¬ÄǾÍÊÇ´úÂëµÄ¸´Óã¬ËµµÄ¸ü¼Ó¾ßÌåµÄÊÇÓ¦¸ÃÊdzÌÐò¼¯µÄ¸´Óöø²»ÊÇÔ´´úÂëµÄ¸´Óá£ÎÒÃÇÖªµÀ֮ǰ½â¾ö³ÌÐò¼¯·þÎñµÄ·½°¸¾ÍÊÇPCL£¬µ«Õâ²¢²»ÊÇÒ»ÖÖÀíÏëµÄ½â¾ö·½°¸£¬ÓÉÓÚ¸÷¸öÄ¿±ê¿ò¼Ü¾ßÓи÷ÖÖ¶ÀÁ¢µÄBCL£¬ËùÒÔÎÒÃÇ´´½¨µÄPCLÏîĿֻÄܽ¨Á¢ÔÚÖ¸¶¨µÄ¼¸ÖÖ¼æÈÝÄ¿±ê¿ò¼ÜµÄBCL½»¼¯Ö®ÉÏ¡£¶ÔÓÚȫеÄ.NETƽ̨À´Ëµ£¬Õâ¸öÎÊÌâͨ¹ýÌṩͳһµÄBCLµÃµ½¸ù±¾µÄ½â¾ö£¬Õâ¸öͳһµÄBCL±»³ÆÎª.NET Standard¡£

ÎÒÃÇ¿ÉÒÔ½«.NET Standard³ÆÎªÐÂÒ»´úµÄPCL£¬PCLÌṩµÄ¿ÉÒÆÖ²ÄÜÁ¦½ö½öÏÞÓÚ´´½¨Ê±¾ÍÈ·¶¨ÏÂÀ´µÄ¼¸ÖÖÄ¿±êƽ̨£¬µ«ÊÇ.NET Standard×öµÃ¸ü¼Ó³¹µ×£¬ÒòΪËüÔÚÉè¼ÆµÄʱºò¾ÍÒѾ­¿¼ÂÇÕë¶ÔÈý´ó·ÖÖ§µÄ¸´Óá£ÈçÏÂͼËùʾ£¬.NET StandardΪ.NET Framework¡¢.NET CoreºÍXamarinÌṩÁËͳһµÄAPI£¬ÄÇôÎÒÃÇÔÚÕâ×é±ê×¼API»ù´¡ÉϱàдµÄ´úÂë×ÔÈ»¾ÍÄܱ»ËùÓÐÀàÐ͵Ä.NETÓ¦Óø´Óá£

.NET StandardÌṩµÄAPIÖ÷ÒªÊǸù¾ÝÏÖÓÐ.NET FrameworkÀ´¶¨ÒåµÄ£¬ËüµÄ°æ±¾Éý¼¶·´Ó³ÁËÆäÌṩµÄAPI²»¶Ï·á¸»µÄ¹ý³Ì£¬Ä¿Ç°×îа汾£¨.NET Standard 2.0£©ÌṩµÄAPIÊýÁ¿ÔÚǰһ°æ±¾»ù´¡Éϼ¸ºõ·­ÁËÒ»·¬¡£Visual StudioÌṩÏàÓ¦µÄÏîĿģ°å°ïÖúÎÒÃÇ´´½¨»ùÓÚ.NET StandardµÄÀà¿âÏîÄ¿£¬ÕâÑùµÄÏîÄ¿»á²ÉÓÃרÃŵÄÄ¿±ê¿ò¼Ü±ðÃûnetstandard{version}¡£Ò»¸öÕë¶Ô.NET Standard 2.0µÄÀà¿âÏîÄ¿¾ßÓÐÈçÏµĶ¨Ò壬ÎÒÃÇ¿ÉÒÔ¿´µ½Ëü²ÉÓõÄÄ¿±ê¿ò¼Ü±ðÃûΪ ¡°.NET Standard 2.0¡± ¡£

1: <Project Sdk="Microsoft.NET.Sdk">
2: <PropertyGroup>
3: <TargetFramework> netstandard2.0</TargetFramework>
4: </PropertyGroup>
5: </Project>

¹ËÃû˼Ò壬.NET Standard½ö½öÊÇÒ»¸ö±ê×¼£¬¶ø²»Ìṩ¾ßÌåµÄʵÏÖ¡£ÎÒÃÇ¿ÉÒÔ¼òµ¥Àí½âΪ.NET StandardΪÎÒÃǶ¨ÒåÁËÒ»ÕûÌ×±ê×¼µÄ½Ó¿Ú£¬¸÷¸ö·ÖÖ§ÐèÒªÕë¶Ô×ÔÉíµÄÖ´Ðл·¾³¶ÔÕâÌ×½Ó¿ÚÌṩʵÏÖ¡£¶ÔÓÚ.NET CoreÀ´Ëµ£¬ËüµÄ»ù´¡APIÖ÷ÒªÓÉCoreFXºÍSystem.Private.CoreLib.dllÕâ¸öºËÐijÌÐò¼¯À´³ÐÔØ£¬ÕâЩAPI»ù±¾ÉϾÍÊǸù¾Ý.NET StandardÀ´Éè¼ÆµÄ¡£µ«ÊǶÔ.NET FrameworkÀ´Ëµ£¬ËüµÄBCLÌṩµÄAPIÓë.NET Standard´æÔÚןܴóµÄ½»¼¯£¬Êµ¼ÊÉÏ.NET Standard»ù±¾ÉϾÍÊǸù¾Ý.NET FrameworkÏÖÓеÄAPIÀ´Éè¼ÆµÄ£¬ËùÒÔ΢Èí²»¿ÉÄÜÔÚ.NET FrameworkÉÏÖØÐ´Ò»Ì×ÀàÐÍÓÚCoreFXµÄʵÏÖ£¬Ö»ÐèÒª²ÉÓÃij¸ö¼¼Êõ ¡°Á´½Ó¡± µ½ÏÖÓеijÌÐò¼¯ÉϾͿÉÒÔÁË¡£

Ò»¸öÕë¶Ô.NET Standard±àÒëÉú³ÉµÄ³ÌÐò¼¯ÔÚ²»Í¬µÄÖ´Ðл·¾³ÖÐÕë¶ÔÕæÕýÌṩʵÏֵijÌÐò¼¯µÄËùν¡°Á´½Ó¡±ÒÀÈ»ÊÇͨ¹ýÉÏÃæÎÒÃǽéÉܵġ°µæÆ¬¡±¼¼ÊõÀ´ÊµÏֵģ¬ÎªÁ˳¹µ×¸ãÇå³þÕâ¸öÎÊÌ⣬ÎÒÃÇ»¹ÊÇÏÈÀ´×÷Ò»¸ö¼òµ¥µÄʵÀýÑÝʾ¡£ÈçÏÂͼËùʾ£¬ÎÒÃÇ´´½¨ÁËÓëÉÏÃæÑÝʾʵÀý¾ßÓÐÀàËÆ½á¹¹µÄ½â¾ö·½°¸£¬ÓëÖ®²»Í¬µÄÊÇ£¬·Ö±ðÕë¶Ô.NET FrameworkºÍ.NET CoreµÄ¿ØÖÆÌ¨Ó¦ÓÃNetAppºÍNetCoreApp¹²Í¬ÒýÓõÄÀà¿âNetStandardLibÊÇÒ»¸ö.NET Standard 2.0Àà¿âÏîÄ¿¡£

ÓëÉÏÃæÑÝʾµÄʵÀýÒ»Ñù£¬ÎÒÃÇÔÚNetStandardLibÖж¨ÒåÁËÈçÏÂÒ»¸öUtilsÀ࣬²¢ÀûÓö¨ÒåÆäÖеľ²Ì¬·½·¨PrintAssemblyNamesÊý¾ÝÁ½¸öÊý¾ÝÀàÐÍ£¨Dictionary<,>ºÍSortedDictionary<,>£©ËùÔڵijÌÐò¼¯Ãû³Æ£¬¸Ã·½·¨·Ö±ðÔÚNetAppºÍNetCoreAppµÄÈë¿ÚMain·½·¨Öб»µ÷Óá£

1: public class Utils
2: {
3: public static void PrintAssemblyNames()
4: {
5: Console.WriteLine (typeof(Dictionary<,>).Assembly.FullName);
6: Console.WriteLine (typeof(SortedDictionary<,>).Assembly.FullName);
7: }
8: }

NetApp:

1: class Program
2: {
3: static void Main()
4: {
5: Console.WriteLine (".NET Framework 4.7");
6: Utils.PrintAssemblyNames();
7: }
8: }

NetCoreApp:

1: class Program
2: {
3: static void Main()
4: {
5: Console.WriteLine(".NET Core 2.0");
6: Utils.PrintAssemblyNames();
7: }
8: }

Ö±½ÓÔËÐÐÕâÁ½¸ö·Ö±ðÕë¶Ô.NET FrameworkºÍ.NET CoreµÄ¿ØÖÆÌ¨Ó¦ÓÃNetAppºÍNetCoreApp£¬ÎÒÃǻᷢÏÖËüÃÇ»áÉú³É²»Í¬µÄÊä³ö½á¹û¡£ÈçÏÂͼËùʾ£¬ÔÚ.NET FrameworkºÍ.NET Core Ö´Ðл·¾³Ï£¬Dictionary<,>ºÍSortedDictionary<,>ÕâÁí¸ö·ºÐÍ×ÖµäÀàÐÍÆäʵÀ´Ô´ÓÚ²»Í¬µÄ³ÌÐò¼¯¡£¾ßÌåÀ´Ëµ£¬ÎÒÃdz£ÓõÄDictionary<,>ÀàÐÍÔÚ.NET Framework 4.7ºÍ.NET Core 2.0»·¾³Ï·ֱð¶¨ÒåÔÚ³ÌÐò¼¯mscorlib.dllºÍSystem.Private.CoreLib.dllÖУ¬¶øSortedDictionary<,>ËùÔڵijÌÐò¼¯Ôò·Ö±ðÊÇSystem.dllºÍSystem.Collection.dll¡£

¶ÔÓÚÑÝʾµÄÕâ¸öʵÀýÀ´Ëµ£¬Õâ¸öNetStandardLibÀà¿âÏîÄ¿Õë¶ÔµÄÄ¿±ê¿ò¼ÜΪ.NET Standard 2.0£¬ºóÕß×îÖÕÌåÏÖΪһ¸öÃûΪNetStandard.Library.nupkgµÄNuGet°ü£¬ÕâÒ»µãÆäʵ¿ÉÒÔ´ÓVisual StudioÕë¶Ô¸ÃÏîÄ¿µÄÒÀÀµ½Úµã¿ÉÒÔ¿´³öÀ´¡£ÈçÏÂͼËùʾ£¬Õâ¸öÃûΪNetStandard.LibraryµÄNuGet°ü¾ßÓÐÒ»¸öºËÐĵijÌÐò¼¯netstandard.dll£¬ÉÏÃæÎÒÃÇËù˵µÄ.NET Standard API¾Í¶¨ÒåÔڸóÌÐò¼¯ÖС£

Ò²¾ÍÊÇ˵£¬ËùÓÐ.NET Standard 2.0ÏîÄ¿¶¼¾ßÓÐÕë¶Ô³ÌÐò¼¯netstandard.dllµÄÒÀÀµ£¬Õâ¸öÒÀÀµ×ÔȻҲ»áÌåÏÖÔÚ±àÒëºóÉú³ÉµÄ³ÌÐò¼¯ÉÏ¡£¶ÔÓÚÎÒÃÇÑÝʾʵÀýÖеÄÕâ¸öÀà¿âÏîÄ¿NetStandardLib±àÒëÉú³ÉµÄͬÃû³ÌÐò¼¯À´Ëµ£¬ËüÕë¶Ô³ÌÐò¼¯netstandard.dllµÄÒÀÀµÌåÏÖÔÚÈçÏÂËùʾµÄÔªÊý¾ÝÖС£

1: .assembly extern netstandard
2: {
3: .publickeytoken = (CC 7B 13 FF CD 2D DD 51 )
4: .ver 2:0:0:0
5: }
6: .assembly NetStandardLib
7: {
8: ...
9: }
10: ...

°´ÕÕÎÒÃǼ´ÓеÄ֪ʶ£¬Ô­±¾¶¨ÒåÔÚnetstandard.dllµÄÁ½¸öÀàÐÍ£¨Dictionary<,> ºÍSortedDictionary<,>£©ÔÚ²»Í¬¹ýµÄÖ´Ðл·¾³ÖÐÐèÒª±»×ªÒƵ½ÁíÒ»¸ö³ÌÐò¼¯ÖУ¬ÎÒÃÇÍêÈ«¿ÉÒÔÔÚÏàÓ¦µÄ»·¾³ÖÐÌṩһ¸öͬÃûµÄµæÆ¬³ÌÐò¼¯²¢½èÖúÀàÐ͵Ŀç³ÌÐò¼¯×ªÒÆ»úÖÆÀ´ÊµÏÖ£¬Êµ¼ÊÉÏ΢ÈíÒ²¾ÍÊÇÕâô×öµÄ¡£ÎÒÃÇÏÈÀ´¿´¿´Õë¶Ô.NET FrameworkµÄµæÆ¬³ÌÐò¼¯netstandard.dllµÄÏà¹Ø¶¨Ò壬ÎÒÃÇ¿ÉÒÔÖ±½ÓÔÚNetApp±àÒëµÄÄ¿±êĿ¼ÖÐÕÒµ½Õâ¸ö³ÌÐò¼¯¡£½èÖúÓÚ·´±àÒ빤¾ßildasm.exe£¬ÎÒÃÇ¿ÉÒÔºÜÈÝÒ׵صõ½ÓëDictionary<,>ºÍSortedDictionary<,>ÕâÁ½¸ö·ºÐÍ×ÖµäÀàÐÍ×ªÒÆµÄÏà¹ØÔªÊý¾Ý£¬¾ßÌåµÄÄÚÈÝÏÂÃæµÄ´úÂëÆ¬¶ÎËùʾ¡£

1: .assembly extern mscorlib
2: {
3: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
4: .ver 0:0:0:0
5: }
6: .assembly extern System
7: {
8: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
9: .ver 0:0:0:0
10: }
11: .class extern forwarder System.Collections.Concurrent .ConcurrentDictionary`2
12: {
13: .assembly extern mscorlib
14: }
15: .class extern forwarder System.Collections.Generic.SortedDictionary`2
16: {
17: .assembly extern System
18: }

Õë¶Ô.NET CoreµÄµæÆ¬³ÌÐò¼¯netstandard.dll±»±£´æÔÚÎÒÃÇÇ°ÃæÌáµ½µÄ¹²ÏíĿ¼¡°%ProgramFiles%dotnet \shared\Microsoft.NETCore.App \2.0.0¡±Ï£¬ÎÒÃDzÉÓÃͬÑùµÄ·½Ê½ÌáÈ¡³öÓëDictionary<,>ºÍSortedDictionary<,>ÕâÁ½¸ö·ºÐÍ×ÖµäÀàÐÍ×ªÒÆµÄÔªÊý¾Ý¡£´ÓÈçϵĴúÂëÆ¬¶ÎÎÒÃÇ¿ÉÒÔÇåÎúµØ¿´³ö£¬Dictionary<,>ºÍSortedDictionary<,>ÕâÁ½¸öÀàÐͶ¼±»×ªÒƵ½³ÌÐò¼¯System.Collections.dllÖ®ÖС£

1: .assembly extern System.Collections
2: {
3: .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
4: .ver 0:0:0:0
5: }
6: .class extern forwarder System.Collections.Generic.Dictionary`2
7: {
8: .assembly extern System.Collections
9: }
10: .class extern forwarder System.Collections.Generic.SortedDictionary`2
11: {
12: .assembly extern System.Collections
13: }

´ÓÑÝʾʵÀýµÄÖ´Ðнá¹ûÎÒÃÇÖªµÀ£¬SortedDictionary<,>ȷʵÊǶ¨ÒåÔÚ³ÌÐò¼¯System.Collections.dllÖУ¬µ«ÊÇÎÒÃdz£ÓõÄDictionary<,>ÀàÐÍÔò³ö×ÔºËÐijÌÐò¼¯System.Private.CoreLib.dll£¬ÄÇôÎÒÃÇ¿ÉÒԶ϶¨Dictionary<,>ÀàÐÍÔÚSystem.Collections.dllÖбØÈ»³öÏÖÁ˶þ´Î×ªÒÆ¡£ÎªÁËÈ·ÈÏÎÒÃǵĶÏÑÔ£¬ÎÒÃÇÖ»ÐèÒª²ÉÓÃÏàͬµÄ·½Ê½·´±àÒë³ÌÐò¼¯System.Collections.dll£¬¸Ã³ÌÐò¼¯Ò²±»´æ´¢ÔÚ¹²ÏíĿ¼ ¡°%ProgramFiles% dotnet\shared \Microsoft.NETCore.App \2.0.0¡± ÖУ¬¸Ã³ÌÐò¼¯ÖÐÕë¶ÔDictionary<,>ÀàÐ͵Ä×ªÒÆÌåÏÖÔÚÈçÏÂËùʾµÄÔªÊý¾ÝÖС£

1: .assembly extern System.Private.CoreLib
2: {
3: .publickeytoken = (7C EC 85 D7 BE A7 79 8E )
4: .ver 4:0:0:0
5: }
6: .class extern forwarder System.Collections.Generic.Dictionary`2
7: {
8: .assembly extern System.Private.CoreLib
9: }

ÉÏÃæÕë¶ÔDictionary<,>ºÍSortedDictionary<,>ÕâÁ½¸öÀàÐÍ·Ö±ðÔÚ.NET Framework 4.7ºÍ.NET Core»·¾³ÏµĿç³ÌÐò¼¯×ªÒÆÂ·¾¶»ù±¾ÉÏÌåÏÖÔÚÏÂͼ֮ÖС£¼òµ¥À´Ëµ£¬.NET Framework»·¾³ÏÂµÄµæÆ¬³ÌÐò¼¯netstandard.dll½«ÕâÁ½¸öÀàÐÍ·Ö±ð×ªÒÆµ½Á˳ÌÐò¼¯mscorlib.dllºÍSystem.dllÖ®ÖС£Èç¹ûÖ´Ðл·¾³Çл»µ½ÁË.NET Core£¬ÕâÁ½¸öÀàÐÍÏȱ»×ªÒƵ½System.Collection.dllÖУ¬µ«ÊÇDictionary<,>Õâ¸ö³£ÓÃÀàÐÍ×îÖÕÊÇÓÉSystem.Private.CoreLib.dllÕâ¸ö»ù´¡³ÌÐò¼¯³ÐÔØµÄ£¬ËùÓÐSystem.Collection.dllÖÐÕë¶Ô¸ÃÀàÐÍ×÷Á˶þ´Î×ªÒÆ¡£

ÉÏÃæÕâ¸ö¼òµ¥µÄÀàÐÍ»ù±¾ÉϽÒʾÁË.NET StandardΪʲôÄܹ»Ìṩȫƽ̨µÄ¿ÉÒÆÖ²ÐÔ£¬ÎÒÃÇÏÖÔÚÀ´¶Ô´Ë×öÒ»¸ö¼òµ¥µÄ×ܽᡣ.NET Standard APIÓÉNetStandard.LibraryÕâ¸öNuGet°üÀ´³ÐÔØ£¬ºóÕßÌṩÁËÒ»¸öÃûΪnetstandard.dllµÄ³ÌÐò¼¯£¬±£ÁôÔÚÕâ¸ö³ÌÐò¼¯ÖеĽö½öÊÇ. NET Standard APIµÄ´æ¸ù£¨Stub£©£¬¶ø²»Ìṩ¾ßÌåµÄʵÏÖ¡£ËùÓжÔÓÚÒ»¸öÄ¿±ê¿ò¼ÜΪ.NET StandardµÄÀà¿âÏîÄ¿±àÒëÉú³ÉµÄ³ÌÐò¼¯À´Ëµ£¬ËüÃDZ£ÁôÁËÕë¶Ô³ÌÐò¼¯netstandard.dllµÄÒýÓá£

.NETƽ̨µÄÈý´ó·ÖÖ§£¨.NET Framework¡¢.NET CoreºÍXamarin£©°´ÕÕ×Ô¼ºµÄ·½Ê½¸÷×ÔʵÏÖÁË.NET Standard¹æ¶¨µÄÕâÌ×±ê×¼µÄAPI¡£ÓÉÓÚÔÚÔËÐÐÊ±ÕæÕý³ÐÔØ.NET Standard APIµÄÀàÐͱ»·Ö²¼µ½¶à¸ö³ÌÐò¼¯ÖУ¬ËùÒÔ. NET Standard³ÌÐò¼¯Äܹ»±»¸´ÓõÄǰÌáÊÇÔËÐÐʱÄܹ»½«ÕâЩ»ù´¡ÀàÐÍÁ´½Óµ½¶ÔÓ¦µÄ³ÌÐò¼¯ÉÏ¡£ÓÉÓÚ. NET Standard³ÌÐò¼¯ÊÇÕë¶Ônetstandard.dll½øÐбàÒëµÄ£¬ËùÒÔÎÒÃÇÖ»ÐèÒªÔÚ¸÷×Ô»·¾³ÖÐÌṩÕâ¸öͬÃûµÄ³ÌÐò¼¯À´Íê³ÉÀàÐ͵Ä×ªÒÆ¼´¿É¡£

   
2293 ´Îä¯ÀÀ       55
 
Ïà¹ØÎÄÕÂ

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

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

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