±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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½øÐбàÒëµÄ£¬ËùÒÔÎÒÃÇÖ»ÐèÒªÔÚ¸÷×Ô»·¾³ÖÐÌṩÕâ¸öͬÃûµÄ³ÌÐò¼¯À´Íê³ÉÀàÐ͵Ä×ªÒÆ¼´¿É¡£ |