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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NET Core¿çƽ̨µÄ°ÂÃØ[ÖÐÆª]£º¸´ÓÃÖ®éä
 
À´Ô´£ºwww.cnblogs.com ·¢²¼ÓÚ£º 2017-11-21
  4410  次浏览      28
 

ÔÚ¡¶.NET Core¿çƽ̨µÄ°ÂÃØ[ÉÏÆª]£ºÀúÊ·µÄ¼ÏËø¡·ÖÐÎÒÃÇ̸µ½£ºÓÉÓÚ.NETÊǽ¨Á¢ÔÚCLIÕâÒ»±ê×¼µÄ¹æ·¶Ö®ÉÏ£¬ËùÒÔËüÌìÉú¾Í¾ßÓÐÁË¡°¿çƽ̨¡±µÄ»ùÒò¡£ÔÚ΢Èí·¢²¼Á˵ÚÒ»¸öÕë¶Ô×ÀÃæºÍ·þÎñÆ÷ƽ̨µÄ.NET FrameworkÖ®ºó£¬Ëü¿ªÊ¼ ¡°Àִ˲»Æ£¡± µØ¶ÔÕâ¸öÍêÕû°æµÄ.NET Framework½øÐв»Í¬·¶Î§ºÍ²ã´ÎµÄ ¡°Ñ˸ £¬½ø¶øÔì¾ÍÁËÏñWindows Phone¡¢Windows Store¡¢SilverlightºÍ.NET Micro FrameworkµÄѹËõ°æµÄ.NET Framework¡£´ÓÕâ¸öÒâÒåÉϽ²£¬MonoºÍËüÃDz¢Ã»Óб¾ÖʵÄÇø±ð£¬Î¨Ò»²»Í¬µÄÊÇMonoÕæÕýÍ»ÆÆÁËWindowsƽ̨µÄ·ªÀé¡£°üÀ¨MonoÔÚÄÚµÄÕâЩ·ÖÖ§´Ù³ÉÁË.NETµÄ·±ÈÙ£¬µ«ÎÒÃǶ¼ÖªµÀÕâ½ö½öÊÇÒ»ÖÖÐé¼ÙµÄ·±ÈÙ¶øÒÑ¡£ËäÈ»¶¼ÊÇ.NET FrameworkµÄ×Ó¼¯£¬µ«ÊÇÓÉÓÚËüÃDzÉÓÃÍêÈ«¶ÀÁ¢µÄÔËÐÐʱºÍ»ù´¡Àà¿â£¬ÕâʹÎÒÃǺÜÄÑ¿ª·¢Ò»¸öÖ§³Ö¶àÖÖÉ豸µÄ¡°¿ÉÒÆÖ²£¨Portable£©¡±Ó¦Óã¬ÕâЩ·ÖÖ§·´¶ø³ÉÎªÖÆÔ¼.NET·¢Õ¹µÄÒ»µÀµÀ¼ÏËø¡£ÖÁÓÚΪʲô¡°¿ÉÒÆÖ²£¨Portable£©¡±.NETÓ¦ÓõĿª·¢Èç´Ë·±ËöÄØ£¿

ËùνÓÉÓÚÄ¿±ê¿ò¼ÜµÄ¶ÀÁ¢ÐÔ£¬Òâζ×Ų»½ö½öÊÇ×÷ΪÐéÄâ»úµÄRuntimeÊǸù¾Ý¾ßÌåÆ½Ì¨ÌØÐÔÉè¼ÆµÄ£¬×÷Ϊ±à³Ì»ù´¡µÄBCLÒ²²»ÄÜ¿çÆ½Ì¨¹²Ïí£¬ËüΪ¿ª·¢Õß´øÀ´µÄÒ»¸ö×î´óµÄÎÊÌâ¾ÍÊÇ£ººÜÄѱàдÄܹ»ÔÚ¸÷¸öÄ¿±ê¿ò¼Ü¸´ÓõĴúÂë¡£±È½Ï¼«¶ËµÄ³¡¾°¾ÍÊÇ£ºµ±ÎÒÃÇÐèҪΪһ¸öÏÖÓеÄ×ÀÃæÓ¦ÓÃÌṩÕë¶ÔÒÆ¶¯É豸µÄÖ§³Öʱ£¬ÎÒÃDz»µÃ²»´ÓÍ·µ½Î²¿ª·¢Ò»¸öȫеÄÓ¦Óã¬ÏÖÓеĴúÂëÄÑÒÔ±»ÐµÄÓ¦ÓÃËù¸´ÓÃÓᣠ¡°´úÂ븴Óá±ÊÇÈí¼þÉè¼ÆÒ»Ïî×îΪ¸ù±¾µÄÄ¿±ê£¬ÔÚ²»¿¼ÂÇ¿çÆ½Ì¨µÄǰÌáÏ£¬ÎÒÃÇ¿ÉÒÔÓ¦ÓÃÏàÓ¦µÄÉè¼ÆÄ£Ê½ºÍ±à³Ì¼¼ÇÉÀ´ÊµÏÖ´úÂëµÄÖØÓ㬵«ÊÇÆ½Ì¨Ö®¼äµÄ²îÒìµ¼ÖÂÁË¿çÆ½Ì¨´úÂëÖØÓÃȷʵ¾ßÓв»Ð¡µÄÀ§ÄÑ¡£ËäÈ»×÷µÃ²»Ëã·Ç³£µÄÀíÏ룬µ«ÊÇ΢ÈíÔÚÕâ·½ÃæÈ·Êµ×ö³öÁ˺ܶೢÊÔ£¬ÎÒÃDz»·ÁÏÈÀ´ÁÄÁÄĿǰÎÒÃǶ¼ÓÐÄÄЩ¿çƽ̨´úÂ븴ÓõĽâ¾ö·½°¸¡£

Ŀ¼

Ò»¡¢Ô´´úÂ븴ÓÃ

Ô´Îļþ¹²Ïí

ÎļþÁ´½Ó

¹²ÏíÏîÄ¿

¶þ¡¢³ÌÐò¼¯¸´ÓÃ

³ÌÐò¼¯Ò»ÖÂÐÔ

Retargetable³ÌÐò¼¯

ÀàÐ͵Ä×ªÒÆ

Èý¡¢¿ÉÒÆÖ²Àà¿â£¨PCL£©

Ò»¡¢Ô´´úÂ븴ÓÃ

¶ÔÓÚ°üÀ¨MonoÔÚÄڵĸ÷¸ö.NET Frameworkƽ̨µÄBCLÀ´Ëµ£¬ËäÈ»ÔÚAPI¶¨Òå²ãÃæÉÏ´æÔÚһЩ¹²Í¬Ö®´¦£¬µ«ÊÇÓÉÓÚËüÃǶ¨ÒåÔÚ²»Í¬µÄ³ÌÐò¼¯Ö®ÖУ¬ËùÒÔÔÚPCL£¨Portal Class Library£©ÍƳö֮ǰ£¬Õë¶Ô³ÌÐò¼¯µÄ¹²ÏíÊDz»¿ÉÄÜʵÏֵģ¬ÎÒÃÇÖ»ÄÜÔÚÔ´´úÂë²ãÃæÊµÏÖ¹²Ïí¡£Ô´´úÂëµÄ¹²Ïíͨ¹ýÔÚ²»Í¬ÏîĿ֮¼ä¹²ÏíÔ´ÎļþµÄ·½Ê½À´ÊµÏÖ£¬ÖÁÓÚ¾ßÌå²ÉÓõķ½Ê½£¬ÎÒÃÇÓÐÈýÖÖ²»Í¬µÄ·½°¸¹©ÄãÑ¡Ôñ¡£

Ô´Îļþ¹²Ïí

¶ÔÓÚÒ»¸öÄܹ»¶à¸öÕë¶Ô²»Í¬Ä¿±ê¿ò¼ÜµÄÏîÄ¿¹²ÏíµÄÔ´Îļþ£¬¶¨ÒåÆäÖеĴúÂëÒ²Óв»ÉÙÊÇÕë¶Ô¾ßÌåij¸öÄ¿±ê¿ò¼ÜµÄ¡£¶ÔÓÚÕâÖÖ´úÂ룬ÎÒÃÇÐèÒª°´ÕÕÈçϵķ½Ê½½øÐбàд£¬ÏàÓ¦µÄÏîÄ¿ÒÔÌí¼Ó±àÒëµÄ·½Ê½Ñ¡ÔñÓë×ÔÉíÆ½Ì¨ÏàÆ¥ÅäµÄ´úÂë±àÒëµÀÉú³ÉµÄ³ÌÐò¼¯ÖС£

1: #if WINDOWS
2: <<Õë¶ÔWindows Desktop>>
3: #elif SILVERLIGHT
4: <<Õë¶Ô Silverlight>>
5: #elif WINDOWS_PHONE
6: <<Õë¶ÔWindows Phone>>
7: #else
8: <<Õë¶ÔÆäËûƽ̨>>
9: #endif

Èç¹û¶à¸öÕë¶Ô²»Í¬.NET Frameworkƽ̨µÄÏîÄ¿Îļþ´æÔÚÓÚͬһ¸öÎïÀíĿ¼Ï£¬´æÔÚÓÚÏàͬĿ¼ÏµÄÔ´Îļþ¿ÉÒÔͬʱ°üº¬µ½ÕâЩÏîÄ¿ÖÐÒÔʵÏÖ¹²ÏíµÄÄ¿µÄ¡£ÈçÏÂͼËùʾ£¬Á½¸ö·Ö±ðÕë¶ÔSilverlightºÍWPFµÄÏîÄ¿¹²ÏíÏàͬµÄĿ¼£¬ÓëÁ½¸öÏîÄ¿ÎļþͬÔÚÒ»¸öĿ¼ÏµÄC#ÎļþShared.cs¿ÉÒÔͬʱ±»°üº¬µ½ÕâÁ½¸öÏîĿ֮ÖС£

ÎļþÁ´½Ó

µ±ÎÒÃDzÉÓÃĬÈϵķ½Ê½½«Ò»¸öÏÖÓеÄÎļþÌí¼Óµ½µ±Ç°ÏîĿ֮ÖеÄʱºò£¬Visual Studio»á½«Ä¿±êÎļþ¿½±´µ½ÏîÄ¿±¾µØµÄĿ¼Ï£¬ËùÒÔ¸ù±¾Æð²»µ½¹²ÏíµÄÄ¿µÄ¡£µ«ÊÇÕë¶ÔÏÖÓÐÎļþµÄÌí¼ÓÖ§³ÖÒ»ÖÖ½Ð×ö¡°Á´½Ó¡±µÄ·½Ê½Ê¹Ìí¼Óµ½ÏîÄ¿ÖеÄÎļþÖ¸ÏòµÄÒÀÈ»ÊÇÔ­À´µÄµØÖ·£¬ÎÒÃÇ¿ÉÒÔΪ¶à¸öÏîÄ¿Ìí¼ÓÕë¶Ôͬһ¸öÎļþµÄÁ´½ÓÒÔʵÏÖÔ´Îļþ¿çÏîÄ¿¹²Ïí¡£Í¬Ñù»¹ÊÇÉÏÃæÑÝʾ·Ö±ðÕë¶ÔSilverlightºÍWPFµÄÁ½¸öÏîÄ¿£¬²»ÂÛÏîÄ¿ÎļþºÍÐèÒª±»¹²ÏíµÄÎļþ´æÔÚÓÚÄĸöĿ¼ÏÂÃæ£¬ÎÒÃǶ¼¿ÉÒÔ²ÉÓÃÈçÏÂͼËùʾµÄÌí¼ÓÎļþÁ´½ÓµÄ·½Ê½·ÖÏíÕâ¸öShared.csÎļþ¡£

¹²ÏíÏîÄ¿£¨Shared Project£©

ÆÕͨÏîÄ¿µÄÄ¿µÄ¶¼ÊÇ×éÖ¯Ô´ÎļþºÍÆäËûÏà¹Ø×ÊÔ´²¢½«ËüÃÇ×îÖÕ±àÒë³ÉÒ»¸ö¿É±»²¿ÊðµÄ³ÌÐò¼¯¡£µ«ÊÇShared ProjectÕâÖÖÏîÄ¿ÀàÐÍÔò±È½ÏÌØ±ð£¬ËüÖ»ÓжÔÔ´Îļþ½øÐÐ×éÖ¯µÄ¹¦ÄÜ£¬È´²»ÄÜͨ¹ý±àÒëÉú³É³ÌÐò¼¯£¬Ëü´æÔÚµÄÄ¿µÄ¾ÍÊÇΪÁËʵÏÖÔ´ÎļþµÄ¹²Ïí¡£¶ÔÓÚÉÏÃæÎÒÃǽéÉܵÄÁ½ÖÖÔ´´úÂëµÄ¹²Ïí·½Ê½À´Ëµ£¬ËüÃǶ¼ÊÇÕë¶Ôij¸öµ¥Ò»ÎļþµÄ¹²Ïí£¬¶øShared ProjectÔò¿ÉÒÔ¶Ô¶à¸öÔ´Îļþ½øÐдò°üÒÔʵÏÖÅúÁ¿¹²Ïí¡£

ÈçÉÏͼËùʾ£¬ÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸öShared ProjectÀàÐ͵ÄÏîÄ¿Shared.shproj£¬²¢½«ÐèÒª¹²ÏíµÄÈý¸öC#Îļþ£¨Foo.cs¡¢Bar.csºÍBaz.cs£©Ìí¼Ó½øÀ´¡£ÎÒÃǽ«Õë¶ÔÕâ¸öÏîÄ¿µÄÒýÓÃͬʱÌí¼Óµ½Ò»¸öSilverlightÏîÄ¿£¨SilverlightApp.csproj£©ºÍWindows PhoneÏîÄ¿£¨WinPhoneApp.csproj£©Ö®ÖУ¬µ±ÎÒÃǶÔÕâÁ½¸öÏîĿʵʩ±àÒëµÄʱºò£¬°üº¬ÔÚÏîÄ¿Shared.shprojÖеÄÈý¸öC#Îļþ»á×Ô¶¯×÷Ϊµ±Ç°ÏîÄ¿µÄÔ´Îļþ²ÎÓë±àÒë¡£

¶þ¡¢³ÌÐò¼¯¸´ÓÃ

ÎÒÃDzÉÓÃC#¡¢VB.NETÕâÑùµÄ±à³ÌÓïÑÔ±àдµÄÔ´Îļþ¾­¹ý±àÒë»áÉú³ÉÓÐIL´úÂëºÍÔªÊý¾Ý¹¹³ÉµÄÍйÜÄ£¿é£¬Ò»¸ö»òÕß¶à¸öÍйÜÄ£¿éºÏ²¢Éú³ÉÒ»¸ö³ÌÐò¼¯¡£³ÌÐò¼¯µÄÎļþÃû¡¢°æ±¾¡¢ÓïÑÔÎÄ»¯ºÍÇ©ÃûµÄ¹«Ô¿ÁîÅÆ¹²Í¬×é³ÉÁËËüµÄΨһ±êʶ£¬ÎÒÃǽ«¸Ã±êʶ³ÆÎª³ÌÐò¼¯ÓÐЧÃû³Æ£¨Assembly Qualified Name£©¡£³ýÁ˰üº¬±ØÒªµÄÍйÜÄ£¿éÖ®Í⣬ÎÒÃÇ»¹¿ÉÒÔ½«ÆäËûÎļþ×÷Ϊ×ÊÔ´ÄÚǶµ½³ÌÐò¼¯ÖУ¬³ÌÐò¼¯µÄÎļþ¹¹³ÉÒ»¸ö¡°Çåµ¥£¨Manifest£©¡±ÎļþÀ´ÃèÊö£¬Õâ¸öÇåµ¥Îļþ°üº¬ÔÚij¸öÍйÜÄ£¿éÖС£

³ýÁË×÷ΪÃèÊö³ÌÐò¼¯Îļþ¹¹ÔìÇåµ¥Ö®Í⣬ÃèÊö³ÌÐò¼¯µÄÔªÊý¾ÝÒ²°üº¬ÔÚÕâ¸öÇåµ¥ÎļþÖС£³ÌÐò¼¯Ê¹³ÌÐò¼¯³ÉΪһ¸ö×ÔÃèÊöÐÔ£¨Self-Describing£©µÄ²¿Êðµ¥Ôª£¬³ýÁËÃèÊö¶¨ÒåÔÚ±¾³ÌÐò¼¯ÖÐËùÓÐÀàÐÍÖ®Í⣬ÕâЩԪÊý¾Ý»¹°üÀ¨¶ÔÒýÓÃ×ÔÍⲿ³ÌÐò¼¯µÄÃèÊö¡£°üº¬ÔÚÔªÊý¾ÝÖÐÕë¶ÔÍⲿ³ÌÐò¼¯µÄÃèÊöÊÇÓɱàÒëʱÒýÓõijÌÐò¼¯¾ö¶¨µÄ£¬ÒýÓóÌÐò¼¯µÄÃû³Æ£¨°üº¬ÎļþÃû¡¢°æ±¾ºÍÇ©ÃûµÄ¹«Ô¿ÁîÅÆ£©»áÖ±½ÓÌåÏÖÔÚµ±Ç°³ÌÐò¼¯µÄÔªÊý¾ÝÖС£Õë¶Ô³ÌÐò¼¯ÒýÓõÄÔªÊý¾Ý²ÉÓÃÈçϵÄÐÎʽ£¨¡°.assembly extern¡±£©±»¼Ç¼ÔÚÇåµ¥ÎļþÖУ¬ÎÒÃÇ¿ÉÒÔ¿´³ö±»¼Ç¼ÏÂÀ´µÄ²»½ö°üº¬±»ÒýÓõijÌÐò¼¯ÎļþÃû£¨¡°Foo¡±ºÍ¡°Bar¡±£©£¬»¹°üÀ¨³ÌÐò¼¯µÄ°æ±¾£¬¶ÔÓÚÇ©ÃûµÄ³ÌÐò¼¯£¨¡°Foo¡±£©À´Ëµ£¬¹«Ô¿ÁîÅÆÒ²Ò»²¢°üº¬ÆäÖС£

1: .assembly extern Foo
2: {
3: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
4: .ver 1:0:0:0
5: }
6: .assembly extern Bar
7: {
8: .ver 1:0:0:0
9: }

°üº¬ÔÚµ±Ç°³ÌÐò¼¯Çåµ¥ÎļþÖÐÕë¶ÔÒýÓóÌÐò¼¯µÄÔªÊý¾ÝÊÇCLR¼ÓÔØÄ¿±ê³ÌÐò¼¯µÄÒÀ¾Ý¡£ÔÚĬÈϵÄÇé¿öÏ£¬CLRÒªÇó¼ÓÔØÓë³ÌÐò¼¯ÒýÓÃÔªÊý¾ÝÍêȫһÖµijÌÐò¼¯¡£¾ßÌåÀ´Ëµ£¬Èç¹ûÒýÓõÄÊÇÒ»¸öδǩÃûµÄ³ÌÐò¼¯£¨¡°Bar¡±£©£¬ÄÇôֻҪÇó±»¼ÓÔØµÄ³ÌÐò¼¯¾ßÓÐÒ»ÖµÄÎļþÃûºÍ°æ±¾£»Èç¹ûÒýÓõÄÊÇÒ»¸ö¾­¹ýÇ©ÃûµÄ³ÌÐò¼¯£¬ÄÇô»¹ÒªÇó±»¼ÓÔØµÄ³ÌÐò¼¯¾ßÓÐÒ»ÖµĹ«Ô¿ÁîÅÆ¡£

Ôڻص½¡¶.NET Core¿çƽ̨µÄ°ÂÃØ[ÉÏÆª]£ºÀúÊ·µÄ¼ÏËø¡·¹ØÓÚ.NET¶àÄ¿±ê¿ò¼Ü¶ÀÁ¢ÐÔµÄÎÊÌâ¡£ËäÈ»²»Í¬µÄÄ¿±ê¿ò¼ÜµÄBCLÔÚAPI²ãÃæ¾ßÓкཻܶ¼¯£¬µ«ÊÇÕâЩAPIʵ¼ÊÉϱ»¶¨ÒåÔÚ²»Í¬µÄ³ÌÐò¼¯ÖУ¬Õâ¾Íµ¼ÖÂÁËÔÚ²»Í¬µÄÄ¿±ê¿ò¼ÜϹ²Ïíͬһ¸ö³ÌÐò¼¯¼¸ºõ³ÉÁ˲»¿ÉÄܵÄÊÂÇé¡£Èç¹ûҪʹ¿çÄ¿±êƽ̨³ÌÐò¼¯¸´ÓóÉΪÏÖʵ£¬¾Í±ØÐëÒªÇóCLRÔÚ¼ÓÔØ³ÌÐò¼¯Ê±·Å¿í¡°ÍêȫƥÅ䡱µÄÏÞÖÆ£¬ÒòΪÕë¶Ôµ±Ç°³ÌÐò¼¯Çåµ¥ÎļþÖÐÃèÊöµÄij¸öÒýÓóÌÐò¼¯À´Ëµ£¬ÔÚ²»Í¬µÄÄ¿±ê¿ò¼ÜÏ¿ÉÄÜÖ¸Ïò²»Í¬µÄ³ÌÐò¼¯¡£Êµ¼ÊÉÏȷʵ´æÔÚÕâÑùµÄһЩ»úÖÆ»òÕß²ßÂÔÈÃCLR¼ÓÔØÒ»¸öÓëÒýÓÃÔªÊý¾ÝµÄÃèÊö²»Ò»ÖµijÌÐò¼¯£¬ÎÒÃÇÏÖÔÚ¾ÍÀ´ÁÄÁÄÕâЩ²ßÂÔ¡£

³ÌÐò¼¯Ò»ÖÂÐÔ

ÎÒÃǶ¼ÖªµÀ.NET FrameworkÊÇÏòºó¼æÈݵģ¬Ò²¾ÍÊÇ˵ԭÀ´Õë¶ÔµÍ°æ±¾.NET Framework±àÒëÉú³ÉµÄ³ÌÐò¼¯ÊÇ¿ÉÒÔÖ±½ÓÔڸ߰汾CLRÏÂÔËÐеġ£ÎÒÃÇÊÔÏëÒ»ÏÂÕâôһ¸öÎÊÌ⣺¾ÍÒ»¸öÕë¶Ô.NET Framework 2.0±àÒëÉú³ÉµÄ³ÌÐò¼¯×ÔÉíÀ´Ëµ£¬ËùÓÐÒýÓõĻù´¡³ÌÐò¼¯µÄ°æ±¾ÔÚÔªÊý¾ÝÃèÊöÖж¼Ó¦¸ÃÊÇ2.0£¬Èç¹ûÕâ¸ö³ÌÐò¼¯ÔÚNET Framework 4.0»·¾³ÏÂÖ´ÐУ¬CLRÔÚ¾ö¶¨¼ÓÔØËüËùÒÀÀµ³ÌÐò¼¯µÄʱºò£¬Ó¦¸ÃÑ¡Ôñ2.0»¹ÊÇ4.0ÄØ£¿

ÎÒÃDz»·Áͨ¹ýʵÑéÀ´»ñµÃÕâ¸öÎÊÌâµÄ´ð°¸¡£ÎÒÃÇÀûÓÃVisual Studio´´½¨Ò»¸öÕë¶Ô.NET Framework 2.0µÄ¿ØÖÆÌ¨Ó¦Óã¨ÃüÃûΪApp£©£¬²¢ÔÚ×÷Ϊ³ÌÐòÈë¿ÚµÄMain·½·¨ÉϱàдÈçÏÂÒ»¶Î´úÂë¡£ÈçÏÂÃæ´úÂëÆ¬¶ÏËùʾ£¬ÎÒÃÇÔÚ¿ØÖÆÌ¨ÉÏÊä³öÁËÈý¸ö»ù±¾ÀàÐÍ£¨Int32¡¢XmlDocumentºÍDataSet£©ËùÔÚ³ÌÐò¼¯µÄÈ«Ãû¡£

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

Ö±½ÓÔËÐÐÕâ¶Î³ÌÐòʹ֮ÔÚĬÈϰ汾µÄCLR£¨2.0£©ÏÂÔËÐлáÔÚ¿ØÖÆÌ¨ÉÏÊä³öÈçϵĽá¹û£¬ÎÒÃǻᷢÏÖÉÏÊöÈý¸ö»ù±¾ÀàÐÍËùÔÚ³ÌÐò¼¯µÄ°æ±¾¶¼ÊÇ2.0.0.0¡£Ò²¾Í˵ÔÚÕâÖÖÇé¿öÏ£¬ÔËÐÐʱ¼ÓÔØµÄ³ÌÐò¼¯ºÍ±àÒëʱÒýÓõijÌÐò¼¯ÊÇÒ»Öµġ£

ÏÖÔÚÎÒÃÇÔÚĿ¼¡°\bin\debug¡±Ö±½ÓÕÒµ½ÒÔDebugģʽ±àÒëÉú³ÉµÄ³ÌÐò¼¯App.exe£¬²¢°´ÕÕÈçϵÄÐÎʽÐ޸ĶÔÓ¦µÄÅäÖÃÎļþ£¨App.exe.config£©£¬¸ÃÅäÖõÄÄ¿µÄÔÚÓÚ½«Æô¶¯Ó¦ÓÃʱ²ÉÓõÄÔËÐÐʱ£¨CLR£©°æ±¾´ÓĬÈϵÄ2.0Çл»µ½4.0¡£

1: <configuration>
2: <startup>
3: <supportedRuntime&nbsp;version="v4.0"/>
4: </startup>
5: </configuration>

»òÕߣº

1: <configuration>
2: <startup>
3: <requiredRuntime&nbsp;version="v4.0"/>
4: </startup>
5: </configuration>

ÔÚÎÞÐèÖØÐ±àÒ루ȷ±£ÔËÐеÄÒÀÈ»ÊÇͬһ¸ö³ÌÐò¼¯£©Ö±½ÓÔËÐÐApp.exe£¬ÎÒÃÇ»áÔÚ¿ØÖÆÌ¨Éϵõ½ÈçÏÂͼËùʾµÄÊä³ö½á¹û£¬¿ÉÒÔ¿´µ½Èý¸ö³ÌÐò¼¯µÄ°æ±¾È«²¿±ä³ÉÁË4.0.0.0£¬Ò²¾ÍËµÕæÕý±»CLR¼ÓÔØµÄÕâЩ»ù´¡³ÌÐò¼¯ÊÇÓ뵱ǰCLRµÄ°æ±¾ÏàÆ¥ÅäµÄ¡£

Õâ¸ö¼òµ¥µÄʵÀýÌåÏÖÁËÕâôһ¸öÌØÕ÷£ºÔËÐйý³ÌÖмÓÔØµÄ.NET Framework³ÌÐò¼¯£¨³ÐÔØFCLµÄ³ÌÐò¼¯£©ÊÇÓɵ±Ç°ÔËÐÐʱ£¨CLR£©¾ö¶¨µÄ£¬ÕâЩ³ÌÐò¼¯µÄ°æ±¾×ÜÊÇÓëCLRµÄ°æ±¾ÏàÆ¥Åä¡£°üº¬ÔÚÔªÊý¾ÝÖеijÌÐò¼¯ÐÅÏ¢ÌṩĿ±ê³ÌÐò¼¯µÄÃû³Æ£¬¶ø°æ±¾ÔòÓɵ±Ç°ÔËÐеÄCLRÀ´¾ö¶¨£¬ÎÒÃǽ«Õâ¸öÖØÒªµÄ»úÖÆ³ÆÎª¡°³ÌÐò¼¯Ò»ÖÂÐÔ£¨Assembly Unification£©¡±£¬ÏÂͼºÜÇåÎúµØ½ÒʾÁËÕâ¸öÌØÐÔ¡£

Retargetable³ÌÐò¼¯

ÔÚĬÈÏÇé¿öÏ£¬Èç¹ûij¸ö³ÌÐò¼¯ÒýÓÃÁËÁíÒ»¸ö¾ßÓÐǿǩÃûµÄ³ÌÐò¼¯£¬CLRÔÚÖ´ÐеÄʱºò×ÜÊÇ»á¸ù¾Ý³ÌÐò¼¯ÎļþÃû¡¢°æ±¾ºÍ¹«Ô¿ÁîÅÆÈ¥¶¨Î»Ä¿±ê³ÌÐò¼¯¡£Èç¹ûÎÞ·¨ÕÒµ½Ò»¸öÓëÖ®ÍêȫƥÅäµÄ³ÌÐò¼¯£¬Ò»°ãÇé¿öÏ»áÅ׳öÒ»¸öFileNotFoundExceptionÀàÐ͵ÄÒì³£¡£Èç¹ûµ±Ç°ÒýÓõÄÊÇÒ»¸öRetargetable³ÌÐò¼¯£¬ÔòÒâζ×ÅCLRÔÚ¶¨Î»Ä¿±ê³ÌÐò¼¯µÄʱºò¿ÉÒÔ ¡°·Å¿í¡± Æ¥ÅäµÄÒªÇ󣬼´Ö¸ÒªÇóÄ¿±ê³ÌÐò¼¯¾ßÓÐÏàͬµÄÎļþÃû¼´¿É¡£

ÈçÏÂͼËùʾ£¬ÎÒÃǵÄÓ¦ÓóÌÐò£¨App£©ÒýÓÃÁ˾ßÓÐǿǩÃûµÄ³ÌÐò¼¯¡°Foobar, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a¡±£¬ËùÒÔ¶ÔÓÚ±àÒëºóÉú³ÉµÄ³ÌÐò¼¯App.exeÀ´Ëµ£¬¶ÔÓ¦µÄ³ÌÐò¼¯ÒýÓý«°üº¬Ä¿±ê³ÌÐò¼¯µÄÎļþÃû¡¢°æ±¾ºÍ¹«Ô¿ÁîÅÆ¡£Èç¹ûÔÚÔËÐеÄʱºòÖ»ÌṩÁËÒ»¸öÓÐЧÃû³ÆÎª¡°Foobar, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d7fg7asdf7asd7aer¡±µÄ³ÌÐò¼¯£¬³ýÁËÎļþÃû£¬ºóÕߵİ汾ºÅºÍ¹«Ô¿ÁîÅÆ¶¼Óë³ÌÐò¼¯ÒýÓÃÔªÊý¾ÝÃèÊöµÄ¶¼²»Ò»Ñù¡£ÔÚĬÈÏÇé¿öÏ£¬ÏµÍ³´Ëʱ×ÜÊÇ»áÅ׳öÒ»¸öFileNotFoundExceptionÀàÐ͵ÄÒì³££¬ÌÈÈôFoobarÊÇÒ»¸öRetargetable³ÌÐò¼¯£¬ÎÒÃÇÌṩµÄ½«×÷ΪĿ±ê³ÌÐò¼¯±»¼ÓÔØ²¢Ê¹Óá£

³ýÁ˶¨Òå³ÌÐò¼¯µÄÔªÊý¾Ý¶àÁËÈçÏÂÒ»¸öretargetable±ê¼ÇÖ®Í⣬Retargetable³ÌÐò¼¯ÓëÆÕͨ³ÌÐò¼¯²¢Ã»Óб¾ÖÊÇø±ð¡£

ÆÕͨ³ÌÐò¼¯£º

.assembly Foobar

Retargetable³ÌÐò¼¯£º

.assembly retargetable Foobar

ÕâÑùÒ»¸öretargetable±ê¼Ç¿ÉÒÔͨ¹ý°´ÕÕÈçÏÂËùʾµÄ·½Ê½ÔÚ³ÌÐò¼¯ÉÏÓ¦ÓÃAssemblyFlagsAttributeÌØÐÔÀ´Ìí¼Ó¡£²»¹ýÕâÑùµÄÖØ¶¨Ïò½ö½öÊÇÕë¶Ô.NET Framework×ÔÉíÌṩµÄ»ù´¡³ÌÐò¼¯ÓÐЧ£¬ËäÈ»ÎÒÃÇÒ²¿ÉÒÔͨ¹ýʹÓÃAssemblyFlagsAttributeÌØÐÔΪ×Ô¶¨ÒåµÄ³ÌÐò¼¯Ìí¼ÓÕâÑùÒ»¸öretargetable±ê¼Ç£¬µ«ÊÇCLR²¢²»»á¸³ÓèËüÖØ¶¨ÏòµÄÄÜÁ¦¡£

[assembly:AssemblyFlags (AssemblyNameFlags.Retargetable)]

Èç¹ûij¸ö³ÌÐò¼¯ÒýÓÃÁËÒ»¸öRetargetable³ÌÐò¼¯£¬×ÔÉíÇåµ¥ÎļþÕë¶Ô¸Ã³ÌÐò¼¯µÄÒýÓÃÔªÊý¾ÝͬÑù¾ßÓÐÈçÏÂËùʾµÄretargetable±ê¼Ç¡£CLRÕýʽÀûÓÃÕâ¸ö±ê¼ÇÈ·¶¨ËüÒýÓõÄÊÇ·ñÊÇÒ»¸öRetargetable³ÌÐò¼¯£¬½ø¶øÈ·¶¨Õë¶Ô¸Ã³ÌÐò¼¯µÄ¼ÓÔØ²ßÂÔ£¬¼´²ÉÓÃÕë¶ÔÎļþÃû¡¢°æ±¾ºÍ¹«Ô¿ÁîÅÆµÄÍêȫƥÅä²ßÂÔ£¬»¹ÊDzÉÓÃÖ»Õë¶ÔÎļþÃûµÄ½µ¼¶Æ¥Åä²ßÂÔ¡£

Õë¶ÔÆÕͨ³ÌÐò¼¯µÄÒýÓãº

1: Õë¶ÔÆÕͨ³ÌÐò¼¯µÄÒýÓÃ
2: .assembly extern Foobar
3: {
4: .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )
5: .ver 1:0:0:0
6: }

Õë¶ÔRetargetable³ÌÐò¼¯µÄÒýÓãº

1: .assembly extern retargetable Foobar
2: {
3: .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
4: .ver 1:0:0:0
5: }

ÀàÐ͵Ä×ªÒÆ

ÔÚ½øÐпò¼Ü»òÕß²úÆ·Éý¼¶¹ý³Ì£¬ÎÒÃǾ­³£»áÓöµ½Õë¶Ô³ÌÐò¼¯µÄºÏ²¢ºÍ²ð·ÖµÄ³¡¾°£¬±ÈÈçÔÚа汾ÖÐÐèÒª¶ÔÏÖÓеÄAPI½øÐдÓй滮£¬¿ÉÄܻὫ¶¨ÒåÔÚ³ÌÐò¼¯AÖж¨ÒåµÄÀàÐÍ×ªÒÆµ½³ÌÐò¼¯BÖС£µ«ÊǼ´Ê¹·¢ÉúÁËÕâÑùµÄÇé¿ö£¬ÎÒÃÇÒÀÈ»ÐèҪΪпò¼Ü»òÕß²úÆ·ÌṩÏòºó¼æÈݵÄÄÜÁ¦£¬Õâ¾ÍÐèҪʹÓõ½Ëùν¡°ÀàÐÍ×ªÒÆ£¨Type Forwarding£©¡±µÄÌØÐÔ¡£

ΪÁËÈöÁÕßÅóÓÑÃǶÔÀàÐÍ×ªÒÆÕâ¸öÖØÒªµÄÌØÐÔ¾ßÓÐÒ»¸ö´óÌåµÄÈÏʶ£¬ÎÒÃÇÀ´×÷Ò»¸ö¼òµ¥µÄʵÀýÑÝʾ¡£ÎÒÃÇÀûÓÃVisual Studio´´½¨Ò»¸öÕë¶Ô.NET Framework 3.5µÄ¿ØÖÆÌ¨Ó¦ÓÃApp£¬²¢ÔÚ×÷Ϊ³ÌÐòÈë¿ÚµÄMain·½·¨ÖбàдÁËÈçÏÂÁ½ÐдúÂ뽫Á½¸ö³£ÓõÄÀàÐÍ£¨StringºÍFunc<>£©ËùÔڵijÌÐò¼¯Ãû´òÓ¡³öÀ´¡£³ÌÐò±àÒëÖ®ºó»áÔÚ ¡°\bin\Debug¡± Ŀ¼ÏÂÉú³É¿ÉÖ´ÐÐÎļþApp.exeºÍ¶ÔÓ¦µÄÅäÖÃÎļþApp.exe.config¡£´ÓÈçϸø³öµÄÅäÖÃÎļþÄÚÈÝ¿ÉÒÔ¿´³ö.NET Framework 3.5²ÉÓõÄÔËÐÐʱ£¨CLR£©°æ±¾Îª ¡°v2.0.50727¡± ¡£

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

App.exe.config

1: <configuration>
2: <startup>
3: <supportedRuntime&nbsp; version="v2.0.50727"/></startup>
4: </startup>
5: </configuration>

ÏÖÔÚÎÒÃÇÖ±½ÓÒÔÃüÁîÐеÄÖ´ÐÐÖ´ÐбàÒëÉú³ÉµÄApp.exeºó»áÔÚ¿ØÖÆÌ¨Éϵõ½ÈçÏÂͼËùʾµÄÊä³ö½á¹û¡£¿ÉÒÔ¿´³ö¶ÔÓÚÎÒÃǸø³öµÄÕâÁ½¸ö»ù´¡ÀàÐÍ£¨StringºÍFunc<>£©£¬Ö»ÓÐStringÀàÐͱ»¶¨ÒåÔÚ³ÌÐò¼¯mscorlib.dllÖ®ÖУ¬¶øÀàÐÍFunc<>Æäʵ±»¶¨ÒåÔÚÁíÒ»¸ö½Ð×öSystem.Core.dllµÄ³ÌÐò¼¯Ö®ÖС£ÆäʵFramework 2.0¡¢3.0ºÍ3.5²»½ö½ö¹²ÏíÏàͬµÄÔËÐÐʱ£¨CLR 2.0£©£¬¶ÔÓÚÌṩ»ù´¡ÀàÐ͵ĺËÐijÌÐò¼¯mscorlib.dllÒ²Êǹ²ÏíµÄ£¬ÏÂͼÊä³öµÄ°æ±¾ÐÅÏ¢ÒѾ­ËµÃ÷ÁËÕâÒ»µã¡£Ò²¾ÍÊÇ˵£¬.NET Framework 2.0·¢²¼Ê±ÌṩµÄ³ÌÐò¼¯mscorlib.dllÔÚ.NET Framework 3.xʱ´ú¾ÍûÓÐÉý¼¶¹ý¡£Func<>ÀàÐÍÊÇÔÚ.NET Framework 3.5·¢²¼Ê±ÌṩµÄÒ»¸ö»ù´¡ÀàÐÍ£¬ËùÒÔ²»µÃ²»½«Ëü¶¨ÒåÔÚÒ»¸öÁíÒ»¸ö³ÌÐò¼¯ÖУ¬Î¢Èí½«Õâ¸ö³ÌÐò¼¯ÃüÁîΪSystem.Core.dll¡£

ÏÖÔÚÎÒÃÇ¿´¿´.NET Framework 4.0£¨CLR 4.0£©»·¾³ÏÂÔËÐÐͬһ¸öÓ¦ÓóÌÐò£¨App.exe£©ÊÇ·ñ»áÓв»Í¬µÄÊä³ö½á¹û¡£Îª´ËÎÒÃÇÔÚ²»¶ÔÏîÄ¿×öÖØÐ±àÒëÇé¿öÏÂÖ±½ÓÐÞ¸ÄÅäÖÃÎļþApp.exe.config£¬²¢°´ÕÕÈçÏÂËùʾµÄ·½Ê½½«ÔËÐÐʱ°æ±¾ÉèÖÃΪ4.0¡£

1: <configuration>
2: <startup>
3: <supportedRuntime&nbsp;version="v4.0"/>
4: </startup>
5: </configuration>

ÏÂͼÊÇͬһ¸öApp.exeÔÚ.NET Framework 4.0»·¾³ÏµÄÊä³ö½á¹û£¬¿ÉÒÔ¿´³öÎÒÃÇÌṩµÄÁ½¸ö»ù´¡ÀàÐÍËùÔڵijÌÐò¼¯¶¼ÊÇmscorlib.dll¡£Ò²¾ÍÊǵ±.NET FrameworkÉý¼¶µ½4.0Ö®ºó£¬²»½ö½öÔËÐÐʱÉý¼¶µ½ÁËȫеÄCLR 4.0£¬Î¢ÈíͬʱҲ¶Ô³ÐÔØ»ù´¡ÀàÐ͵Ämscorelib.dll³ÌÐò¼¯½øÐÐÁËÖØÐ¹滮£¬ËùÒÔ¶¨ÒåÔÚSystem.Core.dll³ÌÐò¼¯ÖеĻù´¡ÀàÐÍÒ²»ù±¾ÉÏÓÖÖØÐ»ص½ÁËmscorlib.dllÕâ¸ö±¾Ó¦¸ÃÊôÓÚËüµÄ³ÌÐò¼¯ÖС£

ÎÒÃÇÀ´¼ÌÐø·ÖÎöÉÏÃæÑÝʾµÄÕâ¸ö³ÌÐò¡£ÓÉÓÚApp.exeÕâ¸ö³ÌÐò¼¯×î³õÊÇÕë¶ÔÄ¿±ê¿ò¼Ü.NET Framework 3.5±àÒëÉú³ÉµÄ£¬ËùÒÔËüµÄÇåµ¥Îļþ½«°üº¬Õë¶Ômscorlib.dll£¨2.0.0.0£©ºÍSystem.Core.dll£¨3.5.0.0£©µÄ³ÌÐò¼¯ÒýÓá£ÏÂÃæµÄ´úÂëÆ¬¶ÎչʾÁËÕë¶ÔÕâÁ½¸ö³ÌÐò¼¯ÒýÓõÄÔªÊý¾ÝµÄ¶¨Òå¡£

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

µ±App.exeÔÚ.NET Framework 4.0»·¾³ÖÐÔËÐÐʱ£¬ÓÉÓÚËüµÄÔªÊý¾ÝÌṩµÄÊÇÕë¶ÔSystem.Core.dll³ÌÐò¼¯µÄÒýÓã¬ËùÒÔCLR×ÜÊÇÊÔͼ¼ÓÔØ¸Ã³ÌÐò¼¯²¢´ÓÖж¨Î»Ä¿±êÀàÐÍ£¨±ÈÈçÎÒÃÇÑÝʾʵÀýÖеÄÀàÐÍFunc<>£©¡£Èç¹ûµ±Ç°ÔËÐл·¾³ÎÞ·¨ÌṩÕâ¸ö³ÌÐò¼¯£¬ÄÇôºÁÎÞÒÉÎÊ£¬Ò»¸öFileNotFoundExceptionÀàÐ͵ÄÒì³£»á±»Å׳öÀ´¡£Ò²¾ÍÊÇ£¬ËäÈ»ÀàÐÍFunc<>ÔÚ.NET Framework 4.0ÖÐÒѾ­×ªÒƵ½ÁËеijÌÐò¼¯mscorlib.dllÖУ¬µ±Ç°»·¾³ÒÀÈ»»áÌṩһ¸öÎļþÃûΪSystem.Core.dllµÄ³ÌÐò¼¯¡£

System.Core.dll´æÔÚµÄÄ¿µÄÊǸæËßCLRËüÐèÒª¼ÓÔØµÄÀàÐÍÒѾ­·¢Éú×ªÒÆ£¬²¢½«¸ÃÀàÐÍËùÔÚµÄеijÌÐò¼¯Ãû³Æ¸æËßËü£¬ÄÇô.NET Framework 4.0»·¾³ÖеÄSystem.Core.dllÊÇÈçºÎÃèÊöÀàÐÍFunc<>ÒѾ­×ªÒƵ½³ÌÐò¼¯mscorelib.dllÖ®ÖÐÁËÄØ£¿Èç¹û·ÖÎö³ÌÐò¼¯System.Core.dllÖеÄÔªÊý¾Ý£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÈçÏÂÒ»¶ÎÓÚ´ËÏà¹ØµÄ´úÂë¡£ÔÚ³ÌÐò¼¯µÄÇåµ¥ÎļþÖУ¬Ã¿Ò»¸ö±»×ªÒƵÄÀàÐͶ¼¶ÔÓ¦Õâ¸öÕâôһ¸ö ¡°.class extern forwarder¡± Ö¸Áî¡£

1: .class extern forwarder System.Func`1
2: {
3: .assembly extern mscorlib
4: }

²»Í¬ÓÚÉÏÃæ½éÉܵÄRetargetable³ÌÐò¼¯£¬ÀàÐ͵Ä×ªÒÆ²¢²»ÊÇÖ»Õë¶Ô.NET FrameworkÌṩµÄ»ù´¡³ÌÐò¼¯£¬Èç¹ûÎÒÃÇ×Ô¼º¿ª·¢µÄÏîĿҲÐèÒªÌṩÀàËÆµÄÏòºó¼æÈÝÐÔ£¬Ò²¿ÉÒÔʹÓÃÕâ¸öÌØÐÔ¡£Õë¶ÔÀàÐÍ×ªÒÆÀàÐ͵ıà³Ìֻɿ¼°µ½Ò»¸öÀàÐÍΪTypeForwardedToAttributeµÄÌØÐÔ£¬½ÓÏÂÀ´ÎÒÃÇͨ¹ýÒ»¸ö¼òµ¥µÄʵÀýÀ´ÑÝʾһÏÂÈçºÎÀûÓÃÕâ¸öÌØÐÔ½«Ä³¸öÀàÐÍ×ªÒÆµ½Ò»¸öеijÌÐò¼¯ÖС£

ÎÒÃÇÀûÓÃVisual Studio´´½¨ÁËÈçÏÂͼËùʾµÄ½â¾ö·½°¸£¬ËüÑÝʾÁËÕâÑùÒ»¸ö³¡¾°£º¿ØÖÆÌ¨Ó¦ÓÃʹÓõ½ÁËV1°æ±¾µÄÀà¿âLib£¨v1\Lib£©£¬ÆäÖÐÉæ¼°µ½Ò»¸öºËÐÄÀàÐÍFoobar¡£¸ÃÀà¿âÉý¼¶µ½V2°æ±¾Ê±£¬ÎÒÃÇÑ¡Ôñ½«ËùÓеĺËÐÄÀàÐÍͳһ¶¨ÒåÔÚеijÌÐò¼¯Lib.CoreÖУ¬ËùÒÔÀàÐÍFoobarÐèÒª×ªÒÆµ½Lib.CoreÖС£×÷ΪÀà¿âµÄ·¢²¼Õߣ¬ÎÒÃÇÏ£ÍûʹÓõ½V1°æ±¾µÄÓ¦ÓÃÄܹ»Ö±½ÓÉý¼¶µ½V2°æ±¾£¬Ò²¾ÍÊÇÉý¼¶µÄÓ¦Óò»ÐèÒªÔÚÒýÓÃеÄLib.Core³ÌÐò¼¯Çé¿ö϶ÔÔ´´úÂë½øÐÐÖØÐ±àÒ룬¶øÊÇÖ±½Ó²¿ÊðV2°æ±¾µÄÁ½¸ö³ÌÐò¼¯£¨Lib.dllºÍLib.Core£©¾Í¿ÉÒÔÁË¡£

ÉÏͼÖеÄÐéÏß¼ýÍ·ºÍʵÏß¼ýÍ··Ö±ð´ú±íÏîĿ֮¼äµÄÒýÓùØÏµ£¬ÎÒÃÇ´ÓÖпÉÒÔ¿´³öv2Ŀ¼ÏµÄLibÏîÄ¿¾ßÓжÔLib.CoreÏîÄ¿µÄÒýÓã¬ÒòΪËüÐèÒªÒýÓÃ×ªÒÆµ½Lib.CoreÏîÄ¿ÖеÄÀàÐÍ¡£ÎªÁËÍê³ÉÕë¶ÔÀàÐÍFoobarµÄ×ªÒÆ£¬ÎÒÃÇÖ»ÐèÒªÔÚv2\LibÖж¨ÒåÈçÏÂÒ»Ðмòµ¥µÄ´úÂë¾Í¿ÉÒÔÁË£¬ÎÒÃǽ«ÕâÐдúÂ붨ÒåÔÚAssemblyInfo.csÎļþÖС£

[assembly: System.Runtime. CompilerServices.TypeForwardedTo (typeof(Lib.Foobar))]

ΪÁ˼ìÑéÕë¶ÔFoobarÀàÐ͵Ä×ªÒÆÊÇ·ñ³É¹¦£¬ÎÒÃÇÔÚ¿ØÖÆÌ¨Ó¦ÓÃAppÖж¨ÒåÁËÈçÏÂÒ»¶Î³ÌÐò£¬Ëü¸ºÔð½«FoobarÀàÐ͵±Ç°ËùÔÚ³ÌÐò¼¯µÄÃû³ÆÊä³öµ½¿ØÖÆÌ¨ÉÏ¡£½ÓÏÂÀ´ÎÒÃÇÖ»ÐèÒª±àÒ루ÒÔDebugģʽ£©Õû¸ö½â¾ö·½°¸£¬ÄÇôV2°æ±¾µÄÁ½¸ö³ÌÐò¼¯£¨Lib.dllºÍLib.Core.dll£©½«±£´æµ½\v2\lib\bin\debug\Ŀ¼Ï¡£

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

½ÓÏÂÀ´ÎÒÃDzÉÓÃÃüÁîÐеÄÐÎʽÀ´ÔËÐпØÖÆÌ¨³ÌÐòApp.exe¡£ÈçÏÂͼËùʾ£¬ÎÒÃǽ«µ±Ç°Ä¿Â¼Çл»µ½App.exeËùÔÚµÄĿ¼£¨\app\bin\debug£©Ï²¢Ö´ÐÐApp.exe£¬Êä³öµÄ½á¹û±íÃ÷FoobarÀàÐ͵±Ç°ËùÔڵijÌÐò¼¯ÎªLib.dll¡£½ÓÏÂÀ´ÎÒÃǽ«Õë¶ÔV2°æ±¾µÄÁ½¸ö³ÌÐò¼¯¿½±´½øÀ´ºóÔÙ´ÎÖ´ÐÐApp.exe£¬ÎÒÃÇ·¢ÏÖ´ËʱµÄFoobarÀàÐÍÒѾ­ÊÇ´ÓеijÌÐò¼¯Lib.Core.dllÖмÓÔØµÄÁË¡£

ÎÒÃÇ˳±ãÀ´²é¿´Ò»ÏÂV2°æ±¾³ÌÐò¼¯Lib.dllµÄÇåµ¥ÎļþµÄÄÚÈÝ¡£ÈçÏÂÃæµÄ´úÂëÆ¬¶ÎËùʾ£¬ÔÚÔ´´úÂëÖÐͨ¹ýʹÓÃTypeForwardedToAttributeÌØÐÔ¶¨ÒåµÄÀàÐÍ×ªÒÆÔÚ±àÒëÖ®ºó±»×ª»»³ÉÁËÒ»¸ö¡°.class extern forwarder¡±Ö¸Áî¡£

1: .assembly extern Lib.Core
2: {
3: .ver 1:0:0:0
4: }
5: .class extern forwarder Lib.Foobar
6: {
7: .assembly extern Lib.Core
8: }
9: ¡­

Èý¡¢¿ÉÒÆÖ²Àà¿â£¨PCL£©

ÔÚ.NET FrameworkµÄʱ´ú£¬´´½¨¿ÉÒÆÖ²Àà¿â£¨PCL£ºPortable Class Library£©ÊÇʵÏÖ¿ç¶à¸öÄ¿±ê¿ò¼Ü³ÌÐò¼¯¹²ÏíµÄΨһ;¾¶¡£ÉÏÃæ½éÉܵÄÄÚÈݶ¼ÊÇÔÚΪPCL×öÆÌµæ£¬Ö»Óгä·ÖÀí½âÁËRetargetable³ÌÐò¼¯ºÍÀàÐÍ×ªÒÆµÄǰÌáϲſÉÄÜÁ˽âPCLµÄʵÏÖÔ­ÀíÓÐÕýÈ·µÄÀí½â¡£¿¼Âǵ½ºÜ¶à¶ÁÕßÅóÓѲ¢Ã»ÓÐʹÓÃPCLµÄ¾­Àú£¬ËùÒÔÎÒÃÇÏÈÀ´½éÉÜÒ»ÏÂÈçºÎ´´½¨Ò»¸öPCLÏîÄ¿¡£ µ±ÎÒÃDzÉÓÃVisualization StudioµÄClass Library£¨Portal£©ÏîĿģ°å´´½¨Ò»¸öPCLÏîÄ¿µÄʱºò£¬ÐèÒªÔÚÈçÏÂͼËùʾµÄ¶Ô»°¿òÖÐÑ¡ÔñÖ§³ÖµÄÄ¿±ê¿ò¼Ü¼°Æä°æ±¾¡£Visual Studio»áΪн¨µÄÏîÄ¿Ìí¼ÓÒ»¸öÃûΪ ¡°.NET¡± µÄÒýÓã¬Õâ¸öÒýÓÃÖ¸ÏòÒ»¸öÓÉÑ¡¶¨Ä¿±ê¿ò¼Ü¾ö¶¨µÄ³ÌÐò¼¯ÁÐ±í¡£ÓÉÓÚÕâЩ³ÌÐò¼¯ÌṩµÄAPIÄܹ»¼æÈÝËùÓÐÑ¡ÔñµÄƽ̨£¬ÎÒÃÇÔÚ´Ë»ù´¡±àдµÄ³ÌÐò×ÔȻҲ¾ßÓÐÆ½Ì¨¼æÈÝÐÔ¡£

Èç¹û²é¿´Õâ¸öÌØÊâµÄ.NETÒýÓÃËùÔڵĵØÖ·£¬ÎÒÃǻᷢÏÖËüÖ¸ÏòĿ¼¡°%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETPortable\{version}\Profile\ProfileX¡±¡£Èç¹û²é¿´ ¡°%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETPortable¡± Ŀ¼£¬ÎÒÃǻᷢÏÖËü¾ßÓÐÈçÏÂͼËùʾµÄ½á¹¹¡£

ÈçÉÏͼËùʾ£¬±¾»úËùÔÚĿ¼¡°%ProgramFiles%\Reference Assemblies\Microsoft\Framework\.NETPortable¡±Ï¾ßÓÐÈý¸ö´ú±í.NET Framework°æ±¾µÄ×ÓĿ¼£¨v4.0¡¢v4.5ºÍv4.6£©¡£¾ßÌåµ½Õë¶Ôij¸ö.NET Framework°æ±¾µÄĿ¼£¨±ÈÈçv4.6£©£¬Æä×ÓĿ¼ProfileϾßÓÐһϵÁÐÒÔ ¡°Profile¡± + ¡°Êý×Ö¡± £¨±ÈÈçProfile31¡¢Profile32ºÍProfile44µÈ£©ÃüÃûµÄ×ÓĿ¼£¬Êµ¼ÊÉÏPCLÏîÄ¿ÒýÓõľÍÊÇ´æ´¢ÔÚÕâЩĿ¼ÏµijÌÐò¼¯¡£

¶ÔÓÚÁ½¸ö²»Í¬Æ½Ì¨µÄ.NET FrameworkÀ´Ëµ£¬ËüÃǵÄBCLÔÚAPIµÄ¶¨ÒåÉÏ´æÔÚ½»¼¯£¬´ÓÀíÂÛÉÏÀ´Ëµ£¬½¨Á¢ÔÚÕâ¸ö½»¼¯»ù´¡ÉϵijÌÐòÊÇ¿ÉÒÔ±»ÕâÁ½¸öƽ̨Öй²ÏíµÄ¡£ÈçÏÂͼËùʾ£¬Èç¹ûÎÒÃDZàдµÄ´úÂëÐèÒª·Ö±ð¶ÔWindows Desktop/Phone¡¢Windows Phone/StoreºÍWindows Store/Desktopƽ̨Ìṩ֧³Ö£¬ÄÇôÕâÑùµÄ´úÂëÒÀÀµµÄ²¿·Ö½öÏÞÓÚÁ½Á½µÄ½»¼¯A+B¡¢A+CºÍA+D¡£Èç¹ûÒªÇóÕⲿ·Ö´úÂëÄܹ»ÔËÐÐÔÚWindows Desktop/Phone/StoreÈý¸öƽ̨ÉÏ£¬ÄÇôËüÃÇÖ»Äܽ¨Á¢ÔÚÈýÕßÖ®¼äµÄ½»¼¯AÉÏ¡£

Õë¶ÔËùÓпÉÄܵÄÄ¿±ê¿ò¼Ü£¨°üÀ¨°æ±¾£©µÄ×éºÏ£¬Î¢Èí»á½«×÷ΪÁ½Õß½»¼¯µÄAPIÌáÈ¡³öÀ´²¢¶¨ÒåÔÚÏàÓ¦µÄ³ÌÐò¼¯ÖС£±ÈÈç˵ËùÓеÄÄ¿±ê¿ò¼Ü¶¼°üº¬Ò»¸öºËÐĵijÌÐò¼¯mscorlib.dll£¬ËäÈ»¶¨ÒåÆäÖеÄÀàÐͼ°Æä³ÉÔ±ÔÚ¸÷¸öÄ¿±ê¿ò¼Ü²»¾¡Ïàͬ£¬µ«ÊÇËüÃÇÖ®¼ä¿Ï¶¨´æÔÚ½»¼¯£¬Î¢ÈíÕë¶Ô²»Í¬µÄÄ¿±ê¿ò¼Ü×éºÏ½«ÕâЩ½»¼¯ÌáÈ¡³öÀ´²¢¶¨ÒåÔÚһϵÁÐͬÃû³ÌÐò¼¯ÖУ¬²¢Í¬ÑùÃüÃûΪmscorlib.dll¡£ ΢Èí°´ÕÕÕâÑùµÄ·½Ê½´´½¨ÁËÆäËûÕë¶Ô²»Í¬.NET Frameworkƽ̨×éºÏµÄ»ù´¡³ÌÐò¼¯£¬ÕâЩÕë¶Ôij¸ö×éºÏµÄËùÓгÌÐò¼¯¹¹³ÉһϵÁеÄProfile£¬²¢¶¨ÒåÔÚÉÏÃæÎÒÃÇÌáµ½¹ýµÄĿ¼Ï¡£ÖµµÃÒ»ÌáµÄÊÇ£¬ËùÓÐÕâЩÕë¶Ôij¸öProfileµÄ³ÌÐò¼¯¾ùΪRetargetable³ÌÐò¼¯¡£

µ±ÎÒÃÇ´´½¨Ò»¸öPCLÏîÄ¿µÄʱºò£¬µÚÒ»¸ö±ØÐèµÄ²½ÖèÊÇÑ¡Ôñ¼æÈݵÄÄ¿±ê¿ò¼Ü£¨ºÍ°æ±¾£©£¬Visual Studio»á¸ù¾ÝÎÒÃǵÄÑ¡ÔñÈ·¶¨Ò»¸ö¾ßÌåµÄProfile£¬²¢Îª´´½¨µÄÏîÄ¿Ìí¼ÓÕë¶Ô¸ÃProfileµÄ³ÌÐò¼¯ÒýÓá£ÓÉÓÚËùÓÐÒýÓõijÌÐò¼¯ÊǸù¾ÝÎÒÃÇÑ¡ÔñµÄÄ¿±ê¿ò¼Ü×éºÏ ¡°¶ÈÉí¶¨ÖÆ¡± µÄ£¬ËùÒÔ¶¨ÒåÔÚPCLÏîÄ¿µÄ´úÂë²Å¾ßÓпÉÒÆÖ²µÄÄÜÁ¦¡£

ÉÏÃæÎÒÃǽö½ö´Ó¿ª·¢µÄ½Ç¶È½âÊÍÁ˶¨ÒåÔÚPCLÏîÄ¿µÄ´úÂë±¾ÉíΪʲôÄܹ»È·±£ÊÇÓëÄ¿±ê.NET Frameworkƽ̨¼æÈݵ쬵«ÊÇÔÚÔËÐеĽǶÈÀ´¿´Õâ¸öÎÊÌ⣬ȴ´æÔÚ¶îÍâÁ½¸öÎÊÌ⣺

ÔªÊý¾ÝÃèÊöµÄÒýÓóÌÐò¼¯ÓëÕæÊµ¼ÓÔØµÄ³ÌÐò¼¯²»Ò»Ö£¬±ÈÈçÎÒÃÇ´´½¨Ò»¸ö¼æÈÝ.NET Framework 4.5ºÍSilverlight 5.0µÄPCLÏîÄ¿£¬±»ÒýÓõijÌÐò¼¯mscorlib.dllµÄ°æ±¾Îª2.0.5.0£¬µ«ÊÇSilverlight 5.0ÔËÐÐʱ»·¾³ÖеijÌÐò¼¯mscorlib.dllµÄ°æ±¾ÔòΪ5.0.5.0¡£

ÔªÊý¾ÝÃèÊöµÄÒýÓóÌÐò¼¯µÄÀàÐͶ¨ÒåÓëÔËÐÐʱ¼ÓÔØ³ÌÐò¼¯ÀàÐͶ¨Òå²»Ò»Ö£¬±ÈÈçÒýÓóÌÐò¼¯ÖеÄij¸öÀàÐͱ»×ªÒƵ½ÁËÁíÒ»¸ö³ÌÐò¼¯ÖС£

ÓÉÓÚPCLÏîÄ¿ÔÚ±àÒëʱÒýÓõľùΪRetargetable³ÌÐò¼¯£¬ËùÒÔ³ÌÐò¼¯µÄÖØ¶¨Ïò»úÖÆ°ïÖúÎÒÃǽâ¾öÁ˵ÚÒ»¸öÎÊÌâ¡£ÒòΪÔÚCLRÔÚ¼ÓÔØÄ³¸öRetargetable³ÌÐò¼¯µÄʱºò£¬Èç¹ûÕÒ²»µ½Ò»¸öÓëÒýÓóÌÐò¼¯ÔÚÎļþÃû¡¢°æ±¾¡¢ÓïÑÔÎÄ»¯ºÍ¹«Ô¿ÁîÅÆÍêȫƥÅäµÄ³ÌÐò¼¯£¬Ôò»áÖ»¿¼ÂÇÎļþÃûµÄÒ»ÖÂÐÔ¡£ÖÁÓÚµÚ¶þ¸öÎÊÌ⣬×ÔÈ»¿ÉÒÔͨ¹ýÉÏÃæÎÒÃǽéÉܵÄÀàÐÍ×ªÒÆ»úÖÆÀ´½â¾ö¡£

×ÛÉÏËùÊö£¬ËäȻ΢ÈíÔÚÕë¶Ô¶à¸öÄ¿±ê¿ò¼ÜµÄ´úÂ븴ÓÃÉÏÃæÎªÎÒÃÇÌṩÁËһЩ½â¾ö·½°¸¡£ÔÚÔ´´úÂë¹²Ïí·½Ãæ£¬ÎÒÃÇ¿ÉÒÔ²ÉÓù²ÏíÏîÄ¿£¬ËäÈ»¹²ÏíÏîÄ¿Äܹ»×öµ½½«Ò»×éÔ´Îļþ½øÐдò°ü¸´Ó㬵«ÊÇÎÒ¸öÈË»ù±¾Éϲ»ÔõôÓÃËü£¬ÒòΪÈç¹ûÎÒÃÇÔÚÆäÖж¨ÒåһЩ¹«ÓÐÀàÐÍ£¬ÄÇôÒýÓøù²ÏíÏîÄ¿µÄÏîĿ֮¼ä»áÔì³ÉÃüÃû³åÍ»¡£´ÓÁíÒ»·½Ãæ½²£¬ÎÒÃÇÕæÕýÐèÒªµÄÊdzÌÐò¼¯²ãÃæµÄ¸´Ó㬵«ÊÇÔÚÕâ·½ÃæÎ¢ÈíֻΪÎÒÃÇÌṩÁËPCL¡£PCLÕâÖÖ²ÉÓÃÌáȡĿ±ê¿ò¼ÜAPI½»¼¯µÄ·½Ê½×¢¶¨ÁËÖ»ÄÜÊÇÒ»ÖÖÁÙʱµÄ½â¾ö·½°¸£¬ÊÔ×ÅÏëһϣºÈç¹ûÄ¿±ê¿ò¼ÜÓÉ10ÖÖ£¬Ã¿ÖÖÓÐ3¸ö°æ±¾£¬ÎÒÃÇÐèҪΪ¶àÉÙÖÖ×éºÏ´´½¨ÏàÓ¦µÄProfile¡£¶ÔÓÚ¿ª·¢ÕßÀ´Ëµ£¬Èç¹ûÄ¿±ê¿ò¼Ü£¨°üÀ¨°æ±¾£©£¬ÎÒÃÇÔÚ´´½¨PCLÏîÄ¿½øÐмæÈÝ¿ò¼ÜµÄÑ¡Ôñ¶¼»á³ÉÎÊÌâ¡£ËùÒÔÎÒÃÇÕë¶ÔÏ£ÍûµÄÊÇÄܹ»Ìṩ¸øÈ«Æ½Ì¨Ö§³ÖµÄBCL£¬Äã¿ÉÒÔÒѾ­ÖªµÀÁË£¬Õâ¾ÍÊÇNet Standard£¬ÄÇôNet StandardÊÇÈçºÎÄܹ»ÔÚ¶à¸öÄ¿±ê¿ò¼ÜÖи´ÓõÄÄØ£¿ÇëÇó¹Ø×¢±¾ÏµÁÐÖÕ½áÆª¡¶.NET Core¿çƽ̨µÄ°ÂÃØ[ÏÂÆª]£ºÈ«ÐµIJ¼¾Ö¡·¡£

   
4410 ´Îä¯ÀÀ       28
 
Ïà¹ØÎÄÕÂ

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

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

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