ʹÓÃ.NETÃüÁîÐбàÒëÆ÷±àÒëÏîÄ¿£¨ÈçASP.NET¡¢C#µÈ£© |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¡¡¡¡±¾ÎıêÇ©£ºNET,ÃüÁîÐÐ,±àÒëÆ÷,±àÒëÏîÄ¿ Ô´³ÌÐò×îºÃÓÐ.csproj»ò.vbprojÎļþ£¬Ã»Óеϰ£¬Òª»¨Ð©Ê±¼äµ÷ÊÔ ÏÂÃæÎÒÒÔVB.NET×öʾÀý½²½âһϣº ¡¡¡¡ ´ÓprojÎÒÃÇ¿ÉÒÔ»ñÈ¡ÒÔÏÂÓÐÓÃÐÅÏ¢ ¡¡¡¡ SettingsС½ÚÖÐÓкܶàÅäÖÃÑ¡Ï¶ÔӦһЩ±àÒëÆ÷Ñ¡Ïî <References>С½ÚÖÐÊÇÏîÄ¿µÄÒýÓ㬵Ú3·½Àà¿â×îºÃÓþø¶Ô·¾¶ <Imports>С½ÚÖÐÊÇÒªµ¼ÈëµÄһЩÃüÃû¿Õ¼ä <Files>С½ÚÖÐÓÐÏîÄ¿µÄËùÓÐÎļþ£¬Ñ¡È¡ BuildAction = "Compile"µÄÎļþ ¡¡¡¡ ÓÃvbc²âÊÔÁËһϣ¬ºÜÈÝÒ×£¬×¢ÒâÒÔϼ¸Ï rootnamespace reference target imports ¡¡¡¡ ¼ÓÉÏbugreport¿ÉÒÔ½«ËùÓеÄÔ´Îļþ´úÂëºÍbug±¨¸æÊä³ö ¡£²»´í ¡¡¡¡ ¸øÄãÒ»¶Ë±àÒëʾÀý£º vbc /r:System.dll /r:System.Data.dll /r:System.Drawing.dll /r:System.Web.dll /r:System.Xml.dll /r:bin\Microsoft.ApplicationBlocks.Data.dll /r:bin\ExportTechnologies.WebControls.RTE.dll /imports:Microsoft.VisualBasic /imports:System /imports:System.Collections /imports:System.Configuration /imports:System.Data /imports:System.Drawing /imports:System.Web /imports:System.Web.UI /imports:System.Web.UI.HtmlControls /imports:System.Web.UI.WebControls /imports:MMS /rootnamespace:MMS /t:library /out:Truly.MMS.dll /bugreport:bug.log AssemblyInfo.vb Global.asax.vb HDAdd.aspx.vb HDticketLogAdd.aspx.vb MIS.vb PageBase.vb Utils.vb ¡¡¡¡ Èç¹ûûÓÐprojÎļþ£¬ÄÇô¿ÉÒÔÓÃÏÂÃæµÄÃüÁî»ñÈ¡£º dir /b *.vb > filelist.txt cscµÄʹÓ÷½·¨¾Í¿¿Äã×Ô¼ºÈ¥×ÁÄ¥ÁË ¡£ÕâÑù±àÒë³öÀ´µÄ¸úvsÊÇÓÐ1µãÇø±ðµÄ£¬ÒòΪÎÒÃǺܶàÑ¡ÏîûÓÐÅäÖ㬵«ÊǾ¹ý²âÊÔ£¬»ù±¾¿ÉÒÔÕý³£¹¤×÷µÄ ¡£
ʹÓà C# 2.0 ÃüÁîÐбàÒëÆ÷ http://msdn.microsoft.com/zh-cn/library/ms379563(vs.80).aspx#mainSection ÕªÒª£º±¾ÎÄ·ÖÎöÁËʹÓà C# ÃüÁîÐбàÒëÆ÷ csc.exe Éú³ÉÓ¦ÓóÌÐòµÄ¹ý³Ì ¡£Í¬Ê±£¬»¹½«Ïò¶ÁÕß½éÉܺܶàΪ C# 2.0 ¶ÀÓеıàÒëÆ÷Ñ¡ÏÀýÈ磬extended/reference ±êÖ¾ºÍÇ¿Ãû³ÆÖ§³Ö ¡£ÔĶÁÍê±¾ÎĵÄÄÚÈÝÖ®ºó£¬Äú½«Äܹ»ÇáËɵØÔÚûÓÐÏòµ¼µÄ»·¾³ÖÐÉú³Éµ¥Îļþ³ÌÐò¼¯ºÍ¶àÎļþ³ÌÐò¼¯ ¡£ ÊÊÓÃÓÚ£º Microsoft Visual C# 2.0 ×¢ ±¾Îļٶ¨ÄúÊìϤ C# ±à³ÌÓïÑÔºÍ .NET Framework µÄ½á¹¹ ¡£ÌåÑéÒ»ÏÂʹÓÃÃüÁîÐй¤¾ßµÄ¸Ð¾õ»¹½«Ö¤Ã÷ºÜÓаïÖú ¡£ ÏÂÔØ CSCSample.msi Îļþ ¡£
scsc.exe ´øÀ´µÄÀÖȤ ¼¸ºõûÓÐÈË»á·ñÈϼ¯³É¿ª·¢»·¾³ (IDE)£¨ÀýÈ磬Visual Studio 2005 ºÍ Visual C# Express 2005£©ËùÌṩµÄÄÜʹ±à³Ì¹¤×÷±äµÃÏ൱¼òµ¥µÄÖî¶à¹¦ÄÜ ¡£µ«ÊÇ£¬Êµ¼ÊÉÏ IDE ×Ô¼ºÍ¨³£²»ÄÜÌṩ¶Ô»ù´¡±àÒëÆ÷µÄËùÓз½ÃæµÄ·ÃÎÊ ¡£ÀýÈ磬Visual Studio 2005 ²»Ö§³ÖÉú³É¶àÎļþ³ÌÐò¼¯ ¡£ ´ËÍ⣬Á˽âÔÚÃüÁîÐбàÒë´úÂëµÄ¹ý³Ì£¬¶ÔÓÚ¾ßÓÐÒÔÏÂÌØÕ÷µÄÓû§¿ÉÄÜÓÐÓãº
Èç¹ûÄúÊôÓÚÉÏÃæËùÊöµÄÕâЩÓû§£¬ÄÇô¾ÍÖÒʵÓÚ×Ô¼ºµÄÑ¡Ôñ²¢¼ÌÐø¶ÁÏÂÈ¥°É ¡£ C# ±àÒëÆ÷Ñ¡Ïî¸ÅÀÀC# ±àÒëÆ÷ csc.exe ÌṩÁË´óÁ¿ÓÃÓÚ¶Ô´´½¨ .NET ³ÌÐò¼¯µÄ·½Ê½½øÐпØÖƵÄÑ¡Ïî ¡£Õ¾ÔÚÒ»¸ö½Ï¸ß²ã´ÎÀ´¿´£¬ÃüÁîÐÐÑ¡ÏîÊôÓÚÏÂÁа˸öÀà±ðÖ®Ò»£¨±í 1£© ¡£ ±í 1. csc.exe ÌṩµÄ±ê¼ÇµÄÀà±ð
×¢ 1.0 ºÍ 1.1 °æ±¾µÄ C# ±àÒëÆ÷ÖдæÔÚµÄ /incremental ±êÖ¾ÏÖÔÚÒѹýʱ ¡£ ÔÚÔĶÁ±¾ÎĵĹý³ÌÖУ¬Äú½«Á˽âÿ¸ö±àÒëÆ÷Àà±ðÖдæÔڵĺËÐÄ ±êÖ¾£¨×îÖØÒªµÄ´ÊÊǺËÐÄ£© ¡£¶ÔÓÚ´ó¶àÊý¿ª·¢·½°¸£¬¿ÉÒÔ°²È«µØºöÂÔ C# ±àÒëÆ÷µÄºÜ¶à¸ß¼¶Ñ¡Ïî ¡£Èç¹ûÄúÐèÒªÓйر¾ÎÄδÓèÌÖÂÛµÄ csc.exe ¹¦ÄܵÄÏêϸÐÅÏ¢£¬Ç뾡¹Ü·ÅÐÄ£¬Äú¿ÉÒÔ²ÎÔÄ Microsoft Visual Studio 2005 Îĵµ°ïÖúϵͳ£¨Ö»Ðë´Ó¡°Search¡±Ñ¡ÏÖÐËÑË÷¡°csc.exe¡±²¢ÉîÈë²éÔÄ£© ¡£ ×¢ MSDN ÎĵµÒ²»á¶ÔÄúÒ²ºÜËù°ïÖú£¬ÒòΪËüÃèÊöÁËÈçºÎÔÚ Visual Studio£¨Èç¹û¿ÉÓã©ÄÚ²¿ÉèÖà csc.exe µÄÌØ¶¨Ñ¡Ïî ¡£
ÅäÖû·¾³±äÁ¿ÔÚʹÓÃÈκΠ.NET SDK ÃüÁîÐй¤¾ß£¨°üÀ¨ C# ±àÒëÆ÷£©Ö®Ç°£¬ÐèÒªÅäÖÿª·¢¼ÆËã»úÒÔʶ±ðËüÃǵĴæÔÚ ¡£×î¼òµ¥µÄ·½·¨ÊÇʹÓà Start | All Programs | Visual Studio 2005 | Visual Studio Tools ²Ëµ¥Ñ¡ÏÆô¶¯Ô¤ÅäÖÃµÄ Visual Studio ÃüÁîÌáʾ ¡£ÕâÒ»ÌØ¶¨µÄ¿ØÖÆÌ¨Äܹ»×Ô¶¯³õʼ»¯±ØÒªµÄ»·¾³±äÁ¿£¬¶øÎÞÐëÄúÖ´ÐÐÈκβÙ×÷ ¡££¨Visual Studio .NET 2003 Óû§ÐèÒªÆô¶¯ËûÃǸ÷×ÔµÄÃüÁîÌáʾ£© ¡£ ×¢ Èç¹ûÄúûÓÐ Visual Studio£¬µ«ÊÇÒѾ°²×°ÁË .NET Framework SDK£¬Ôò¿ÉÒÔ´Ó Start | All Programs | Microsoft .NET Framework SDK 2.0 ²Ëµ¥Ñ¡ÏîÆô¶¯Ô¤ÅäÖõÄÃüÁîÌáʾ ¡£ Èç¹ûÄúÏ£Íû´ÓÈÎÒâµÄ ÃüÁîÌáʾʹÓà .NET ÃüÁîÐй¤¾ß£¬ÔòÐèÒªÊÖ¶¯¸üмÆËã»úµÄ Path ±äÁ¿ ¡£×ö·¨ÊÇ£¬ÇëÓÒ¼üµ¥»÷×ÀÃæÉ쵀 My Computer ͼ±ê²¢Ñ¡Ôñ Properties ²Ëµ¥Ñ¡Ïî ¡£´Ó³öÏֵĶԻ°¿òÖУ¬µ¥»÷λÓÚ Advanced Ñ¡ÏÏÂÃæµÄ Environment Variables °´Å¥ ¡£´Ó³öÏֵĶԻ°¿òÖУ¬ÔÚ System ±äÁ¿Áбí¿òÖеĵ±Ç° Path ±äÁ¿µÄ½áβÌí¼ÓÒÔÏÂĿ¼Çåµ¥£¨Çë×¢Ò⣬±ØÐëÓ÷ֺŷָô¸÷¸öÌõÄ¿£©£º C:\Windows\Microsoft.NET\Framework\v2.0.40607 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin ×¢ ÉÏÃæµÄÁбíÖ¸ÏòÎҵĵ±Ç° .NET 2.0 ²âÊÔ°æµÄ·¾¶ ¡£ÄúµÄ·¾¶¿ÉÄÜÒò Visual Studio ºÍ/»ò .NET SDK µÄ°²×°ºÍ°æ±¾µÄ²»Í¬¶øÂÔÓв»Í¬£¬Òò´ËÇëÈ·±£Ö´ÐÐÍêÕûÐÔ¼ì²é ¡£ ÔÚ¸üРPath ±äÁ¿Ö®ºó£¬ÇëÁ¢¼´¹Ø±ÕËùÓжԻ°¿òºÍµ±Ç°´ò¿ªµÄÈκΠConsole ´°¿Ú£¬ÒÔ±ãÌá½»ÉèÖà ¡£ÄúÏÖÔÚÓ¦µ±Äܹ»´ÓÈκÎÃüÁîÌáʾִÐÐ csc.exe ºÍÆäËû .NET ¹¤¾ßÁË ¡£Òª½øÐвâÊÔ£¬ÇëÊäÈëÒÔÏÂÃüÁ csc -? ildasm -? Èç¹ûÄú¿´µ½ÓдóÁ¿ÐÅÏ¢ÏÔʾ³öÀ´£¬ÄÇôÄú¾Í¿ÉÒÔ¼ÌÐøÁË ¡£ ![]() ÃüÁîÐлù´¡ÖªÊ¶ÒѾÄܹ»ÊìÁ·µØÔÚÃüÁîÐй¤×÷µÄÓû§ÔÚʹÓà csc.exe ʱ²»»áÓÐÈκÎÎÊÌ⣬Òò¶ø¿ÉÒÔÌøµ½ÏÂÒ»½Ú ¡£µ«ÊÇ£¬Èç¹ûÄúʹÓÃÃüÁîÐеĴÎÊýºÜÓÐÏÞ£¬ÄÇôÇëÈÃÎÒ˵Ã÷һЩ»ù±¾µÄÏêϸÐÅÏ¢£¬ÒÔ±ã½øÐбØÒªµÄ×¼±¸ ¡£ Ê×ÏÈ£¬¿ÉÒÔʹÓ÷´Ð±¸Ü»òµ¥¸ö¶Ì»®ÏßÖ¸¶¨ csc.exe µÄÑ¡Ïî ¡£Æä´Î£¬ÔÚ / »ò - ÒÔ¼°ËæºóµÄ±êÖ¾Ö®¼ä¾ßÓжîÍâµÄ¿Õ¸ñÊÇ·Ç·¨ µÄ ¡£Òò´Ë£¬¡°-help¡±ÊÇÍêÈ«ÕýÈ·£¬¶ø¡°- help¡±¾ÍÐв»Í¨ÁË ¡£ÎªÁ˼ÓÒÔ˵Ã÷£¬ÈÃÎÒÃÇʹÓà help ±êÖ¾¼ì²éÍêÕûµÄÃüÁîÐÐÑ¡Ï£º csc ¨Chelp csc /help Èç¹ûÒ»ÇÐÕý³££¬ÔòÄúÓ¦µ±¿´µ½ËùÓпÉÄܵıêÖ¾£¬Èçͼ 1 Ëùʾ ¡£
ͼ 1. °ïÖú±êÖ¾
ºÜ¶àÑ¡Ïî¶¼ÌṩÁ˼òд±íʾ·¨£¬ÒÔ±ãΪÄú½ÚʡһЩ¼üÈëʱ¼ä ¡£¼ÙÉè help ±êÖ¾µÄ¼òд±íʾ·¨ÊÇ ?£¬ÔòÄú¿ÉÒÔÈçÏÂËùʾÁгö csc.exe µÄÑ¡Ï csc ¨C? csc /? ºÜ¶àÑ¡Ïî¶¼ÐèÒª¸½¼ÓµÄÐÞÊΣ¬ÀýÈ磬Ŀ¼·¾¶ºÍÎļþÃû ¡£ÕâÖÖÐÔÖʵıê־ʹÓÃðºÅ½«±êÖ¾ÓëËüµÄÐÞÊηָô¿ªÀ´ ¡£ÀýÈ磬/reference Ñ¡ÏîÒªÇó½« .NET ³ÌÐò¼¯µÄÃû³Æ°üÀ¨ÔÚ³ÌÐò¼¯Çåµ¥ÖУº csc /reference:MyLibrary.dll ... ÆäËû±êÖ¾ÔÚÐÔÖÊÉÏÊǶþÔª µÄ£¬ÒòΪËüÃÇ»òÕß±»ÆôÓà (+)£¬»òÕß±»½ûÓà (-) ¡£¶þÔª±êÖ¾×ÜÊÇĬÈÏΪËüÃǵĽûÓÃ״̬£¬Òò´ËÄúͨ³£Ö»ÐèҪʹÓüӺűê¼Ç ¡£ÀýÈ磬Ҫ½«ËùÓбàÒ뾯¸æ¶¼ÊÓΪ´íÎ󣬿ÉÒÔÆôÓà warnaserror ±êÖ¾£º csc /warnaserror+ ... ±êÖ¾µÄ˳ÐòÎ޹ؽôÒª£¬µ«ÊÇÔÚÖ¸¶¨ÊäÈëÎļþ¼¯ºÏ֮ǰ£¬±ØÐëÁгöËùÓбêÖ¾µÄ¼¯ºÏ ¡£ÁíÍâÖµµÃ˵Ã÷µÄÊÇ£¬ÔÚÐÞÊκÍËüµÄ¹ØÁªÊý¾ÝÖ®¼ä¾ßÓжîÍâµÄ¿Õ¸ñÊÇ·Ç·¨ µÄ ¡£ÀýÈ磬ÇëʹÓà /reference:MyLibrary.dll£¬¶ø²»ÒªÊ¹Óà /reference:MyLibrary.dll ¡£ ![]() ÓÃÓÚÖ¸¶¨ÊäÈëºÍ¿ØÖÆÊä³öµÄÑ¡ÏîÎÒÃǽ«Òª·ÖÎöµÄµÚÒ»×éÃüÁîÐÐÑ¡ÏîÓÃÓÚÖ¸¶¨±àÒëÆ÷ÊäÈ루±í 2£©ºÍ¿ØÖƵõ½µÄÊä³ö£¨±í 3£© ¡£Çë×¢Ò⣬ÏÂÃæµÄ±í»¹±ê¼ÇÁËÌØ¶¨ÓÚ C# 2.0 µÄÑ¡ÏîºÍÈκοÉÓõļòд±íʾ·¨ ¡£ ±í 2. csc.exe µÄÒÔÊäÈëΪÖÐÐĵÄÑ¡Ïî
±í 3. csc.exe µÄÒÔÊä³öΪÖÐÐĵÄÑ¡Ïî
Ò²ÐíÓÃ;×î¶àµÄÊäÈë/Êä³öÑ¡ÏîÊÇ /target ¡£¸Ã±ê־ͨ¹ýʹÓø½¼ÓµÄÐÞÊΣ¨±í 4£©¸æËß±àÒëÆ÷Äú¶ÔÉú³ÉÄĸöÀàÐ굀 .NET ³ÌÐò¼¯¸ÐÐËȤ ¡£ ±í 4. /target ±êÖ¾µÄ±äÌå
![]() ±àÒë .NET ´úÂë¿âΪÁË˵Ã÷ʹÓà csc.exe µÄÊäÈë/Êä³öÑ¡ÏîµÄ¹ý³Ì£¬ÎÒÃǽ«´´½¨Ò»¸öÇ¿ÃüÃûµÄµ¥Îļþ³ÌÐò¼¯ (MyCodeLibrary.dll)£¬ÒÔ¶¨ÒåÒ»¸öÃûΪ SimpleType µÄÀàÀàÐÍ ¡£ÎªÁËչʾ /doc Ñ¡ÏîµÄ×÷Óã¬ÎÒÃÇ»¹½«Éú³ÉÒ»¸ö XML ÎĵµÎļþ ¡£ Ê×ÏÈ£¬ÇëÔÚÇý¶¯Æ÷ C ÉÏ´´½¨Ò»¸öÃûΪ MyCSharpCode µÄÐÂÎļþ¼Ð ¡£ÔÚ¸ÃÎļþ¼ÐÖУ¬´´½¨Ò»¸öÃûΪ MyCodeLibrary µÄ×ÓĿ¼ ¡£Ê¹ÓÃÄúÑ¡ÔñµÄÎı¾±à¼Æ÷£¨notepad.exe ¾ÍÍêÈ«ºÏºõÐèÒª£©ÊäÈëÒÔÏ´úÂ룬²¢½«¸ÃÎļþ±£´æÎª¸Õ¸Õ´´½¨µÄ C:\MyCSharpCode\MyCodeLibrary Ŀ¼ÖÐµÄ simpleType.cs ¡£ // simpleType.cs using System; namespace MyCodeLibrary { /// <summary> /// Simple utility type. /// </summary> public class SimpleType { /// <summary> /// Print out select environment information /// </summary> public static void DisplayEnvironment() { Console.WriteLine("Location of this program: {0}", Environment.CurrentDirectory); Console.WriteLine("Name of machine: {0}", Environment.MachineName); Console.WriteLine("OS of machine: {0}", Environment.OSVersion); Console.WriteLine("Version of .NET: {0}", Environment.Version); } } } ÏÖÔÚ£¬´ò¿ªÃüÁîÌáʾ£¬²¢ÇÒʹÓà cd£¨¸ü¸ÄĿ¼£©ÃüÁîµ¼º½µ½ simpleType.cs ÎļþµÄλÖà (C:\MyCSharpCode\MyCodeLibrary)£º cd MyCSharpCode\MyCodeLibrary »ò cd C:\MyCSharpCode\MyCodeLibrary Òª½«¸ÃÔ´´úÂëÎļþ±àÒëΪÃûΪ MyCodeLibrary.dll µÄµ¥Îļþ³ÌÐò¼¯£¬ÇëÖ¸¶¨ÒÔÏÂÃüÁ£º csc /t:library /out:MyCodeLibrary.dll simpleType.cs ´Ëʱ£¬ÄúÓ¦µ±ÔÚÓ¦ÓóÌÐòĿ¼ÖоßÓÐÒ»¸öÈ«Ð嵀 .NET ´úÂë¿â£¬Èçͼ 2 Ëùʾ ¡£
ͼ 2. Ð嵀 .NET ´úÂë¿â
µ±ÔÚÃüÁîÐбàÒë¶à¸ö C# Îļþʱ£¬¿ÉÒÔ·Ö±ðÁгöÿ¸öÎļþ ¡ª Èç¹ûÄúÏ£Íû±àÒë°üº¬ÔÚµ¥¸öĿ¼ÖÐµÄ C# ÎļþµÄ×Ó¼¯£¬ÔòÕâ¿ÉÄÜÓÐËù°ïÖú ¡£¼ÙÉèÎÒÃÇÒѾ´´½¨ÁËÁíÍâÒ»¸öÃûΪ asmInfo.cs µÄ C# ´úÂëÎļþ£¨±£´æÔÚͬһĿ¼ÖУ©£¬Ëü¶¨ÒåÁËÏÂÁгÌÐò¼¯¼¶±ðÊôÐÔÒÔÃèÊöÎÒÃǵĴúÂë¿â£º // asmInfo.cs using System; using System.Reflection; // A few assembly level attributes. [assembly:AssemblyVersion("1.0.0.0")] [assembly:AssemblyDescription("Just an example library")] [assembly:AssemblyCompany("Intertech Training")] ÒªÖ»±àÒë simpleType.cs ºÍ asmInfo.cs Îļþ£¬Çë¼üÈ룺 csc /t:library /out:MyCodeLibrary.dll simpleType.cs asmInfo.cs ÕýÈçÄú¿ÉÄÜÏ£ÍûµÄÄÇÑù£¬csc.exe Ö§³ÖͨÅä·û±íʾ·¨ ¡£Òò¶ø£¬Òª±àÒëµ¥¸öĿ¼ÖеÄËùÓÐÎļþ£¬Çë½ö½« *.cs Ö¸¶¨ÎªÊäÈëÑ¡Ï csc /t:library /out:MyCodeLibrary.dll *.cs ʹÓà /recurse Ö¸¶¨×ÓĿ¼ ÔÚ´´½¨Ó¦ÓóÌÐòʱ£¬Äú¿Ï¶¨Ï²»¶ÎªÄúµÄÏîÄ¿´´½¨Â߼Ŀ¼½á¹¹ ¡£Äú¿ÉÒÔͨ¹ý½«´úÂëÎļþ·Åµ½Ìض¨µÄ×ÓĿ¼£¨\Core¡¢\AsmInfo¡¢\MenuSystem µÈµÈ£©ÖжÔËüÃǽøÐÐ×éÖ¯£¬¶ø²»Êǽ«¶à´ï 25 ¸öÎļþת´¢µ½ÃûΪ myApp µÄµ¥¸öĿ¼ÖÐ ¡£¾¡¹ÜÎÒÃǵĵ±Ç°Ê¾ÀýÖ»°üº¬¼¸¸öÎļþ£¬µ«¼ÙÉèÄú½« AsmInfo.cs Îļþ·Åµ½Ò»¸öÃûΪ \AsmInfo µÄеÄ×ÓĿ¼£¨Èçͼ 3 Ëùʾ£©ÖÐ ¡£
ͼ 3. Ð嵀 \AsmInfo ×ÓĿ¼
Òª¸æËß C# ±àÒëÆ÷±àÒëλÓÚ¸ùĿ¼ÒÔ¼° AsmInfo ×ÓĿ¼ÖеÄËùÓÐ C# Îļþ£¬ÇëʹÓà /recurse Ñ¡Ï csc /t:library /out:MyCodeLibrary.dll /recurse:AsmInfo /doc:myDoc.xml *.cs ÕâÀ/recurse ÒѾÓÃÌØ¶¨×ÓĿ¼µÄÃû³ÆÏÞ¶¨ ¡£ÒªÖ¸¶¨¶à¸ö×ÓĿ¼£¬ÎÒÃÇ¿ÉÒÔÔÙ´ÎʹÓÃͨÅä·ûÓï·¨ ¡£Èç¹ûÎÒÃÇÒª½« simpleType.cs ÎļþÒÆµ½Ò»¸öеÄÃûΪ Core µÄ×ÓĿ¼ÖУ¬ÔòÎÒÃÇ¿ÉÒÔÓÃÒÔÏÂÃüÁ±àÒëËùÓÐ×ÓĿ¼ÖеÄËùÓÐ C# Îļþ£º csc /t:library /out:MyCodeLibrary.dll /recurse:*.cs ÔÚÈκÎÒ»ÖÖÇé¿öÏ£¬Êä³ö¶¼ÊÇÏàͬµÄ ¡£ ʹÓà /doc Éú³É XML ÎĵµÎļþ SimpleType ÀàÒѾÅ䱸Á˸÷ÖÖ XML ÔªËØ ¡£¾ÍÏñÄúºÜ¿ÉÄÜÖªµÀµÄÄÇÑù£¬C# ±àÒëÆ÷½«Ê¹ÓÃÕâЩ´øÓÐÈýÌõб¸ÜµÄ´úÂë×¢ÊÍÉú³É XML ÎĵµÎļþ ¡£Òª¸æËß csc.exe ´´½¨ÕâÑùµÄÎļþ£¬±ØÐëÌṩ /doc Ñ¡Ï²¢ÇÒÓÃÒªÉú³ÉµÄÎļþµÄÃû³ÆÐÞÊÎËü£º csc /t:library /out:MyCodeLibrary.dll /recurse:*.cs /doc:myDoc.xml ÔÚÓ¦ÓóÌÐòĿ¼ÖУ¬ÄúÏÖÔÚÓ¦µ±¿´µ½Ò»¸öÃûΪ myDoc.xml µÄÐÂÎļþ ¡£Èç¹ûÄú´ò¿ª¸ÃÎļþ£¬Ôò»á·¢ÏÖÄúµÄÀàÐÍÒÔ XML µÄÐÎʽ½øÐÐÁË˵Ã÷£¬Èçͼ 5 Ëùʾ ¡£
ͼ 5. XML ÐÎʽµÄÀàÐÍÎĵµ
×¢ Èç¹ûÄúÏ£ÍûÁ˽â C# XML ´úÂë×¢Ê͵ÄÏêϸÐÅÏ¢£¬ÔòÇë²ÎÔÄÎÄÕ XML Comments Let You Build Documentation Directly From Your Visual Studio .NET Source Files ¡£ ʹ Óà /keyfile ½¨Á¢Ç¿Ãû³Æ µ±Ç°Ê¾ÀýµÄ×îºóÒ»ÏîÈÎÎñÊÇΪÎÒÃǵijÌÐò¼¯·ÖÅäÒ»¸öÇ¿Ãû³Æ ¡£ÔÚ .NET 1.1 Ï£¬´´½¨Ç¿ÃüÃû³ÌÐò¼¯ÐèҪʹÓà [AssemblyKeyFile] ÊôÐÔ ¡£¾¡¹ÜÕâÑù×ö¾ÍºÜºÃÁË£¬µ« C# 2.0 ±àÒëÆ÷ÏÖÔÚÌṩÁË /keyfile ±êÖ¾£¬ÒÔÖ¸¶¨Ç¿Ãû³ÆÃÜÔ¿Îļþ (*.snk) µÄλÖà ¡£ ÔÚÇý¶¯Æ÷ C ÉÏ´´½¨Ò»¸öÃûΪ MyKeyPair µÄÐÂÎļþ¼Ð£¬È»ºóʹÓÃÃüÁîÌáʾ¸ü¸ÄÖÁ¸ÃĿ¼ ¡£½ÓÏÂÀ´£¬Ê¹Óà sn.exe ʵÓù¤¾ßµÄ ‡°k Ñ¡Ïî´´½¨Ò»¸öÃûΪ myKeyPair.snk µÄÐÂÃÜÔ¿¶Ô ¡£ sn -k myKeyPair.snk ҪʹÓà csc.exe ¶Ô MyCodeLibrary.dll ½øÐÐÇ¿ÃüÃû£¬Çë·¢³öÒÔÏÂÃüÁ£º csc /t:library /out:MyCodeLibrary.dll /recurse:*.cs /doc:myDoc.xml /keyfile:C:\MyKeyPair\myKeypair.snk ÒªÑéÖ¤¸Ã³ÌÐò¼¯µÄÈ·¾ßÓÐÇ¿Ãû³Æ£¬ÇëʹÓð²È«ÊµÓù¤¾ß (secutil.exe) ºÍ ‡°s Ñ¡ÏîÏÔʾǿÃû³ÆÐÅÏ¢£º secutil /sMyCodeLibrary.dll ÄúÓ¦µ±·¢ÏÖ£¬³ÌÐò¼¯Çåµ¥ÖмǼµÄ¹«Ô¿Öµ±»ÏÔʾΪÈçͼ 6 ËùʾµÄÊä³ö ¡£
ͼ 6. ¹«Ô¿ÖµµÄÊä³ö
C# 2.0 ±àÒëÆ÷ȷʵ»¹ÓÐÆäËûһЩÒÔÇ¿Ãû³ÆÎªÖÐÐĵıêÖ¾£¨/delaysign ºÍ /keycontainer£©£¬Äú¿ÉÄÜÏ£ÍûÔÚ¿ÕÏÐʱ¼ÓÒÔÑо¿ ¡£ÌØ±ðµØ£¬Èç¹ûÄúÏ£ÍûÆôÓÃÑÓ³ÙÇ©Ãû£¬ÔòÇëʹÓà /delaysign Ñ¡Ïî ¡£ ![]() ʹÓà C# ÏìÓ¦Îļþ¾¡¹Üͨ¹ýÃüÁîÐй¤×÷ʱ¿ÉÒÔÌåÑéµ½ÆäÓëÉú¾ãÀ´µÄÓÅÊÆ£¬µ«Ã»ÓÐÈËÄܹ»·ñÈϼüÈëÊýÊ®¸ö±àÒëÆ÷Ñ¡Ïî¿ÉÄܵ¼ÖÂÊÖÖ¸³é½îºÍ¼Èë´íÎó ¡£ÎªÁËÓÐÖúÓÚ¼õÇáÕâÁ½¸öÎÊÌ⣬C# ±àÒëÆ÷Ö§³ÖʹÓÃÏìÓ¦Îļþ ¡£ ×¢ ËùÓÐÃüÁîÌáʾ¶¼ÔÊÐíÄúʹÓà Up ºÍ Down ¼ýÍ·¼ü±éÀúÒÔǰµÄÃüÁî ¡£ ÏìÓ¦Îļþ£¨ËüÃǰ´ÕÕÔ¼¶¨²ÉÓà *.rsp ÎļþÀ©Õ¹Ãû£©°üº¬ÄúÏ£Íû¹©¸øµ½ csc.exe ÖеÄËùÓÐÑ¡Ïî ¡£ÔÚ´´½¨Á˸ÃÎļþÒÔºó£¬Äú¾Í¿ÉÒÔ½«ËüµÄÃû³ÆÖ¸¶¨Îª C# ±àÒëÆ÷µÄΨһѡÏî ¡£ÎªÁ˱ãÓÚ˵Ã÷£¬ÏÂÃæÌṩÁËÒ»¸ö½«ÓÃÓÚÉú³É MyCodeLibrary.dll µÄÏìÓ¦Îļþ£¨Çë×¢Ò⣬Äú¿ÉÒÔʹÓà # ·ûºÅÖ¸¶¨×¢ÊÍ£© ¡£ # MyCodeLibraryArgs.rsp # # These are the options used # to compile MyCodeLibrary.dll # Output target and name. /t:library /out:MyCodeLibrary.dll # Location of C# files. /recurse:*.cs # Give me an XML doc. /doc:myDoc.xml # Give me a strong name as well. /keyfile:C:\MyKeyPair\myKeypair.snk ¸ø¶¨¸ÃÎļþÒÔºó£¬ÄúÏÖÔھͿÉÒÔʹÓà @ Ñ¡ÏîÖ¸¶¨ MyCodeLibraryArgs.rsp ÁË£º csc @MyCodeLibraryArgs.rsp Èç¹ûÄúÔ¸Ò⣬Ôò¿ÉÒÔÖ¸¶¨¶à¸öÏìÓ¦Îļþ£º csc @MyCodeLibraryArgs.rsp @MoreArgs.rsp @EvenMoreArgs.rsp Çë¼Çס£¬°´ÕÕÓöµ½µÄ˳Ðò¶ÔÏìÓ¦Îļþ½øÐд¦Àí ¡£Òò´Ë£¬ÒÔǰµÄÎļþÖеÄÉèÖÿÉÄܱ»ÒÔºóµÄÎļþÖеÄÉèÖÃÖØÐ´ ¡£ ĬÈϵÄÏìÓ¦ÎļþºÍ /noconfig Ñ¡Ïî ×îºó£¬Çë¼ÇסÓÐÒ»¸öĬÈϵÄÏìÓ¦Îļþ ¡ª csc.rsp£¬ËüÓÉ csc.exe ÔÚÿ´Î±àÒëÆÚ¼ä×Ô¶¯´¦Àí ¡£Èç¹ûÄú·ÖÎö¸ÃÎļþ£¨ËüÓë csc.exe ±¾ÉíλÓÚÏàͬµÄÎļþ¼ÐÖУ©µÄÄÚÈÝ£¬ÔòÄú½«Ö»ÊÇ·¢ÏÖÒ»×é¾³£ÒýÓõijÌÐò¼¯£¨System.Windows.Forms.dll¡¢System.Data.dll µÈµÈ£© ¡£ ÔÚÄúÏ£Íû½ûÖ¹°üÀ¨ csc.rsp µÄ¼«ÉÙÊýµÄ³¡ºÏÖУ¬Äú¿ÉÒÔÖ¸¶¨ /noconfig ±êÖ¾£º csc /noconfig @MyCodeLibraryArgs.rsp ×¢ Èç¹ûÄúÒýÓóÌÐò¼¯£¬¶øÊµ¼ÊÉϲ¢²»Ê¹ÓÃËü£¬ÔòËü½«²»»áÔÚ³ÌÐò¼¯Çåµ¥ÖÐÁгö ¡£Òò´Ë£¬Çë²»Òªµ£ÐÄ´úÂëÅòÕÍÎÊÌ⣬ÒòΪËüÃǸù±¾²»´æÔÚ ¡£ ![]() ʹÓà /reference ÒýÓÃÍⲿ³ÌÐò¼¯´Ëʱ£¬ÎÒÃÇÒѾʹÓÃÃüÁîÐбàÒëÆ÷´´½¨Á˾ßÓÐÇ¿Ãû³Æ£¨²¢ÇÒ½øÐÐÁË˵Ã÷£©µÄµ¥Îļþ´úÂë¿â ¡£ÏÖÔÚ£¬ÎÒÃÇÐèÒªÒ»¸ö¿Í»§¶ËÓ¦ÓóÌÐòÒÔ±ãʹÓÃËü ¡£ÇëÔÚ C:\MyCSharpCode Öд´½¨Ò»¸öÃûΪ MyClient µÄÐÂÎļþ¼Ð ¡£ÔÚ¸ÃÎļþ¼ÐÖУ¬´´½¨Ò»¸öÐ嵀 C# ´úÂëÎļþ (simpleTypeClient.cs)£¬¸ÃÎļþ´Ó³ÌÐòµÄÈë¿Úµãµ÷Óþ²Ì¬µÄ SimpleType.DisplayEnvironment() ·½·¨£º // simpleTypeClient.cs using System; // Namespace in MyCodeLibrary.dll using MyCodeLibrary; namespace MyClientApp { public class MyApp { public static void Main() { SimpleType.DisplayEnvironment(); Console.ReadLine(); } } } ÒòΪÎÒÃǵĿͻ§¶ËÓ¦ÓóÌÐòҪʹÓà MyCodeLibrary.dll£¬ËùÒÔÎÒÃÇÐèҪʹÓà /reference£¨»òÖ»ÊÇʹÓà /r£©Ñ¡Ïî ¡£¸Ã±êÖ¾ºÜÁé»î£¬ÒòΪÄú¿ÉÒÔÖ¸¶¨ËùÌÖÂÛµÄ *dll µÄÍêÕû·¾¶£¬ÈçÏÂËùʾ£º csc /t:exe /r:C:\MyCSharpCode\MyCodeLibrary\MyCodeLibrary.dll *.cs »òÕߣ¬Èç¹û˽ÓгÌÐò¼¯µÄ¸±±¾ÓëÊäÈëÎļþλÓÚÏàͬµÄÎļþ¼ÐÖУ¬Ôò¿ÉÒÔÖ»Ö¸¶¨³ÌÐò¼¯Ãû³Æ£º csc /t:exe /r:MyCodeLibrary.dll *.cs Çë×¢Ò⣬ÎÒûÓÐÖ¸¶¨ /out Ñ¡Ïî ¡£¸ø¶¨¸ÃÌõ¼þ£¬csc.exe »ùÓÚÎÒÃǵijõʼÊäÈëÎļþ (simpleTypeClient.cs) ´´½¨ÁËÒ»¸öÃû³Æ ¡£´ËÍ⣬ÒÑÖª /target µÄĬÈÏÐÐΪÊÇÉú³É»ùÓÚ¿ØÖÆÌ¨µÄÓ¦ÓóÌÐò£¬ËùÒÔ /t:exe ²ÎÊýÊÇ¿ÉÑ¡µÄ ¡£ ÔÚÈκÎÇé¿öÏ£¬ÒòΪ MyCodeLibrary.dll ÊÇ˽ÓгÌÐò¼¯£¬ËùÒÔÄúÐèÒª½«¸Ã¿âµÄÒ»¸ö¸±±¾·Åµ½ MyClient Ŀ¼ÖÐ ¡£ÔÚÄúÍê³É¸Ã¹¤×÷ÒÔºó£¬Äú¾ÍÄܹ»Ö´ÐÐ simpleTypeClient.exe Ó¦ÓóÌÐò ¡£Í¼ 7 ÏÔʾÁË¿ÉÄܵIJâÊÔÔËÐÐ ¡£
ͼ 7. ¿ÉÄܵIJâÊÔÔËÐÐÊä³ö
×¢ Çë»ØÒäÒ»ÏÂÕâ¸öÎÊÌ⣬²»±Ø½«¾ßÓÐÇ¿Ãû³ÆµÄ³ÌÐò¼¯²¿Êðµ½È«¾Ö³ÌÐò¼¯»º´æ (GAC) ÖÐ ¡£Êµ¼ÊÉÏ£¬ÒòΪǿÃû³Æ¾ßÓÐÌìÈ»µÄ°²È«ÐÔ·½ÃæµÄºÃ´¦£¬ËùÒÔÏòÿ¸ö³ÌÐò¼¯£¨ÎÞÂÛ¹²ÏíÓë·ñ£©ÌṩǿÃû³ÆÊÇÒ»ÖÖ .NET ×î¼Ñ²ßÂÔ ¡£ ÒýÓöà¸öÍⲿ³ÌÐò¼¯ Èç¹ûÄúÏ£ÍûÔÚÃüÁîÐÐÒýÓôóÁ¿³ÌÐò¼¯£¬Ôò¿ÉÒÔÖ¸¶¨¶à¸ö /reference Ñ¡Ïî ¡£ÎªÁË˵Ã÷ÕâÒ»µã£¬¼ÙÉèÎÒÃǵĿͻ§¶ËÓ¦ÓóÌÐòÐèҪʹÓðüº¬ÔÚÃûΪ NewLib.dll µÄ¿âÖеÄÀàÐÍ£º csc /t:exe /r:MyCodeLibrary.dll /r:NewLib.dll *.cs ×÷ΪһÖÖÉÔ΢¼òµ¥Ò»Ð©µÄÌæ´ú·½·¨£¬Äú¿ÉÒÔʹÓõ¥¸ö /reference Ñ¡Ï²¢ÇÒʹÓ÷ֺŷָôµÄÁбíÖ¸¶¨Ã¿¸ö³ÌÐò¼¯£º csc /t:exe /r:MyCodeLibrary.dl;NewLib.dll *.cs µ±È»£¬ÔÚ´´×÷ C# ÏìÓ¦ÎļþʱʹÓÃÏàͬµÄÓï·¨ ¡£ ¹ØÓÚ /lib µÄ¼ò¶Ì˵Ã÷ Ôڲ鿴 C# 2.0 ³ÌÐò¼¯±ðÃûµÄ×÷ÓÃ֮ǰ£¬ÇëÔÊÐíÎÒ¶Ô /lib ±êÖ¾¼ÓÒÔ¼ò¶Ì˵Ã÷ ¡£¸ÃÑ¡Ïî¿ÉÓÃÓÚ½«°üº¬ÓÉ /reference Ñ¡ÏîÖ¸¶¨µÄ³ÌÐò¼¯µÄĿ¼¸æË߸ø csc.exe ¡£ÎªÁ˽øÐÐ˵Ã÷£¬¼ÙÉèÄú¾ßÓÐÈý¸öλÓÚÇý¶¯Æ÷ C µÄ¸ùĿ¼ÖÐµÄ *.dll ³ÌÐò¼¯ ¡£ÒªÖ¸Ê¾ csc.exe ÔÚ C:\ ϲéÕÒ asm1.dll¡¢asm2.dll ºÍ asm3.dll£¬ÐèÒª·¢³öÒÔÏÂÃüÁ£º csc /lib:c:\ /reference:asm1.dll;asm2.dll;asm3.dll *.cs Èç¹ûÄúδʹÓà /lib£¬ÔòÐèÒª½«ÕâÈý¸ö .NET ´úÂë¿âÊÖ¶¯¸´ÖƵ½°üº¬ÊäÈëÎļþµÄĿ¼ÖÐ ¡£»¹Çë×¢Ò⣬Èç¹ûÔÚ¸ø¶¨µÄÃüÁÖжà´Î·¢³ö /lib ±êÖ¾£¬Ôò½á¹û½«ÀÛ»ýÆðÀ´ ¡£ ![]() Àí½â C# 2.0 ÒýÓñðÃû¹ØÓÚ /reference Ñ¡ÏîÐèÒª½øÐеÄ×îºóÒ»µã˵Ã÷ÊÇ£¬ÔÚ C# 2.0 ÖУ¬ÏÖÔÚ¿ÉÒÔΪÒýÓõijÌÐò¼¯´´½¨±ðÃû ¡£Í¨¹ý¸Ã¹¦ÄÜ£¬¿ÉÒÔ½â¾öÔÚΨһÃüÃûµÄ³ÌÐò¼¯Öаüº¬µÄÃû³ÆÍêÈ«ÏàͬµÄÀàÐÍÖ®¼ä´æÔÚµÄÃû³Æ³åÍ»ÎÊÌâ ¡£ ΪÁË˵Ã÷¸Ã¹¦ÄܵÄʵÓÃÐÔ£¬ÇëÔÚ C:\MyCSharpCode Ŀ¼Öд´½¨Ò»¸öÃûΪ MyCodeLibrary2 µÄÐÂÎļþ¼Ð ¡£½«ÏÖÓÐµÄ simpleType.cs ºÍ AsmInfo.cs ÎļþµÄ¸±±¾·Åµ½ÐÂĿ¼ÖÐ ¡£ÏÖÔÚ£¬Ïò SimpleType ÖÐÌí¼ÓÒ»¸öÄܹ»ÏÔʾ¿Í»§¶ËÌṩµÄ×Ö·û´®µÄз½·¨£º /// <summary> /// Display a user supplied message. /// </summary> public static void PrintMessage(string msg) { Console.WriteLine("You said: {0}", msg); } ±àÒëÕâЩÎļþ£¬ÒÔ´´½¨Ò»¸öÃûΪ MyCodeLibrary2.dll µÄгÌÐò¼¯£¬ÈçÏÂËùʾ£º csc /t:library /out:MyCodeLibrary2.dll *.cs ×îºó£¬½«ÕâһдúÂë¿âµÄ¸±±¾·Åµ½ MyClient Îļþ¼Ð£¨Í¼ 8£©ÖÐ ¡£
ͼ 8. MyClient Îļþ¼ÐÖеÄдúÂë
ÏÖÔÚ£¬Èç¹ûÎÒÃǵĵ±Ç°¿Í»§¶Ë³ÌÐòÏ£ÍûÒýÓà MyCodeLibrary.dll ÒÔ¼° MyCodeLibrary2.dll£¬ÔòÎÒÃÇÖ´ÐÐÒÔϲÙ×÷£º csc /t:exe /r:MyCodeLibrary.dll;MyCodeLibrary2.dll *.cs ±àÒëÆ÷¸æËßÎÒÃÇ£¬ÎÒÃÇÒѾÒýÈëÁËÃû³Æ³åÍ»£¬ÒòΪÕâÁ½¸ö³ÌÐò¼¯¶¼¶¨ÒåÁËÒ»¸öÃûΪ SimpleType µÄÀࣺ simpleTypeClient.cs(13,7): error CS0433: The type MyCodeLibrary.SimpleType exists in both c:\MyCSharpCode\MyClient\MyCodeLibrary.dll and c:\MyCSharpCode\MyClient\MyCodeLibrary2.dll Õ§¿´ÆðÀ´£¬Äú¿ÉÄÜÈÏΪ¿ÉÒÔͨ¹ýÔÚ¿Í»§¶Ë´úÂëÖÐʹÓÃÍêÈ«ÏÞ¶¨Ãû³ÆÀ´ÐÞ¸´¸ÃÎÊÌâ ¡£µ«ÊÇ£¬ÕâÑù×öÎÞ·¨¾ÀÕý¸ÃÎÊÌ⣬ÒòΪÕâÁ½¸ö³ÌÐò¼¯¶¨ÒåÁËÏàͬµÄÍêÈ«ÏÞ¶¨Ãû³Æ (MyCodeLibrary ¡£SimpleType) ¡£ ʹÓà /reference ±êÖ¾µÄбðÃûÑ¡ÏÎÒÃÇ¿ÉÒÔΪÒýÓõÄÿ¸ö´úÂë¿âÉú³ÉΨһµÄÃû³Æ ¡£ÔÚÎÒÃÇÕâÑù×öÖ®ºó£¬ÎÒÃǾͿÉÒÔ¸üпͻ§¶Ë´úÂ룬ÒԱ㽫ij¸öÀàÐÍÓëÌØ¶¨µÄ³ÌÐò¼¯Ïà¹ØÁª ¡£ µÚÒ»²½ÊÇÐÞ¸Ä simpleTypeClient.cs Îļþ£¬ÒÔʹÓÃÎÒÃǽ«Í¨¹ýÐ嵀 extern alias Óï·¨ÔÚÃüÁîÐÐÖ¸¶¨µÄ±ðÃû£º // Extern alias statements must be // listed before all other code! extern alias ST1; extern alias ST2; using System; namespace MyClientApp { public class MyApp { public static void Main() { // Bind assembly to type using the :: operator. ST1::MyCodeLibrary.SimpleType.DisplayEnvironment(); ST2::MyCodeLibrary.SimpleType.PrintMessage("Hello!"); Console.ReadLine(); } } } Çë×¢Ò⣬ÎÒÃÇÒѾʹÓà C# 2.0 extern alias Óï¾ä²¶»ñÁËÔÚÃüÁîÐж¨ÒåµÄ±ðÃû ¡£ÕâÀST1£¨¼òµ¥ÀàÐÍ 1£©ÊÇΪ MyCodeLibrary.dll ¶¨ÒåµÄ±ðÃû£¬¶ø ST2 ÊÇ MyCodeLibrary2.dll µÄ±ðÃû£º csc /r:ST1=MyCodeLibrary.dll /r:ST2=MyCodeLibrary2.dll *.cs ¸ø¶¨ÕâЩ±ðÃû£¬Çë×¢Òâ Main() ·½·¨ÈçºÎʹÓà C# 2.0 ·¶Î§½âÎöÔËËã·û (::) ½«³ÌÐò¼¯±ðÃû°ó¶¨µ½ÀàÐͱ¾Éí£º // This says "I want the MyCodeLibrary.SimpleType class // that is defined in MyCodeLibrary.dll". ST1::MyCodeLibrary.SimpleType.DisplayEnvironment(); ½ø¶ø£¬/reference Ñ¡ÏîµÄÕâÒ»±äÌå¿ÉÒÔÌṩһÖÖ±ÜÃâÃû³Æ³åÍ»£¨µ±Á½¸ö¾ßÓÐΨһÃû³ÆµÄ³ÌÐò¼¯°üº¬Ãû³ÆÍêÈ«ÏàͬµÄÀàÐÍʱ·¢Éú£©µÄ·½Ê½ ¡£ ![]() ʹÓà /addmodule Éú³É¶àÎļþ³ÌÐò¼¯¾ÍÏñÄú¿ÉÄÜÒѾ֪µÀµÄÄÇÑù£¬¶àÎļþ³ÌÐò¼¯ÌṩÁËÒ»ÖÖ½«µ¥¸ö .NET ¶þ½øÖÆÎļþ·Ö½âΪ¶à¸ö½ÏСµÄСÎļþµÄ·½Ê½£¬ÕâÔÚÔ¶³ÌÏÂÔØ .NET Ä£¿éʱ֤Ã÷ºÜÓаïÖú ¡£¶àÎļþ³ÌÐò¼¯µÄ×îÖÕЧ¹ûÊÇÈÃÒ»×éÎļþÏñÒ»¸öµ¥¶ÀÒýÓúͽøÐа汾¿ØÖƵĵ¥ÔªÄÇÑù¹¤×÷ ¡£ ¶àÎļþ³ÌÐò¼¯°üº¬Ò»¸öÖ÷ *.dll£¬Ëü°üº¬³ÌÐò¼¯Çåµ¥ ¡£¸Ã¶àÎļþ³ÌÐò¼¯µÄÆäËûÄ£¿é£¨°´ÕÕÔ¼¶¨£¬ËüÃDzÉÓà *.netmodule ÎļþÀ©Õ¹Ãû£©±»¼Ç¼ÔÚÖ÷Ä£¿éµÄÇåµ¥ÖУ¬²¢ÇÒÓÉ CLR °´Ðè¼ÓÔØ ¡£Æù½ñΪֹ£¬Éú³É¶àÎļþ³ÌÐò¼¯µÄΨһ·½Ê½ÊÇʹÓÃÃüÁîÐбàÒëÆ÷ ¡£ ΪÁË˵Ã÷¸Ã¹ý³Ì£¬ÇëÔÚ C:\MyCSharpCode Ŀ¼Öд´½¨Ò»¸öÃûΪ MultiFileAsm µÄÐÂ×ÓĿ¼ ¡£ÎÒÃǵÄÄ¿±êÊÇ´´½¨Ò»¸öÃûΪ AirVehicles µÄ¶àÎļþ³ÌÐò¼¯ ¡£Ö÷Ä£¿é (Airvehicles.dll) ½«°üº¬µ¥¸öÃûΪ Helicopter µÄÀàÀàÐÍ£¨ÉÔºó¶¨Ò壩 ¡£³ÌÐò¼¯Çåµ¥±à¼ÁËÒ»¸ö¸½¼ÓÄ£¿é (ufos.netmodule)£¬¸ÃÄ£¿é¶¨ÒåÁËÒ»¸öÃûΪ UFO µÄÀàÀàÐÍ£º // ufo.cs using System; using System.Windows.Forms; namespace AirVehicles { public class UFO { public void AbductHuman() { MessageBox.Show("Resistance is futile"); } } } Òª½« ufo.cs ±àÒëΪ .NET Ä£¿é£¬ÇëÖ¸¶¨ /t:module ×÷ΪĿ±êÀàÐÍ£¬Õâ»á×Ô¶¯×ñÑ *.netmodule ÃüÃûÔ¼¶¨£¨Çë»ØÏëһϣ¬Ä¬ÈϵÄÏìÓ¦Îļþ×Ô¶¯ÒýÓà System.Windows.Forms.dll£¬Òò´ËÎÒÃDz»ÐèÒªÏÔʽÒýÓøÿ⣩£º csc /t:module ufo.cs Èç¹ûÄúÒª½« ufo.netmodule ¼ÓÔØµ½ ildasm.exe ÖУ¬Äú»á·¢ÏÖÒ»¸ö¼ÇÔØÁ˸ÃÄ£¿éµÄÃû³ÆºÍÍⲿÒýÓóÌÐò¼¯µÄÄ£¿é¼¶±ðÇåµ¥£¨Çë×¢Ò⣬*.netmodules ûÓÐÖ¸¶¨°æ±¾ºÅ£¬ÒòΪÄÇÊÇÖ÷Ä£¿éµÄ¹¤×÷£©£º .assembly extern mscorlib{...} .assembly extern System.Windows.Forms{...} .module ufo.netmodule ÏÖÔÚ£¬Çë´´½¨Ò»¸öÃûΪ helicopter.cs µÄÐÂÎļþ£¬¸ÃÎļþ½«ÓÃÓÚ±àÒëÖ÷Ä£¿é Airvehicles.dll£º // helicopter.cs using System; using System.Windows.Forms; namespace AirVehicles { public class Helicopter { public void TakeOff() { MessageBox.Show("Helicopter taking off!"); } } } ¼ÙÉè Airvehicles.dll ÊǸöàÎļþ³ÌÐò¼¯µÄÖ÷Ä£¿é£¬ÔòÄú½«ÐèÒªÖ¸¶¨ /t:library ±êÖ¾ ¡£µ«ÊÇ£¬ÒòΪÄú»¹Ï£Íû½« ufo.netmodule ¶þ½øÖÆÎļþ±àÂëµ½³ÌÐò¼¯Çåµ¥ÖУ¬ËùÒÔÄú»¹±ØÐëÖ¸¶¨ /addmodule Ñ¡Ï csc /t:library /addmodule:ufo.netmodule /out:airvehicles.dll helicopter.cs Èç¹ûÄúÒª·ÖÎö airvehicles.dll ¶þ½øÖÆÎļþÄÚ²¿°üº¬µÄ³ÌÐò¼¯¼¶±ðÇåµ¥£¨Ê¹Óà ildasm.exe£©£¬Ôò»á·¢ÏÖ ufo.netmodule ȷʵÊÇʹÓà .file CIL Ö¸Áî¼Ç¼µÄ£º .assembly airvehicles{...} .file ufo.netmodule ¶àÎļþ³ÌÐò¼¯µÄʹÓÃÕß¿ÉÒÔ½ÏÉÙ¹ØÐÄËûÃÇÒªÒýÓõijÌÐò¼¯ÓÉ´óÁ¿¶þ½øÖÆÎļþ×é³ÉÕâÒ»ÊÂʵ ¡£Êµ¼ÊÉÏ£¬Ôھ䷨ÉϽ«¿´ÆðÀ´ÓëʹÓõ¥Îļþ³ÌÐò¼¯µÄÐÐΪÍêÈ«Ïàͬ ¡£ÎªÁËʹ±¾ÎıäµÃ¸üÓÐȤһЩ£¬ÈÃÎÒÃÇ´´½¨Ò»¸ö»ùÓÚ Windows ´°ÌåµÄ¿Í»§¶ËÓ¦ÓóÌÐò ¡£ ![]() ´´½¨ Windows ´°ÌåÓ¦ÓóÌÐòÎÒÃǵÄÏÂÒ»¸öʾÀýÏîÄ¿½«ÊÇÒ»¸öʹÓà airvehicles.dll¶àÎļþ³ÌÐò¼¯µÄ Windows ´°ÌåÓ¦ÓóÌÐò ¡£ÔÚ C:\MyCSharpCode Ŀ¼Öд´½¨Ò»¸öÃûΪ WinFormClient µÄеÄ×ÓĿ¼ ¡£´´½¨Ò»¸öÅÉÉú×Ô Form µÄÀ࣬¸ÃÀඨÒåÁ˵¥¸ö Button ÀàÐÍ£¬µ±Ëü±»µ¥»÷ʱ£¬½«´´½¨ Helicopter ºÍ UFO ÀàÐÍ£¬²¢ÇÒµ÷ÓÃËüÃǵijÉÔ±£º using System; using System.Windows.Forms; using AirVehicles; public class MyForm : Form { private Button btnUseVehicles = new Button(); public MyForm() { this.Text = "My Multifile Asm Client"; btnUseVehicles.Text = "Click Me"; btnUseVehicles.Width = 100; btnUseVehicles.Height = 100; btnUseVehicles.Top = 10; btnUseVehicles.Left = 10; btnUseVehicles.Click += new EventHandler(btnUseVehicles_Click); this.Controls.Add(btnUseVehicles); } private void btnUseVehicles_Click(object o, EventArgs e) { Helicopter h = new Helicopter(); h.TakeOff(); UFO u = new UFO(); u.AbductHuman(); } private static void Main() { Application.Run(new MyForm()); } } ×¢ ÔÚ¼ÌÐø²Ù×÷֮ǰ£¬ÇëÈ·±£½« airvehicals.dll ºÍ ufo.netmodule ¶þ½øÖÆÎļþ¸´ÖƵ½ WinFormClient Ŀ¼ÖÐ ¡£ Òª½«¸ÃÓ¦ÓóÌÐò±àÒëΪ Windows ´°Ìå¿ÉÖ´ÐÐÎļþ£¬ÇëÈ·±£Ö¸¶¨ winexe ×÷Ϊ /target ±êÖ¾µÄÐÞÊÎ ¡£Çë×¢Ò⣬ÔÚÒýÓöàÎļþ³ÌÐò¼¯Ê±£¬Ö»ÐëÖ¸¶¨Ö÷Ä£¿éµÄÃû³Æ£º csc /t:winexe /r:airvehicles.dll *.cs ÔÚÔËÐÐÄúµÄ³ÌÐò²¢µ¥»÷°´Å¥Ö®ºó£¬Äú¾ÍÓ¦µ±¿´µ½°´ÕÕÔ¤ÆÚÏÔʾµÄÿ¸öÏûÏ¢¿ò ¡£Í¼ 9 ÏÔʾÁËÎÒ´´½¨µÄÒ»¸öÏûÏ¢¿ò ¡£
ͼ 9. ʾÀýÏûÏ¢¿ò
![]() ͨ¹ý csc.exe ʹÓÃ×ÊÔ´ÏÂÒ»¸öÒé³ÌÊÇ·ÖÎöÈçºÎʹÓà csc.exe ½«×ÊÔ´£¨ÀýÈ磬×Ö·û´®±í»òͼÏñÎļþ£©Ç¶Èëµ½ .NET ³ÌÐò¼¯ÖÐ ¡£Ê×ÏÈ£¬¿ÉÒÔʹÓà /win32Icon Ñ¡ÏîÖ¸¶¨ Win32 *.ico ÎļþµÄ·¾¶ ¡£¼ÙÉèÄúÒѾ½«Ò»¸öÃûΪ HappyDude.ico µÄͼ±êÎļþ·Åµ½µ±Ç° Windows ´°ÌåÓ¦ÓóÌÐòµÄÓ¦ÓóÌÐòĿ¼ÖÐ ¡£Òª½« HappyDude.ico ÉèÖÃΪ¿ÉÖ´ÐÐÎļþµÄͼ±ê£¬Çë·¢³öÒÔÏÂÃüÁ£º csc /t:winexe /win32icon:HappyDude.ico /r:airvehicles.dll *.cs ´Ëʱ£¬Ó¦µ±¸üпÉÖ´ÐгÌÐò¼¯£¬Èçͼ 10 Ëùʾ ¡£
ͼ 10. ¾¹ý¸üеĿÉÖ´ÐгÌÐò¼¯
³ýÁËʹÓà /win32icon ·ÖÅäÓ¦ÓóÌÐòͼ±êÒÔÍ⣬csc.exe »¹ÌṩÁËÈý¸ö¸½¼ÓµÄÒÔ×ÊԴΪÖÐÐĵÄÑ¡Ï±í 5£© ¡£ ±í 5. csc.exe µÄÒÔ×ÊԴΪÖÐÐĵÄÑ¡Ïî
ÔÚÎÒÃÇÁ˽âÈçºÎ½«×ÊԴǶÈëµ½ÎÒÃǵijÌÐò¼¯ÖÐÒÔǰ£¬ÇëÈÃÎÒ¶Ô .NET ƽ̨ÖеÄ×ÊÔ´µÄÐÔÖʽøÐмò¶ÌµÄ½éÉÜ ¡£ÕýÈçÄú¿ÉÄÜÒѾ֪µÀµÄÄÇÑù£¬.NET ×ÊÔ´¿ªÊ¼Ê±Í¨³£³ÊÏÖΪһ×é±»¼Ç¼Ϊ XML£¨*.resx Îļþ£©»ò¼òµ¥Îı¾ (*.txt) µÄÃû³Æ/Öµ¶Ô ¡£¸Ã XML/Îı¾ÎļþËæºó±»×ª»»ÎªµÈЧµÄ¶þ½øÖÆÎļþ£¬Ëü²ÉÓà *.resources ÎļþÀ©Õ¹Ãû ¡£È»ºó£¬ÕâЩ¶þ½øÖÆÎļþ±»Ç¶Èëµ½³ÌÐò¼¯Öв¢ÇÒ±»¼Ç¼ÔÚÇåµ¥ÖÐ ¡£µ±ÐèÒªÒÔ±à³Ì·½Ê½´Ó¸Ã³ÌÐò¼¯ÖжÁÈ¡×ÊÔ´µÄʱºò£¬System.Resources ÃüÃû¿Õ¼ä»áÌṩºÜ¶àÀàÐÍÀ´Íê³É¸Ã¹¤×÷£¬ÆäÖÐ×îÖµµÃ×¢ÒâµÄÊÇ ResourceManager Àà ¡£ ¾¡¹ÜÄú¿Ï¶¨¿ÉÒÔÊÖ¶¯´´½¨ *.resx Îļþ£¬µ«Äú×îºÃʹÓà resgen.exe ÃüÁîÐй¤¾ß£¨»òÕߣ¬Äúµ±È»¿ÉÒÔʹÓà Visual Studio .NET ±¾Éí£© ¡£ËäÈ»±¾ÎIJ»´òËãÃèÊö resgen.exe µÄÈ«²¿ÏêϸÐÅÏ¢£¬µ«ÊÇÈÃÎÒÃÇÑÝÁ·Ò»¸ö¼òµ¥µÄʾÀý ¡£ ʹÓà /resource ǶÈë×ÊÔ´ ÔÚ MyCSharpCode ÏÂÃæ´´½¨Ò»¸öÃûΪ MyResourceApp µÄÐÂĿ¼ ¡£ÔÚ¸ÃĿ¼ÖУ¬Ê¹Óà notepad.exe ´´½¨Ò»¸öÃûΪ myStrings.txt µÄÐÂÎļþ£¬²¢ÇÒʹÆä°üº¬ÄúÑ¡ÔñµÄһЩÓÐȤµÄÃû³Æ/Öµ¶Ô ¡£ÀýÈ磺 # A list of personal data # company=Intertech Training lastClassTaught=.NET Security lastPresentation=SD East Best Practices favoriteGameConsole=XBox favoriteComic=Cerebus ÏÖÔÚ£¬Ê¹ÓÃÃüÁîÌáʾ£¬Í¨¹ýÒÔÏÂÃüÁ *.txt Îļþת»»ÎªÒ»¸ö»ùÓÚ XML µÄ *.resx Îļþ£º resgen myStrings.txt myStrings.resx Èç¹ûÄúʹÓà notepad.exe ´ò¿ª¸ÃÎļþ£¬Ôò»áÕÒµ½Ðí¶àÃèÊöÃû³Æ/Öµ¶ÔµÄ XML ÔªËØ£¬ÀýÈ磺 <data name="company"> <value xml:space="preserve">Intertech Training</value> </data> <data name="lastClassTaught"> <value xml:space="preserve">.NET Security</value> </data> Òª½«¸Ã *.resx Îļþת»»Îª¶þ½øÖÆµÄ *.resources Îļþ£¬Ö»Ð뽫ÎļþÀ©Õ¹Ãû×÷Ϊ resgen.exe µÄ²ÎÊý½øÐиüУº resgen myStrings.resx myStrings.resources ´Ëʱ£¬ÎÒÃǾßÓÐÁËÒ»¸öÃûΪ myStrings.resources µÄ¶þ½øÖÆ×ÊÔ´Îļþ ¡£Í¨¹ý /resource ±êÖ¾¿ÉÒԴﵽʹÓà csc.exe ½«¸ÃÊý¾ÝǶÈëµ½ .NET ³ÌÐò¼¯ÖеÄÄ¿µÄ ¡£¼ÙÉèÎÒÃÇÒѾ´´×÷ÁËλÓÚ MyResourceApp Ŀ¼ÖеÄÒÔÏ C# Îļþ (resApp.cs)£º // This simple app reads embedded // resources and displays them to the // console. using System; using System.Resources; using System.Reflection; public class ResApp { private static void Main() { ResourceManager rm = new ResourceManager("myStrings", Assembly.GetExecutingAssembly()); Console.WriteLine("Last taught a {0} class.", rm.GetString("lastClassTaught")); } } ÒªÏà¶ÔÓÚÄúµÄ myStrings.resources Îļþ±àÒë¸Ã³ÌÐò¼¯£¬ÇëÊäÈëÒÔÏÂÃüÁ csc /resource:myStrings.resources *.cs ÒòΪÎÒÉÐδָ¶¨ /out ±êÖ¾£¬ËùÒÔÔÚ¸ÃʾÀýÖУ¬ÎÒÃǵĿÉÖ´ÐÐÎļþµÄÃû³Æ½«»ùÓÚ¶¨ÒåÁË Main() µÄÎļþ resApp.exe ¡£Èç¹ûÒ»ÇÐÕý³££¬ÔòÔÚÖ´ÐÐÒÔºó£¬ÄúÓ¦µ±·¢ÏÖÀàËÆÓÚͼ 11 µÄÊä³ö ¡£
ͼ 11. Êä³ö
ÎÒÏ£ÍûÄúÄܹ»ÇáËɵØÊ¹Óà csc.exe ºÍËùÑ¡µÄÎı¾±à¼Æ÷´´½¨µ¥ÎļþºÍ¶àÎļþ .NET ³ÌÐò¼¯£¨´øÓÐ×ÊÔ´£¡£© ¡£ÄúÒѾѧϰÁË csc.exe µÄ×î³£¼ûµÄÃüÁîÐÐÑ¡Ï¶ø±¾ÎĵįäÓಿ·Ö½«·ÖÎöһЩ²»Ì«³£Óõ«ÈÔÈ»ÓаïÖúµÄÑ¡Ïî ¡£ Èç¹ûÄúÔ¸Òâ¼ÌÐøÑ§Ï°£¬ÇëÔÚ MyCSharpCode Îļþ¼ÐÖд´½¨Ò»¸öÃûΪ FinalExample µÄÐÂĿ¼ ¡£ ![]() ʹÓà /define ¶¨ÒåÔ¤´¦ÀíÆ÷·ûºÅ¾¡¹Ü C# ±àÒëÆ÷ûÓÐÕæÕýÔ¤´¦Àí´úÂ룬µ«¸ÃÓïÑÔµÄÈ·ÔÊÐíÎÒÃÇʹÓÃÀàËÆÓÚ C µÄÔ¤´¦ÀíÆ÷·ûºÅÀ´¶¨Òå¸Ã±àÒëÆ÷ÒÔ¼°ÓëÆä½øÐн»»¥ ¡£Ê¹Óà C# µÄ #define Óï·¨£¬¿ÉÒÔ´´½¨Äܹ»¿ØÖÆÓ¦ÓóÌÐòÄÚ²¿µÄÖ´Ðз¾¶µÄ±ê¼Ç ¡£ ×¢ ±ØÐëÔÚʹÓÃÈκÎÓï¾ä»òÆäËû C# ÀàÐͶ¨Òå֮ǰÁгöËù¶¨ÒåµÄ·ûºÅ ¡£ ΪÁËÀûÓó£¼ûµÄʾÀý£¬¼ÙÉèÄúÏ£Íû¶¨ÒåÒ»¸öÃûΪ DEBUG µÄ·ûºÅ ¡£Îª´Ë£¬Çë´´½¨Ò»¸öÃûΪ finalEx.cs µÄÐÂÎļþ£¬²¢½«Æä±£´æÔÚ MyCSharpCode\FinalExample Ŀ¼ÖУº // Define a preprocessor symbol named DEBUG. #define DEBUG using System; public class FinalExample { public static void Main() { #if DEBUG Console.WriteLine("DEBUG symbol defined"); #else Console.WriteLine("DEBUG not defined"); #endif } } Çë×¢Ò⣬ÔÚÎÒÃÇʹÓà #define ¶¨ÒåÁË·ûºÅÒÔºó£¬ÎÒÃǾÍÄܹ»Ê¹Óà #if¡¢#else ºÍ #endif ¹Ø¼ü×ÖÀ´ÓÐÌõ¼þµØ¼ì²éºÍÏìÓ¦¸Ã·ûºÅ ¡£Èç¹ûÄúÏÖÔÚ±àÒë¸Ã³ÌÐò£¬ÔòÓ¦µ±¿´µ½ÔÚ finalEx.exe Ö´ÐÐʱ£¬ÏûÏ¢¡°DEBUG symbol defined¡±ÏÔʾµ½¿ØÖÆÌ¨ÉÏ£º csc *.cs µ«ÊÇ£¬Èç¹ûÄú×¢Ê͵ô·ûºÅ¶¨Ò壺 // #define DEBUG ÔòÊä³ö½«»áÏñÄúÔ¤ÁϵÄÄÇÑù£¨¡°DEBUG not defined¡±£© ¡£ ÔÚ .NET ³ÌÐò¼¯µÄ¿ª·¢ºÍ²âÊÔÆÚ¼ä£¬ÔÚÃüÁîÐж¨Òå·ûºÅ¿ÉÄÜÓÐËù°ïÖú ¡£ÕâÑù×ö¿ÉÒÔ¿ìËٵؼ´Ê±Ö¸¶¨·ûºÅ£¬¶ø²»±Ø¸üдúÂë»ù ¡£ÎªÁ˽øÐÐ˵Ã÷£¬¼ÙÉèÄúÏ£ÍûÔÚÃüÁîÐж¨Òå DEBUG ·ûºÅ£¬ÔòÇëʹÓà /define Ñ¡Ï csc /define:DEBUG *.cs µ±ÄúÔÙ´ÎÔËÐиÃÓ¦ÓóÌÐòʱ£¬ÄúÓ¦µ±¿´µ½ÏÔʾ¡°DEBUG symbol defined¡±¡ª ¼´Ê¹ #define Óï¾äÒѾ±»×¢Ê͵ô ¡£ ![]() csc.exe µÄÒÔµ÷ÊÔΪÖÐÐĵÄÑ¡ÏʹÊÇ×îºÃµÄ³ÌÐòÔ±£¬ÓÐʱҲ»á·¢ÏÖÓжÔËûÃǵĴúÂë»ù½øÐе÷ÊÔµÄÐèÒª ¡£¾¡¹ÜÎÒ¼ÙÉè´ó¶àÊý¶ÁÕ߸üϲ»¶Ê¹Óà Visual Studio .NET ½øÐе÷ÊԻ£¬µ«¶Ô csc.exe µÄһЩÒÔµ÷ÊÔΪÖÐÐĵÄÑ¡Ï±í 6£©½øÐÐ˵Ã÷ÊÇÖµµÃµÄ ¡£ ±í 6. csc.exe µÄÒÔµ÷ÊÔΪÖÐÐĵÄÑ¡Ïî
Ҫ˵Ã÷ /debug Ñ¡ÏîµÄÓ÷¨£¬ÎÒÃÇÊ×ÏÈÐèÒªÔÚÎÒÃÇµÄ finalEx.cs ´úÂëÎļþÖвåÈëһЩ±àÂë´íÎó ¡£Ç뽫ÒÔÏ´úÂëÌí¼Óµ½µ±Ç°µÄ Main() ·½·¨ÖУº // Create an array. string[] myStrings = {"Csc.exe is cool"}; // Go out of bounds. Console.WriteLine(myStrings[1]); ÕýÈçÄú¿ÉÒÔ¿´µ½µÄÄÇÑù£¬ÎÒÃÇÊÔͼʹÓÃÔ½½çË÷Òý·ÃÎÊÎÒÃǵÄÊý×éµÄÄÚÈÝ ¡£Èç¹ûÄúÖØÐ±àÒëºÍÔËÐиóÌÐò£¬Ôò»áµÃµ½ IndexOutOfRangeException ¡£¾¡¹ÜÎÒÃÇ¿ÉÒÔÃ÷ÏÔµØÖ¸³ö¸Ã´íÎ󣬵«¼ÙÈçÊÇÒ»¸ö²»ÄÇôÃ÷ÏԵĸüΪ¸´ÔӵĴíÎó£¬ÓÖ¸ÃÔõô°ìÄØ£¿ Òªµ÷ÊÔʹÓà csc.exe ´´½¨µÄ³ÌÐò¼¯£¬µÚÒ»²½ÊÇÉú³É°üº¬¸÷ÖÖ .NET µ÷ÊÔʵÓù¤¾ßËùÐèÐÅÏ¢µÄ *.pdb Îļþ ¡£Îª´Ë£¬ÇëÊäÈëÏÂÁÐÃüÁËüÃÇÔÚ¹¦ÄÜÉÏÊǵÈЧµÄ£©Ö®Ò»£º csc /debug *.cs csc /debug+ *.cs ´Ëʱ£¬ÄúÓ¦µ±ÔÚÓ¦ÓóÌÐòĿ¼Öп´µ½Ò»¸öÃûΪ finalEx.pdb µÄÐÂÎļþ£¬Èçͼ 12 Ëùʾ ¡£
ͼ 12. Ó¦ÓóÌÐòĿ¼ÖеÄРfinalEx.pdb
¿ÉÒÔ¸ù¾ÝÇé¿öÓà full »ò pdbonly ±ê¼ÇÏÞ¶¨ /debug ±êÖ¾ ¡£µ±ÄúÖ¸¶¨ /debug:full£¨ËüÊÇĬÈϱê¼Ç£©Ê±£¬½«ÒÔÊʵ±µÄ·½Ê½¶Ô³ÌÐò¼¯½øÐÐÐ޸ģ¬ÒÔʹÆä¿ÉÒÔ¸½¼Óµ½µ±Ç°ÕýÔÚÖ´Ðеĵ÷ÊÔÆ÷ ¡£¼ÈÈ»¸ÃÑ¡ÏîÄܹ» Ó°ÏìËù²úÉúµÄ .NET ³ÌÐò¼¯µÄ´óСºÍËÙ¶È£¬ÄÇôÇëÈ·±£Ö»ÔÚµ÷ÊÔ¹ý³ÌÖÐÖ¸¶¨¸ÃÑ¡Ïî ¡£ÒòΪ full ÊÇ /debug ±êÖ¾µÄĬÈÏÐÐΪ£¬ËùÒÔÉÏÊöËùÓÐÑ¡ÏîÔÚ¹¦ÄÜÉÏÊǵÈЧµÄ£º csc /debug *.cs csc /debug+ *.cs csc /debug:full *.cs ÁíÒ»·½Ã棬ָ¶¨ /debug:pdbonly ¿ÉÒÔÉú³ÉÒ»¸ö *.pdb Îļþ£¬ÒÔ¼°Ò»¸öÖ»ÄÜÔÚ³ÌÐòÓɵ÷ÊÔ¹¤¾ßÖ±½ÓÆô¶¯Ê±½øÐе÷ÊԵijÌÐò¼¯£º csc /debug:pdbonly *.cs ÔÚÈκÎÇé¿öÏ£¬¼ÈÈ»Äú¾ßÓбØÐèµÄ *.pdb Îļþ£¬ÄÇôÄú¾Í¿ÉÒÔʹÓÃÐí¶àµ÷ÊÔ¹¤¾ß£¨cordbg.exe¡¢dbgclr.exe »ò Visual Studio£©µ÷ÊÔÓ¦ÓóÌÐò ¡£ÎªÁ˲»Æ«Àë±¾ÎĵÄÖØµã½éÉÜÃüÁîÐÐÕâÒ»ÌØÕ÷£¬ÎÒÃǽ«Ê¹Óà cordbg.exe ʵÓù¤¾ßµ÷ÊԸóÌÐò£º cordbg finalEx.exe ÔÚµ÷ÊԻỰ¿ªÊ¼ÒÔºó£¬Äú¾Í¿ÉÒÔʹÓà so£¨µ¥²½Ö´ÐУ©ÃüÁîµ¥²½Ö´ÐÐÿ¸ö´úÂëÐÐÁË ¡£µ±Äúµ¥»÷³ö´íµÄ´úÂëÐÐʱ£¬Äú¿ÉÒÔÕÒµ½Èçͼ 13 ËùʾµÄ´úÂëת´¢ ¡£
ͼ 13. µ¥²½Ö´ÐÐÃüÁî´úÂëת´¢
ÒªÖÕÖ¹ cordbg.exe ʵÓù¤¾ß£¬Çë¼üÈë exit ²¢°´ Return ¼ü ¡£ ×¢ ±¾ÎĵÄÖØµã²»ÊǽâÊÍ .NET µ÷ÊÔ¹¤¾ßµÄÓ÷¨ ¡£Èç¹ûÄúÏ£ÍûÁ˽âÓйØÔÚÃüÁîÐнøÐе÷ÊԵĹý³ÌµÄ¸ü¶àÐÅÏ¢£¬ÇëÔÚ Visual Studio °ïÖúϵͳÄÚ²éÕÒ¡°cordbg.exe¡± ¡£ ![]() ÔÓÏîÖÁ´Ë£¬ÄúÒѾÁ˽âÁË C# ÃüÁîÐбàÒëÆ÷µÄºËÐÄÑ¡Ïî±³ºóµÄÏêϸÐÅÏ¢ ¡£ÎªÁËʹ±¾ÎĵÄÄÚÈݸü¼ÓÍêÕû£¬±í 7 ¼òÒªÃèÊöÁËÎÒÉÐδ̸ÂÛµ½µÄÆäÓà±êÖ¾ ¡£ ±í 7. csc.exe µÄÆäÓàÑ¡Ïî
ÐèÒªÁ˽âµÄÊÇ£¬¶ÔÓÚ¾ø´ó¶àÊý .NET ÏîÄ¿¶øÑÔ£¬±í 7 ÖÐÁгöµÄÑ¡ÏîÖ»ÄÜÌṩ·Ç³£Éٵĺô¦ ¡£¼øÓÚ´Ë£¬Èç¹ûÄúÐèÒª½øÒ»²½µÄÏêϸÐÅÏ¢£¬Çë²ÎÔÄ MSDN ¡£ ![]() С½á±¾ÎÄÏòÄú½éÉÜÁËʹÓà C# ÃüÁîÐбàÒëÆ÷Éú³É³ÌÐò¼¯µÄ¹ý³Ì ¡£¾ÍÏñÄúÒѾÁ˽âµÄÄÇÑù£¬´ó¶àÊý¹¤×÷¿ÉÒÔʹÓÃÁ½¸ö±êÖ¾ ¡ª /target ºÍ /reference Íê³É ¡£³ýÁË·ÖÎö csc.exe µÄºËÐıêÖ¾ÒÔÍ⣬±¾ÎÄ»¹½âÊÍÁËÏìÓ¦ÎļþµÄºÃ´¦ÒÔ¼°¶àÎļþ³ÌÐò¼¯µÄ½á¹¹ ¡£ ¾¡¹Ü±¾ÎÄûÓÐÌṩÓÐ¹Ø csc.exe µÄÿ¸öÑ¡ÏîµÄÈ«²¿ÏêϸÐÅÏ¢£¬µ«ÎÒÏ£ÍûÄúÄܹ»·½±ãµØÊ¹Óà Visual Studio 2005 ÎĵµÁ˽âÆäÓà±êÖ¾ ¡£ ×£Äú±àÂëÓä¿ì£¡ Andrew Troelsen ÊÇһλ Microsoft MVP£¬ËûÔÚ Intertech Training µ£ÈιËÎʺÍÅàѵ½²Ê¦ ¡£Andrew ´´×÷ÁËÐí¶àÖø×÷£¬ÆäÖаüÀ¨»ñ½±µÄ C# and the .NET Platform Second Edition (Apress 2002) ¡£ËûÿÔ¶¼Îª£¨ÕæÇÉ£©MacTech ׫дרÀ¸ÎÄÕ£¬ËûÔÚÕâЩÎÄÕÂÖÐÑо¿ÁËÈçºÎʹÓà SSCLI¡¢Portible.NET ºÍ Mono CLI ·Ö·¢ÔÚ»ùÓÚ Unix µÄϵͳÉϽøÐÐ .NET ¿ª·¢ ¡£ |