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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
CTK Plugin Framework »ù±¾Ô­Àí
 
×÷ÕßêdzƣºÒ»È¥Ø¼¶þÈýÀï
  3631  次浏览      29
 2021-3-18 
 
±à¼­ÍƼö:

±¾ÎÄÖ÷ÒªCTK Plugin FrameworkÊÇʲô£¿ËüµÄÌåϵ½á¹¹£¬·þÎñ²ãÒÔ¼°ËüµÄÉúÃüÖÜÆÚµÈµÈÏà¹ØÄÚÈÝ¡£
ÎÄÕÂÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûAnna±à¼­ÍƼö¡£

¡°CTK Plugin Framework ¼¼ÊõÊÇÃæÏò C++ µÄ¶¯Ì¬Ä£ÐÍϵͳ¡£¸ÃϵͳÔÊÐí²å¼þÖ®¼äµÄËÉÉ¢ñîºÏ£¬²¢ÇÒÌṩÁËÉè¼ÆÁ¼ºÃµÄ·½Ê½À´½øÐй¦ÄܺÍÊý¾ÝµÄ½»»¥¡£´ËÍ⣬ËüûÓÐÔ¤ÏȶԲå¼þÊ©¼ÓÏÞÖÆ£¬ÕâÑù¾Í¿ÉÒÔºÜÈÝÒ׵ؽ«²å¼þµÄÏà¹Ø²¿·ÖǶÈëµ½ÏÖÓеŤ¾ß°üÖС£¡±

Ìåϵ¼Ü¹¹

CTK Plugin Framework Éè¼ÆÊܵ½ÁË OSGi£¨Java µÄ¶¯Ì¬×é¼þϵͳ£©µÄ¼«´óÆô·¢£¬²¢ÇÒËüÌṩÁËÒ»ÖÖÄÜÈÃÓ¦ÓóÌÐò£¨¶¯Ì¬µØ£©ÓÉÐí¶à²»Í¬µÄ£¨¿ÉÖØÓã©×é¼þ×é³ÉµÄ¿ª·¢Ä£ÐÍ¡£¸ÃÄ£ÐÍÔÊÐíͨ¹ý·þÎñ½øÐÐͨÐÅ£¬·þÎñÊÇÌØ¶¨ÓÚ×é¼þÖ®¼äµÄ¶ÔÏó¡£

¿ò¼ÜµÄ·Ö²ãÄ£ÐÍ£¬ÈçÏÂͼËùʾ£º

Plugins£¨²å¼þ£©£ºÓÉ¿ª·¢ÈËÔ±´´½¨µÄ CTK ×é¼þ£»

Services Layer£¨·þÎñ²ã£©£ºÍ¨¹ýΪ C++ ¶ÔÏóÌṩһ¸ö publish-find-bind Ä£ÐÍ£¬ÒÔ¶¯Ì¬·½Ê½Á¬½Ó²å¼þ£»

Life Cycle Layer£¨ÉúÃüÖÜÆÚ²ã£©£ºÓÃÓÚ°²×°¡¢Æô¶¯¡¢Í£Ö¹¡¢¸üкÍÐ¶ÔØ²å¼þµÄ API£»

Security£¨°²È«ÐÔ£©£º´¦Àí°²È«·½Ã棨ĿǰÉв»¿ÉÓã©¡£

²å¼þ

Plugin ÊÇ CTK Plugin Framework µÄºËÐÄ£¬Ä£¿é»¯ÌØÐÔÔÚÕâÒ»²ãµÃµ½Á˺ܺõÄʵÏÖ¡£ÄÇô£¬¾¿¾¹Ê²Ã´ÊÇ Plugin£¿

Plugin£ºÊÇ»ùÓÚ C++/Qt µÄÒ»¸ö¹²Ïí¿â£¬²¢°üº¬ÁË×ÊÔ´ÎļþºÍÔªÊý¾Ý£¨metadata£©¡£

ÔªÊý¾ÝµÄÄ¿µÄÔÚÓÚ׼ȷÃèÊö Plugin µÄÌØÕ÷£¬³ýÁËÈà CTK Plugin Framework ¶Ô Plugin Êʵ±µØ½øÐи÷ÖÖ´¦Àí£¨ÀýÈ磺ÒÀÀµ½âÎö£©Ö®Í⣬»¹ÄܸüºÃµÄ¶Ô Plugin ½øÐбêʶ£¬ÒÔ°ïÖúÓû§¶Ô Plugin ½øÐÐÀí½â¡£

ÔªÊý¾Ý±»¶¨ÒåÔÚ MANIFEST.MF ÎļþÖУ¬Ò»¸öµäÐ굀 MANIFEST.MF ÎļþÈçÏ£º

Plugin-SymbolicName:HelloCTK
Plugin-ActivationPolicy:eager
Plugin-Category:Demos
Plugin-ContactAddress:https://github.com/Waleon
Plugin-Description:A plugin for say hello
Plugin-Name:HelloCTK
Plugin-Vendor:Waleon
Plugin-Version:1.0.0

ËäÈ»ÌõÄ¿Öڶ࣬µ«²¢·ÇËùÓеͼÊDZØÐëµÄ¡£ÕâЩԪÊý¾ÝÖ÷Òª°üº¬Á½²¿·Ö£º

Plugin µÄ±êʶ·û£¨±ØÐ룩£ºÎ¨Ò»±êʶһ¸ö Plugin£¬ÓÉ Plugin-SymbolicName ±íʾ¡£

¿É¶ÁµÄÐÅÏ¢£¨¿ÉÑ¡£©£º°ïÖú¸üºÃµØÀí½âºÍʹÓà Plugin£¬²»¶ÔÄ£¿é»¯ÌØÐÔ²úÉúÈκεÄÓ°Ïì¡£

¶ÔÓÚ¿ÉÑ¡ÐÅÏ¢£¨ÀýÈ磺Plugin-Name¡¢Plugin-Vendor µÈ£©£¬CTK Plugin Framework ÉõÖÁ»áÎÞÊÓÕâЩÄÚÈÝ¡£

·þÎñ²ã

·þÎñ¿ÉÒÔ¿´×÷ÊÇ·þÎñµÄÌṩÕߺÍʹÓÃÕßÖ®¼äµÄÒ»¸öÆõÔ¼£¬Ê¹ÓÃÕßÒ»°ã²»¹ØÐÄÆäʵÏÖµÄϸ½Ú£¬Ö»ÒªÂú×ãÕâ¸öÆõÔ¼£¨·þÎñÓ¦¸ÃÌṩʲô¹¦ÄÜ¡¢Âú×ãʲô¸ñʽ£©¾ÍºÃÁË¡£Ê¹Ó÷þÎñµÄ¹ý³ÌÒ²°üº¬ÁË·¢ÏÖ·þÎñºÍ´ï³ÉЭÒéµÄÐÎʽ£¬Ò²¾ÍÊÇ˵£¬ÐèҪͨ¹ý·þÎñµÄ±êÖ¾ÐÔÌØÕ÷À´ÕÒµ½¶ÔÓ¦µÄ·þÎñ¡£

Ò»¸ö²å¼þ¿ÉÒÔ´´½¨Ò»¸ö¶ÔÏ󣬲¢ÔÚÒ»¸ö»ò¶à¸ö½Ó¿Ú£¨Í¨³£ÊÇÒ»¸öÖ»Óд¿Ðé·½·¨µÄ C++ ÀࣩÏÂʹÓà CTK Service Registry ×¢²áËü¡£ÆäËû²å¼þ¿ÉÒÔÒªÇó registry ÁгöÔÚÌØ¶¨½Ó¿ÚÏÂ×¢²áµÄËùÓзþÎñ£¨¶ÔÏ󣩡£Ò»¸ö²å¼þÉõÖÁ¿ÉÒԵȴýÒ»¸öÌØ¶¨µÄ·þÎñ³öÏÖ£¬È»ºóÊÕµ½»Ø¸´¡£

Òò´Ë£¬Ò»¸ö²å¼þ¿ÉÒÔ×¢²áÒ»¸ö·þÎñ£¬Ò²¿ÉÒÔ»ñµÃÒ»¸ö·þÎñ²¢ÕìÌý·þÎñµÄ³öÏÖ»òÏûʧ¡£ÈÎÒâÊýÁ¿µÄ²å¼þ¿ÉÒÔÔÚÏàͬµÄ½Ó¿ÚÏÂ×¢²á·þÎñ£¬²¢ÇÒÈÎÒâÊýÁ¿µÄ²å¼þ¶¼¿ÉÒԵõ½ÏàͬµÄ·þÎñ£¬ÈçÏÂͼ£¨publish-find-bind Ä£ÐÍ£©Ëùʾ£º

Èç¹û¶à¸ö²å¼þÔÚͬһ¸ö½Ó¿ÚÏÂ×¢²á¶ÔÏó£¬Ôò¿ÉÒÔͨ¹ýÆäÊôÐÔ½øÐÐÇø·Ö¡£Ã¿¸ö·þÎñ×¢²á¶¼ÓÐÒ»Ì×±ê×¼µÄ×Ô¶¨ÒåÊôÐÔ£¬¿ÉÒÔʹÓùýÂËÆ÷À´Ñ¡Ôñ¸ÐÐËȤµÄ·þÎñ¡£ÊôÐÔÒ²¿ÉÒÔ±»ÓÃÓÚÓ¦ÓóÌÐò¼¶µÄÆäËû½ÇÉ«¡£

·¢²¼·þÎñ

ΪÁËÈÃÆäËü Plugin ÄÜ·¢ÏÖÕâ¸ö·þÎñ£¬±ØÐëÓÃÉÏÏÂÎÄ¶ÔÆä½øÐÐ×¢²á£¬ÐèÒªÓõ½½Ó¿ÚÃû¡¢·þÎñ¶ÔÏ󣨽ӿڵľßÌåʵÏÖ£©ºÍÒ»¸ö¿ÉÑ¡µÄ ctkDictionary ÀàÐ͵ÄÊôÐÔÐÅÏ¢£º

ctkDictionary properties;
properties.insert("name","Waleon");
properties.insert("age",18);
ctkServiceRegistration registration=context-> registerService< HelloService>(new HelloImpl(),properties);

ÕâÑù£¬±ã¿ÉÒԵõ½Ò»¸ö ctkServiceRegistration ¶ÔÏ󣬿ÉÒÔÓÃÕâ¸ö¶ÔÏóÀ´¸üзþÎñµÄÊôÐÔ£º

registration.setProperties (newProperties);

Ò²¿ÉÒÔÖ±½Ó°ÑÕâ¸ö·þÎñÒÆ³ý£º

registration.unregister();

×¢Ò⣺Õâ¸ö registration ¶ÔÏó²»ÄÜºÍÆäËû Plugin ¹²Ïí£¬ÒòΪËüºÍ·¢²¼·þÎñµÄ Plugin µÄÉúÃüÖÜÆÚÏ໥ÒÀ´æ¡£Ò²¾ÍÊÇ˵£¬Èç¹ûÕâ¸ö Plugin ÒѾ­²»´æÔÚÓÚ¿ò¼ÜÖ´Ðл·¾³ÖУ¬ÄÇôÕâ¸ö¶ÔÏóÒ²²»Ó¦¸Ã´æÔÚÁË¡ª¡ª ¡°Æ¤Ö®²»´æ£¬Ã«½«Ñɸ½¡±¡£

´ËÍ⣬Èç¹ûÔÚɾ³ý·¢²¼µÄ·þÎñ֮ǰ Plugin Í£Ö¹ÁË£¬¿ò¼Ü»á°ïÖúÄãɾ³ýÕâЩ·þÎñ¡£

»ñÈ¡·þÎñ

Ò»µ©·þÎñ±»·¢²¼£¬Ëü½«¶ÔÆäËû Plugin ¿ÉÓ᣻ñÈ¡·þÎñµÄ·½Ê½·Ç³£¼òµ¥£¬Ö»ÐèÒªÌṩһ¸ö½Ó¿ÚÃû¼´¿É£º

ctkServiceReference reference = context-> getServiceReference <HelloService>();

×¢Ò⣺ÕâÀïµÄ reference ÊÇ·þÎñ¶ÔÏóµÄ¼ä½ÓÒýÓ㬿ÉΪʲôҪÓüä½ÓÒýÓöø²»Ö±½Ó·µ»ØÊµ¼ÊµÄ·þÎñ¶ÔÏóÄØ£¿

ʵ¼ÊÉÏ£¬ÕâÊÇΪÁ˽«·þÎñµÄʹÓúͷþÎñµÄʵÏÖ½øÐнâñî¡£½«·þÎñ×¢²á±í×÷ΪÁ½ÕßµÄÖмäÈË£¬²»½öÄܹ»´ïµ½¸ú×ٺͿØÖÆ·þÎñµÄÄ¿µÄ£¬Í¬Ê±»¹¿ÉÒÔÔÚ·þÎñÏûʧÒÔºó֪ͨʹÓÃÕß¡£

Õâ¸ö·½·¨µÄ·µ»ØÀàÐÍÊÇ ctkServiceReference£¬Ëü¿ÉÒÔÔÚ Plugin Ö®¼ä»¥Ïí£¬ÒòΪËüºÍʹÓ÷þÎñµÄ Plugin µÄÉúÃüÖÜÆÚÎ޹ء£

ÉúÃüÖÜÆÚ²ã

ÉúÃüÖÜÆÚ²ãÖ÷ÒªÓÃÓÚ¿ØÖÆ Plugin µÄ°²×°¡¢Æô¶¯¡¢Í£Ö¹¡¢¸üкÍÐ¶ÔØ£¬Ëü¿ÉÒÔÈÃÎÒÃÇ´ÓÍⲿ¹ÜÀíÓ¦ÓûòÕß½¨Á¢Äܹ»×ÔÎÒ¹ÜÀíµÄÓ¦Ó㨻ò½«Á½ÕßÏà½áºÏ£©£¬²¢ÇÒ¸øÁËÓ¦Óñ¾ÉíºÜ´óµÄ¶¯Ì¬ÐÔ¡£

Ç°ÃæÒѾ­Á˽âÁË Plugin µÄ¸ÅÄîºÍ×÷Ó㬵«ÒªÕæÕýʹÓà Plugin£¬ÔòÐèҪʹÓÃÉúÃüÖÜÆÚ²ãµÄ API À´ºÍ CTK Plugin Framework µÄÉúÃüÖÜÆÚ²ã½øÐн»»¥¡£

ÏÂͼΪ Plugin ÉúÃüÖÜÆÚµÄ״̬ת»»Í¼£º

ÉúÃüÖÜÆÚ²ãµÄ API Ö÷ÒªÓÉÈý¸öºËÐIJ¿·Ö×é³É£ºctkPluginActivator¡¢ctkPluginContext ºÍ ctkPlugin¡£

ctkPluginActivator

ctkPluginActivator£º×Ô¶¨Òå plugin µÄÆô¶¯ºÍÍ£Ö¹¡£

ctkPluginActivator ÊÇÒ»¸ö½Ó¿Ú£¬±ØÐëÓÉ¿ò¼ÜÖеÄÿ¸ö²å¼þʵÏÖ¡£¿ò¼Ü¿ÉÒÔ¸ù¾ÝÐèÒª´´½¨Ò»¸ö²å¼þµÄ ctkPluginActivator ʵÀý¡£Èç¹ûÒ»¸öʵÀýµÄ?ctkPluginActivator::start()?·½·¨³É¹¦Ö´ÐУ¬ÔòÐèÒª±£Ö¤ÔÚ²å¼þֹͣʱµ÷ÓÃͬһ¸öʵÀýµÄ?ctkPluginActivator::stop()?·½·¨¡£

ctkPluginContext

ctkPluginContext£ºÒ»¸ö plugin ÔÚ¿ò¼ÜÄÚµÄÖ´ÐÐÉÏÏÂÎÄ£¬¸ÃÉÏÏÂÎÄÓÃÓÚÊÚÓè¶ÔÆäËû·½·¨µÄ·ÃÎÊ£¬ÒÔ±ã¸Ã²å¼þ¿ÉÒÔÓë¿ò¼Ü½»»¥¡£

ctkPluginContext ÌṩµÄ·½·¨ÔÊÐí²å¼þ£º

¶©ÔÄÓÉ¿ò¼Ü·¢²¼µÄʼþ£»

ʹÓà Framework Service Registry ×¢²á·þÎñ¶ÔÏó£»

´Ó Framework Service Registry ¼ìË÷ ServiceReferences£»

ΪÒýÓõķþÎñ»ñÈ¡ºÍ·¢²¼·þÎñ¶ÔÏó£»

ÔÚ¿ò¼ÜÖа²×°ÐµIJå¼þ£»

»ñÈ¡¿ò¼ÜÖа²×°µÄ²å¼þÁÐ±í£»

»ñµÃÒ»¸ö²å¼þµÄ ctkPlugin ¶ÔÏó£»

Ϊ£¨ÓÉ¿ò¼ÜΪ²å¼þÌṩµÄ£©³Ö¾Ã´æ´¢ÇøÓòÖÐΪÎļþ´´½¨ QFile ¶ÔÏó¡£

µ±Ê¹ÓÃ?ctkPluginActivator::start()?·½·¨Æô¶¯Ê±£¬½«´´½¨Ò»¸ö ctkPluginContext ¶ÔÏ󣬲¢½«ÆäÌṩ¸øÓë´ËÉÏÏÂÎĹØÁªµÄ²å¼þ¡£µ±Ê¹ÓÃ?ctkPluginActivator::stop()?·½·¨Í£Ö¹Ê±£¬ÏàͬµÄ ctkPluginContext ¶ÔÏ󽫱»´«µÝ¸øÓë´ËÉÏÏÂÎĹØÁªµÄ²å¼þ¡£ctkPluginContext ¶ÔÏóͨ³£ÓÃÓÚÆä¹ØÁª²å¼þµÄ˽ÓÐÓÃ;£¬²¢²»Òâζ×ÅÓë²å¼þ»·¾³ÖÐµÄÆäËû²å¼þ¹²Ïí¡£

Óë ctkPluginContext ¶ÔÏó¹ØÁªµÄ ctkPlugin ¶ÔÏó³ÆÎªÉÏÏÂÎIJå¼þ¡£

ctkPluginContext ¶ÔÏóÖ»ÓÐÔÚËüµÄÉÏÏÂÎIJå¼þÖ´ÐÐʱ²ÅÓÐЧ£»Ò²¾ÍÊÇ˵£¬ÔÚÉÏÏÂÎIJå¼þ´¦ÓÚ STARTING¡¢STOPPING¡¢ºÍ ACTIVE ״̬µÄʱ¶ÎÄÚ¡£Èç¹ûËæºóʹÓà ctkPluginContext ¶ÔÏó£¬Ôò±ØÐëÅ׳öÒ»¸ö ctkIllegalStateException Òì³£¡£µ±ÉÏÏÂÎIJå¼þÍ£Ö¹ºó£¬ctkPluginContext ¶ÔÏó²»Äܱ»ÖØÓá£

Framework ÊÇΨһÄܹ»´´½¨ ctkPluginContext ¶ÔÏóµÄʵÌ壬²¢ÇÒÕâЩ¶ÔÏó½öÔÚ´´½¨ËüÃÇµÄ Framework ÖÐÓÐЧ¡£

ctkPlugin

ctkPlugin£ºFramework ÖÐÒѰ²×°µÄ²å¼þ¡£

ctkPlugin ¶ÔÏóÊǶ¨ÒåÒ»¸öÒѰ²×°²å¼þµÄÉúÃüÖÜÆÚµÄ·ÃÎʵ㣬ÔÚ²å¼þ»·¾³Öа²×°µÄÿ¸ö²å¼þ¶¼±ØÐëÓÐÒ»¸öÏà¹ØµÄ ctkPlugin ¶ÔÏó¡£´ËÍ⣬²å¼þ±ØÐëÓÐÒ»¸öΨһµÄ±êʶ£¬ÔÚ²å¼þµÄÉúÃüÖÜÆÚÖУ¬Õâ¸ö±êʶ²»Äܸı䣨¼´Ê¹ÊÇÔÚ²å¼þ¸üÐÂʱ£©£¬Ð¶ÔغÍÖØÐ°²×°²å¼þ±ØÐë´´½¨Ò»¸öеÄΨһ±êʶ¡£

²å¼þÓÐÒÔÏÂ״̬£¨×´Ì¬ÊǶ¯Ì¬¿É±äµÄ£¬ÕâЩ״̬ÔÚÌØ¶¨Ìõ¼þÏ¿ÉÒÔ»¥Ïàת»»£¬¼ûÉÏͼ£©£º

UNINSTALLED

INSTALLED

RESOLVED

STARTING

STOPPING

ACTIVE

Ҫȷ¶¨²å¼þÊÇ·ñ´¦ÓÚÓÐЧ״̬֮һ£¬¿ÉÒÔʹÓà States ÀàÐͽøÐС°»ò¡±ÔËËã¡£

²å¼þÖ»ÄÜÔÚ״̬Ϊ STARTING¡¢ACTIVE »ò STOPPING ״̬ʱִÐдúÂë¡£Ò»¸ö UNINSTALLED ²å¼þ²»Äܱ»ÉèÖÃΪÁíÒ»¸ö״̬£¬ËüÊÇÒ»¸ö¡°½©Ê¬¡±¡£

Framework ÊÇΨһÔÊÐí´´½¨ ctkPlugin ¶ÔÏóµÄʵÌ壬²¢ÇÒÕâЩ¶ÔÏó½öÔÚ´´½¨ËüÃÇµÄ Framework?ÄÚÓÐЧ¡£

   
3631 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

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

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

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
.NET Core 3.0 Õýʽ¹«²¼£ºÐÂÌØÐÔÏêϸ½â¶Á
.NET Core²¿ÊðÖÐÄã²»Á˽âµÄ¿ò¼ÜÒÀÀµÓë¶ÀÁ¢²¿Êð
C# eventḬ̈߳²È«
¼òÎö .NET Core ¹¹³ÉÌåϵ
C#¼¼ÊõÂþ̸֮À¬»ø»ØÊÕ»úÖÆ(GC)
×îпγÌ
.NetÓ¦Óÿª·¢
C#¸ß¼¶¿ª·¢¼¼Êõ
.NET ¼Ü¹¹Éè¼ÆÓëµ÷ÊÔÓÅ»¯
ASP.NET Core Web ¿ª·¢
ASP.Net MVC¿ò¼ÜÔ­ÀíÓëÓ¦Óÿª·¢
³É¹¦°¸Àý
º½Ìì¿Æ¹¤¼¯ÍÅ×Ó¹«Ë¾ DotNetÆóÒµ¼¶Ó¦ÓÃÉè¼ÆÓ뿪·¢
ÈÕÕÕ¸Û¼¯ .NET Framewor
Éñ»ªÐÅ .NETµ¥Ôª²âÊÔ
̨´ïµç×Ó .NET³ÌÐòÉè¼ÆÓ뿪·¢
Éñ»ªÐÅÏ¢ .NETµ¥Ôª²âÊÔ