System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact d8ff52201c7113cf1cd551760641a2e90640db06:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0090: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73  ons.Generic;..us
00a0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e  ing System.Diagn
00b0: 6f 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53  ostics;..using S
00c0: 79 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65  ystem.Enterprise
00d0: 53 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61  Services.Interna
00e0: 6c 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  l;..using System
00f0: 2e 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74  .IO;..using Syst
0100: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a  em.Reflection;..
0110: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e  using System.Run
0120: 74 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72  time.CompilerSer
0130: 76 69 63 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79  vices;..using Sy
0140: 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d  stem.Threading;.
0150: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69  .using System.Wi
0160: 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73  ndows.Forms;..us
0170: 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d  ing System.Xml;.
0180: 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74  .using Microsoft
0190: 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73  .Win32;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 44  #region Public D
01d0: 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69 6e  elegates..    in
01e0: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
01f0: 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62 61  void TraceCallba
0200: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ck(..        str
0210: 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
0220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
0230: 65 67 6f 72 79 0d 0a 20 20 20 20 29 3b 0d 0a 0d  egory..    );...
0240: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0290: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
02a0: 20 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46   delegate bool F
02b0: 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61  rameworkConfigCa
02c0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
02d0: 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
02e0: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
02f0: 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
0300: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
0310: 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
0320: 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
0330: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
0340: 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
0350: 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
0360: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
0370: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
0380: 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
0390: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
03a0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
03b0: 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
03c0: 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
03d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
03e0: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 29  ing error..    )
03f0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ;....    ///////
0400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0440: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
0450: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f  rnal delegate bo
0460: 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  ol FrameworkRegi
0470: 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d 0a 20  stryCallback(.. 
0480: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
0490: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
04a0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
04b0: 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
04c0: 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
04d0: 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
04e0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
04f0: 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
0500: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0510: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
0520: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
0530: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
0540: 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ose,..        re
0550: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
0560: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      );....    //
0570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
05c0: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
05d0: 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74  te bool VisualSt
05e0: 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c  udioRegistryCall
05f0: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 52  back(..        R
0600: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0610: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ey,..        Ver
0620: 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
0630: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
0640: 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b 61  er.Package packa
0650: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ge,..        obj
0660: 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
0670: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68  .        bool wh
0680: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 62  atIf,..        b
0690: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
06a0: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
06b0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 29 3b 0d 0a   error..    );..
06c0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
06d0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
06e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0720: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
0730: 20 50 75 62 6c 69 63 20 45 6e 75 6d 65 72 61 74   Public Enumerat
0740: 69 6f 6e 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73  ions..    [Flags
0750: 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ()]..    public 
0760: 65 6e 75 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  enum InstallFlag
0770: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
0780: 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20    None = 0x0,.. 
0790: 20 20 20 20 20 20 20 47 41 43 20 3d 20 30 78 31         GAC = 0x1
07a0: 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73 65 6d  ,..        Assem
07b0: 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30 78 32  blyFolders = 0x2
07c0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50 72 6f  ,..        DbPro
07d0: 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d 20 30  viderFactory = 0
07e0: 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 50  x4,..        VsP
07f0: 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d 0a 20  ackage = 0x8,.. 
0800: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0810: 72 63 65 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20  rce = 0x10,..   
0820: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0830: 64 65 72 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  der = 0x20,..   
0840: 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d       Framework =
0850: 20 47 41 43 20 7c 20 41 73 73 65 6d 62 6c 79 46   GAC | AssemblyF
0860: 6f 6c 64 65 72 73 20 7c 20 44 62 50 72 6f 76 69  olders | DbProvi
0870: 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20  derFactory,..   
0880: 20 20 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b       Vs = VsPack
0890: 61 67 65 20 7c 20 56 73 44 61 74 61 53 6f 75 72  age | VsDataSour
08a0: 63 65 20 7c 20 56 73 44 61 74 61 50 72 6f 76 69  ce | VsDataProvi
08b0: 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 41 6c  der,..        Al
08c0: 6c 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20  l = Framework | 
08d0: 56 73 2c 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c  Vs,..        All
08e0: 4e 6f 47 41 43 20 3d 20 41 6c 6c 20 26 20 7e 47  NoGAC = All & ~G
08f0: 41 43 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66  AC,..        Def
0900: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
0910: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
0970: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
0980: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
0990: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
09a0: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
09b0: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
09c0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
09d0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
09e0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
09f0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
0a00: 6d 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  m = 0x8,..      
0a10: 20 20 48 69 67 68 20 3d 20 30 78 31 30 2c 0d 0a    High = 0x10,..
0a20: 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d          Higher =
0a30: 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x20,..        
0a40: 48 69 67 68 65 73 74 20 3d 20 30 78 34 30 2c 0d  Highest = 0x40,.
0a50: 0a 20 20 20 20 20 20 20 20 44 65 62 75 67 20 3d  .        Debug =
0a60: 20 4d 65 64 69 75 6d 2c 20 2f 2a 20 4e 4f 54 45   Medium, /* NOTE
0a70: 3a 20 44 65 66 61 75 6c 74 20 66 6f 72 20 64 65  : Default for de
0a80: 62 75 67 20 6d 65 73 73 61 67 65 73 2e 20 2a 2f  bug messages. */
0a90: 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 20  ..        Trace 
0aa0: 3d 20 4d 65 64 69 75 6d 20 20 2f 2a 20 4e 4f 54  = Medium  /* NOT
0ab0: 45 3a 20 44 65 66 61 75 6c 74 20 66 6f 72 20 74  E: Default for t
0ac0: 72 61 63 65 20 6d 65 73 73 61 67 65 73 2e 20 2a  race messages. *
0ad0: 2f 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  /..    }..    #e
0ae0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
0af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0b40: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
0b50: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  ller Class..    
0b60: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
0b70: 63 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d  class Installer.
0b80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
0b90: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
0ba0: 48 65 6c 70 65 72 20 43 6c 61 73 73 65 73 0d 0a  Helper Classes..
0bb0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0bc0: 41 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a 20  AnyPair Class.. 
0bd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
0be0: 65 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79 50  ealed class AnyP
0bf0: 61 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20  air<T1, T2>..   
0c00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0c10: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
0c20: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
0c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
0c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
0c50: 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f  WARNING: This co
0c60: 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75 63  nstructor produc
0c70: 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20  es an immutable 
0c80: 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20 20  "empty" pair..  
0c90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
0ca0: 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20        object... 
0cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
0cc0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
0cd0: 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20 20  c AnyPair()..   
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
0cf0: 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ase()..         
0d00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
0d10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
0d20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
0d30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0d40: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0d90: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
0da0: 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20 20  Pair(T1 x)..    
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
0dc0: 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  is()..          
0dd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0de0: 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78 3b       this.x = x;
0df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
0e00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
0e60: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
0e70: 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20 20  (T1 x, T2 y)..  
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
0e90: 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20 20  this(x)..       
0ea0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0eb0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 79 20 3d          this.y =
0ec0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
0ed0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
0ee0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0ef0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
0f50: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
0f60: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
0f70: 20 20 20 20 70 72 69 76 61 74 65 20 54 31 20 78      private T1 x
0f80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
0f90: 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20 20  ublic T1 X..    
0fa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
0fb0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
0fc0: 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20   return x; }..  
0fd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0fe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1040: 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20 20  ivate T2 y;..   
1050: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1060: 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20 20  T2 Y..          
1070: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1080: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1090: 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  n y; }..        
10a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
10c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1130: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1140: 6f 6e 20 54 72 61 63 65 4f 70 73 20 43 6c 61 73  on TraceOps Clas
1150: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
1160: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
1170: 54 72 61 63 65 4f 70 73 0d 0a 20 20 20 20 20 20  TraceOps..      
1180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1190: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
11a0: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
11b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
11c0: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
11d0: 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 20  aultDebugFormat 
11e0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b  = "#{0} @ {1}: {
11f0: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
1200: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1210: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
1220: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
1230: 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a  } @ {1}: {2}";..
1240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1250: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1260: 6e 67 20 49 73 6f 38 36 30 31 44 61 74 65 54 69  ng Iso8601DateTi
1270: 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 20 3d  meOutputFormat =
1280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1290: 20 20 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48    "yyyy.MM.ddTHH
12a0: 3a 6d 6d 3a 73 73 2e 66 66 66 66 66 66 66 22 3b  :mm:ss.fffffff";
12b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
12c0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
12d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1320: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1330: 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69  on Private Stati
1340: 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  c Data..        
1350: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1360: 69 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f  ic object syncRo
1370: 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28  ot = new object(
1380: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1390: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6c  private static l
13a0: 6f 6e 67 20 6e 65 78 74 44 65 62 75 67 49 64 3b  ong nextDebugId;
13b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
13c0: 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e  ivate static lon
13d0: 67 20 6e 65 78 74 54 72 61 63 65 49 64 3b 0d 0a  g nextTraceId;..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
13f0: 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
1400: 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
1410: 69 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72  iority = TracePr
1420: 69 6f 72 69 74 79 2e 44 65 62 75 67 3b 0d 0a 20  iority.Debug;.. 
1430: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1440: 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50  te static TraceP
1450: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
1460: 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69  ority = TracePri
1470: 6f 72 69 74 79 2e 54 72 61 63 65 3b 0d 0a 20 20  ority.Trace;..  
1480: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1490: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
14a0: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65  debugFormat = De
14b0: 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74  faultDebugFormat
14c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
14d0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
14e0: 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
14f0: 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46   = DefaultTraceF
1500: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1510: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1580: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
1590: 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65  Static Propertie
15a0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
15b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
15c0: 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
15d0: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
15e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15f0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
1600: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
1610: 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69   return debugPri
1620: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
1630: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1640: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
1650: 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74  ) { debugPriorit
1660: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
1670: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16e0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72  public static Tr
16f0: 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
1700: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
1710: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1720: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1730: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
1740: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
1750: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20  iority; } }..   
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1770: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
1780: 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69  t) { tracePriori
1790: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  ty = value; } }.
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1810: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1820: 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61  tring DebugForma
1830: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
1840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1850: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
1860: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
1870: 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20   debugFormat; } 
1880: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1890: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
18a0: 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67  yncRoot) { debug
18b0: 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
18c0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
18d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1930: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1940: 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46  ic string TraceF
1950: 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
1960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1970: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
1980: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
1990: 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
19a0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
19b0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
19c0: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74  k (syncRoot) { t
19d0: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
19e0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
19f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a00: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a60: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1a70: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63   #region Interac
1a80: 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74  tive Support Met
1a90: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
1aa0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1ab0: 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
1ac0: 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20  lyTitle(..      
1ad0: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1ae0: 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b20: 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
1b30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73   if (assembly.Is
1ba0: 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20  Defined(..      
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1bd0: 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
1be0: 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
1bf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c20: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1c30: 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1c40: 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20 20   title =..      
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d            (Assem
1c70: 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
1c80: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca0: 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
1cb0: 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
1cc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce0: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
1cf0: 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
1d00: 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d  bute), false)[0]
1d10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d30: 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54 69   return title.Ti
1d40: 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tle;..          
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1d90: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
1da0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1df0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e10: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
1e20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1e90: 69 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67  ic static Dialog
1ea0: 52 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61  Result ShowMessa
1eb0: 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
1ec0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1ed0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1ee0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ef0: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
1f00: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f20: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
1f30: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1f50: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
1f60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f70: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
1f80: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1f90: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
1fa0: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
1fb0: 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
1fc0: 42 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c  Buttons buttons,
1fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fe0: 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
1ff0: 20 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20   icon..         
2000: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2010: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2020: 20 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52           DialogR
2030: 65 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44  esult result = D
2040: 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d  ialogResult.OK;.
2050: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2060: 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65     DebugAndTrace
2070: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d  (tracePriority,.
2080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2090: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
20a0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
20b0: 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65  k, message, cate
20c0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79            if (Sy
20e0: 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e  stemInformation.
20f0: 55 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29  UserInteractive)
2100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2120: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2130: 74 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d  title = GetAssem
2140: 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c  blyTitle(assembl
2150: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2160: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
2170: 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  itle == null).. 
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41         title = A
21a0: 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75  pplication.Produ
21b0: 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  ctName;....     
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21d0: 65 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42  esult = MessageB
21e0: 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c  ox.Show(message,
21f0: 20 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c   title, buttons,
2200: 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   icon);....     
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2220: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
2230: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2250: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2260: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2270: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2280: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2290: 20 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72             "User
22a0: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
22b0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
22c0: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2300: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2320: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2330: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
2340: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
2350: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
2360: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2370: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2380: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2390: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23a0: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61             "Defa
23b0: 75 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30  ult choice of {0
23c0: 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
23d0: 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20  result)),..     
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
23f0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2410: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
2420: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2430: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2440: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2450: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24a0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
24b0: 63 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74  cing Support Met
24c0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
24d0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
24e0: 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49 64  long NextDebugId
24f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
2500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2510: 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c     return Interl
2520: 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28  ocked.Increment(
2530: 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64 29  ref nextDebugId)
2540: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
25b0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
25c0: 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65 49   long NextTraceI
25d0: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
25e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25f0: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
2600: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
2610: 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49 64  (ref nextTraceId
2620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2630: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2640: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2690: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
26a0: 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74 61  c string TimeSta
26b0: 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74 65  mp(DateTime date
26c0: 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Time)..         
26d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74        return dat
26f0: 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49  eTime.ToString(I
2700: 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75  so8601DateTimeOu
2710: 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20  tputFormat);..  
2720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2730: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
2790: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
27a0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
27b0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
27c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
27d0: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4d  atic string GetM
27e0: 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20  ethodName(..    
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63              Stac
2800: 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63  kTrace stackTrac
2810: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2820: 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20      int level.. 
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2860: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
2870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
28b0: 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20 74   a valid stack t
28c0: 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75 70  race was not sup
28d0: 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  plied by the..  
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
2900: 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f  r, create one no
2910: 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  w based on the c
2920: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  urrent..        
2930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2940: 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20 73       execution s
2950: 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  tack...         
2960: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63     if (stackTrac
2990: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
29f0: 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e 74  Grab the current
2a00: 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b   execution stack
2a10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a40: 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61 63         stackTrac
2a50: 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72 61  e = new StackTra
2a60: 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ce();....       
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a80: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2aa0: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69  NOTE: Always ski
2ab0: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d  p this call fram
2ac0: 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75 72  e when we captur
2ad0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2ae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2af0: 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74 72      the stack tr
2b00: 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ace...          
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b30: 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b            level+
2b40: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
2b50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b80: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2b90: 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69 66  : Get the specif
2ba0: 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65 20  ied stack frame 
2bb0: 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65 20  (always add one 
2bc0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
2bd0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2be0: 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68 6f   skip this metho
2bf0: 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d)...           
2c00: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c20: 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61 63   StackFrame stac
2c30: 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54 72  kFrame = stackTr
2c40: 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65 76  ace.GetFrame(lev
2c50: 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  el);....        
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c80: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
2c90: 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72 20   the method for 
2ca0: 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65 2e  the stack frame.
2cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
2ce0: 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64 42  thodBase methodB
2cf0: 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d 65  ase = stackFrame
2d00: 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d  .GetMethod();...
2d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d20: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d40: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74 79  NOTE: Get the ty
2d50: 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68 6f  pe for the metho
2d60: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74 68  Type type = meth
2da0: 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e 67  odBase.Declaring
2db0: 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Type;....       
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
2df0: 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  t the name of th
2e00: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2e30: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
2e40: 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e  me = methodBase.
2e50: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e80: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
2e90: 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72 6c  turn the properl
2ea0: 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73 75  y formatted resu
2eb0: 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt...           
2ec0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
2ef0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f10: 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70  "{0}{1}{2}", typ
2f20: 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c  e.Name, Type.Del
2f30: 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a  imiter, name);..
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2f60: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
2f70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
2fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
2fd0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
2fe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ff0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3030: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3040: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3050: 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72 65  c void DebugCore
3060: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3070: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
3080: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
3090: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
30a0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
30b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
30c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30d0: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
30e0: 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20  cRoot)..        
30f0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 44          {..#if D
3100: 45 42 55 47 0d 0a 20 20 20 20 20 20 20 20 20 20  EBUG..          
3110: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74 65    // NOTE: Write
3140: 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f 20   the message to 
3150: 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20 64  all the active d
3160: 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ebug..          
3170: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3180: 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a 20     listeners... 
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
31b0: 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
31c0: 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61  .WriteLine(messa
31d0: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f0: 20 20 20 20 44 65 62 75 67 2e 46 6c 75 73 68 28      Debug.Flush(
3200: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3220: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3230: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3240: 46 6f 72 20 61 20 62 75 69 6c 64 20 77 69 74 68  For a build with
3250: 6f 75 74 20 22 44 45 42 55 47 22 20 64 65 66 69  out "DEBUG" defi
3260: 6e 65 64 2c 20 77 65 20 63 61 6e 6e 6f 74 0d 0a  ned, we cannot..
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6d      //       sim
3290: 70 6c 79 20 75 73 65 20 74 68 65 20 44 65 62 75  ply use the Debu
32a0: 67 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 69 74  g class (i.e. it
32b0: 20 77 69 6c 6c 20 64 6f 0d 0a 20 20 20 20 20 20   will do..      
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32d0: 20 20 20 20 20 20 20 6e 6f 74 68 69 6e 67 29 3b         nothing);
32e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use 
32f0: 74 68 65 20 63 6f 6e 73 6f 6c 65 20 64 69 72 65  the console dire
3300: 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ctly..          
3310: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3320: 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20     instead...   
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3340: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3350: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
3360: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
3370: 67 2e 46 6f 72 6d 61 74 28 22 7b 31 7d 3a 20 7b  g.Format("{1}: {
3380: 30 7d 22 2c 20 6d 65 73 73 61 67 65 2c 0d 0a 20  0}", message,.. 
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
33b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3440: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3450: 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20  d TraceCore(..  
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3470: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3490: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
34c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34d0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
34e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3500: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74 65    // NOTE: Write
3530: 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f 20   the message to 
3540: 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20 74  all the active t
3550: 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
3560: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3570: 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a 20     listeners... 
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
35a0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
35b0: 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61  .WriteLine(messa
35c0: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 20 54 72 61 63 65 2e 46 6c 75 73 68 28      Trace.Flush(
35f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3600: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3610: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3620: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3670: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
3680: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
3690: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
36a0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
36b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
36c0: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
36d0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
36e0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
36f0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
3700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3710: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
3720: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
3750: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
3770: 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69 6f  ception exceptio
3780: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
3790: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
37a0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
37b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
37c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37d0: 20 20 20 20 20 20 20 69 66 20 28 65 78 63 65 70         if (excep
37e0: 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  tion != null).. 
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41     return DebugA
3810: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3820: 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c  ority, debugCall
3830: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3850: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 65  raceCallback, ne
3860: 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78 63  w StackTrace(exc
3870: 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30  eption, true), 0
3880: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3890: 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70             excep
38a0: 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c  tion.ToString(),
38b0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
38d0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
38e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
38f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
3950: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
3960: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
3970: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
3980: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3990: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41  ic string DebugA
39a0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
39b0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
39c0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
39d0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
39e0: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
39f0: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62  lback debugCallb
3a00: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3a10: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
3a20: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
3a30: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
3a40: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
3a50: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
3a60: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
3a70: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
3a80: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3a90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3aa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3ab0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ad0: 20 20 20 74 72 61 63 65 50 72 69 6f 72 69 74 79     tracePriority
3ae0: 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
3af0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3b00: 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20 20 20 20  null, 1,..      
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
3b20: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
3b30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3ba0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
3bb0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
3bc0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
3bd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
3be0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
3bf0: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
3c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3c10: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
3c20: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3c40: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
3c50: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
3c70: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
3c80: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
3c90: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
3ca0: 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65  Trace stackTrace
3cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3cc0: 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20     int level,.. 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3ce0: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
3d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d20: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3d30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3d40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d50: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3d60: 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73  Always skip this
3d70: 20 63 61 6c 6c 20 66 72 61 6d 65 20 69 66 20 74   call frame if t
3d80: 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20 69  he stack trace i
3d90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
3da0: 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6f 69 6e     //       goin
3db0: 67 20 74 6f 20 62 65 20 63 61 70 74 75 72 65 64  g to be captured
3dc0: 20 62 79 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d   by GetMethodNam
3dd0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
3de0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3df0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63          if (stac
3e00: 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d  kTrace == null).
3e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e20: 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d       level++;...
3e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e40: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3e50: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
3e60: 72 6d 61 74 20 74 68 65 20 6d 65 73 73 61 67 65  rmat the message
3e70: 20 66 6f 72 20 64 69 73 70 6c 61 79 20 28 6f 6e   for display (on
3e80: 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ce)...          
3e90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3ea0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3eb0: 20 66 6f 72 6d 61 74 74 65 64 20 3d 20 53 74 72   formatted = Str
3ec0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 3a  ing.Format("{0}:
3ed0: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 4d              GetM
3ef0: 65 74 68 6f 64 4e 61 6d 65 28 73 74 61 63 6b 54  ethodName(stackT
3f00: 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c 20 6d 65  race, level), me
3f10: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssage);....     
3f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3f40: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  / NOTE: If the t
3f50: 72 61 63 65 20 70 72 69 6f 72 69 74 79 20 6f 66  race priority of
3f60: 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73   this message is
3f70: 20 6c 65 73 73 20 74 68 61 6e 0d 0a 20 20 20 20   less than..    
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3f90: 20 20 20 20 20 77 68 61 74 20 77 65 20 63 75 72       what we cur
3fa0: 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 20 64  rently want to d
3fb0: 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a  ebug, skip it...
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fd0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3fe0: 20 20 20 20 69 66 20 28 74 72 61 63 65 50 72 69      if (tracePri
3ff0: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
4000: 69 6f 72 69 74 79 29 0d 0a 20 20 20 20 20 20 20  iority)..       
4010: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4030: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4040: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4050: 20 49 66 20 6e 6f 74 20 73 70 65 63 69 66 69 65   If not specifie
4060: 64 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  d, use the defau
4070: 6c 74 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  lt debug callbac
4080: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
4090: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 69 66 20 28 64 65 62 75 67 43 61 6c 6c 62 61 63  if (debugCallbac
40c0: 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
40f0: 6b 20 3d 20 44 65 62 75 67 43 6f 72 65 3b 0d 0a  k = DebugCore;..
4100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4110: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4130: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
4140: 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b  e debug callback
4150: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
4160: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
4170: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4180: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
4190: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
41a0: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41c0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
41d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
41e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
4200: 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72  ebugCallback(for
4210: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
4220: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4230: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4240: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4260: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61  NOTE: If the tra
4270: 63 65 20 70 72 69 6f 72 69 74 79 20 6f 66 20 74  ce priority of t
4280: 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c  his message is l
4290: 65 73 73 20 74 68 61 6e 0d 0a 20 20 20 20 20 20  ess than..      
42a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
42b0: 20 20 20 77 68 61 74 20 77 65 20 63 75 72 72 65     what we curre
42c0: 6e 74 6c 79 20 77 61 6e 74 20 74 6f 20 74 72 61  ntly want to tra
42d0: 63 65 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20  ce, skip it...  
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
42f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4300: 20 20 69 66 20 28 74 72 61 63 65 50 72 69 6f 72    if (tracePrior
4310: 69 74 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f  ity >= TracePrio
4320: 72 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  rity)..         
4330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4360: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
4370: 66 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2c  f not specified,
4380: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
4390: 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
43a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
43d0: 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20   (traceCallback 
43e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    traceCallback 
4410: 3d 20 54 72 61 63 65 43 6f 72 65 3b 0d 0a 0d 0a  = TraceCore;....
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4450: 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20  OTE: Invoke the 
4460: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 77  trace callback w
4470: 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65  ith the formatte
4480: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
4490: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
44a0: 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20  message and the 
44b0: 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69  category specifi
44c0: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
44e0: 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  /       caller..
44f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4500: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
4520: 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61  ceCallback(forma
4530: 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b  tted, category);
4540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4560: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65         return me
4570: 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20 20  ssage;..        
4580: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4590: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
45a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
45b0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
45c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4610: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
4620: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  on MockRegistryK
4630: 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ey Class..      
4640: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
4650: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
4660: 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73  tryKey : IDispos
4670: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
4680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
4690: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
46a0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
46b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
46c0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
46d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
46e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
46f0: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d   whatIf = true;.
4700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4710: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65   readOnly = true
4720: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4730: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d     safe = true;.
4740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4750: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
4760: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
4770: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
47c0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
47d0: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
47e0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
47f0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
4800: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
4810: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
4820: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
4830: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
4850: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
4860: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4870: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
4880: 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20   = key;..       
4890: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
48a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
48b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
48f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4900: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
4910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4920: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
4930: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
4940: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
4950: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
4960: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4970: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
4980: 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20  (key)..         
4990: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
49a0: 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65        this.subKe
49b0: 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61  yName = subKeyNa
49c0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
49d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
49e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4a30: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
4a40: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
4a60: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a80: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
4a90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4aa0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ac0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4ad0: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
4ae0: 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20  subKeyName)..   
4af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
4b10: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
4b20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4b30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4b90: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
4ba0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
4bc0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4be0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c00: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c20: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20  bool readOnly.. 
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c50: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
4c60: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
4c70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c90: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20    this.readOnly 
4ca0: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  = readOnly;..   
4cb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4cc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
4d20: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
4d30: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4d40: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
4d50: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
4d60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
4d70: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
4d90: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
4da0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
4db0: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20  eadOnly,..      
4dc0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
4dd0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
4de0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4df0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
4e00: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
4e10: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
4e20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e40: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61    this.safe = sa
4e50: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
4e60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4e70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4eb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4ec0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
4ed0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
4ef0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f10: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f40: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
4f50: 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  , whatIf)..     
4f60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4f70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
4f80: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
4f90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4fa0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4ff0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5000: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
5010: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5020: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
5030: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
5040: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
5050: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5060: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5080: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5090: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
50a0: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
50b0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
50c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
50d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
50e0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
50f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5100: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5150: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5160: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5180: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
5190: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
51a0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
51b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51c0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
51d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51e0: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5210: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
5220: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
5230: 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20  ly, safe)..     
5240: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5250: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
5260: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
5270: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5280: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5290: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
52f0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
5300: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
5310: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
5320: 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20  d Close()..     
5330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5340: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5360: 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73   NOTE: No dispos
5370: 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62 65  ed check here be
5380: 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68  cause calling th
5390: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  is method..     
53a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
53b0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75      should be ju
53c0: 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20  st like calling 
53d0: 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20  Dispose...      
53e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
5400: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
5410: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5420: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5480: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5490: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
54a0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
54b0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
54c0: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
54d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
54e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
54f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
5500: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
5510: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5520: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5540: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
5550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5560: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
5570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5580: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
5590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
55a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
55b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55d0: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
55e0: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
55f0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
5600: 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5620: 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77  /       fails, w
5630: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
5640: 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65 64  turn the wrapped
5650: 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20   root key..     
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5670: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 73  /       itself s
5680: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
5690: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77  re allowed in 'w
56a0: 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20  hat-if'..       
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
56c0: 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f        mode anyho
56d0: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
56e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5700: 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
5710: 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62  ey = key.OpenSub
5720: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
5730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5740: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
5750: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  subKey != null) 
5760: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
5770: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
5780: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
5790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57b0: 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c   subKey, whatIf,
57c0: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
57d0: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
57f0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5820: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
5830: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
5840: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5870: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
58a0: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  urn new MockRegi
58b0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58d0: 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b    key.CreateSubK
58e0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
58f0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
5900: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
5910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5920: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5930: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5990: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
59a0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
59b0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
59c0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
59d0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
59e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5a00: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
5a20: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
5a30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5a40: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
5a50: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5a60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
5a70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5a80: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
5a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5aa0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
5ab0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
5ac0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
5ad0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5ae0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5b30: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
5b40: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65   DeleteSubKeyTre
5b50: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5b60: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
5b70: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
5b80: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5b90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5ba0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
5bb0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
5bc0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5bd0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5bf0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
5c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c10: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c30: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c50: 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b    key.DeleteSubK
5c60: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
5c70: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
5c80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5c90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ce0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
5cf0: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5d10: 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20  tring name..    
5d20: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
5d30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
5d50: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d70: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
5d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d90: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5da0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5db0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5dc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5dd0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
5de0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5df0: 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74         key.Delet
5e00: 65 56 61 6c 75 65 28 6e 61 6d 65 29 3b 0d 0a 20  eValue(name);.. 
5e10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5e70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5e80: 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47  ublic string[] G
5e90: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d  etSubKeyNames().
5ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ec0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5ed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5ee0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5ef0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5f00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5f10: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
5f20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5f30: 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61   key.GetSubKeyNa
5f40: 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  mes();..        
5f50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5f60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5fb0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
5fc0: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d  bject GetValue(.
5fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fe0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
6000: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
6010: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
6020: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
6030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6040: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
6050: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
6060: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
6070: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6090: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60b0: 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61  return key.GetVa
60c0: 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c  lue(name, defaul
60d0: 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  tValue);..      
60e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
60f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6140: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6150: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6160: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6180: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
6190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
61a0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
61b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
61c0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
61d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
61e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70         return Op
61f0: 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  enSubKey(subKeyN
6200: 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  ame, false);..  
6210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6220: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6280: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6290: 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28  yKey OpenSubKey(
62a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
62b0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
62c0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
62d0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61        bool writa
62e0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
62f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6310: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6320: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
6340: 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20  ritable)..      
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6360: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
6370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6380: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
6390: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
63a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
63b0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
63c0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
63d0: 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79  Key subKey = key
63e0: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
6410: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
6420: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6440: 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e  urn (subKey != n
6450: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
6460: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
6470: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6480: 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20  subKey, whatIf, 
6490: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20  readOnly, safe) 
64a0: 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
64b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
64c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
64d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6510: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6520: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
6560: 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
6570: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6580: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
65a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
65d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
65e0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
65f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6600: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6610: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6620: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
6630: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6640: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
6650: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
6660: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6680: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6690: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
66e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
66f0: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
6700: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
6710: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
6720: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
6730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6740: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6750: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6770: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6790: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
67a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
67d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
67e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21 53         return !S
67f0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
6800: 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20  pty(subKeyName) 
6810: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
6820: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
6830: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b  g.Format("{0}\\{
6840: 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73  1}", key.Name, s
6850: 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20  ubKeyName) :..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d        key.Name;.
6880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6890: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
68a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
68b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
68c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6900: 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67 69      private Regi
6910: 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20  stryKey key;..  
6920: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6930: 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79   RegistryKey Key
6940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6960: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
6970: 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66  osed(); CheckSaf
6980: 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b  e(); return key;
6990: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
69a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
69b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
69c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6a00: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
6a10: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a  ng subKeyName;..
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6a30: 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79  ic string SubKey
6a40: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
6a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6a60: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
6a70: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
6a80: 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d  rn subKeyName; }
6a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6b00: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
6b10: 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
6b20: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6b30: 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
6b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6b50: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
6b60: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
6b70: 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6bf0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61  private bool rea
6c00: 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  dOnly;..        
6c10: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6c20: 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  ReadOnly..      
6c30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6c40: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
6c50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
6c60: 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b  return readOnly;
6c70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6c80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6c90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6ce0: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6cf0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
6d00: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
6d10: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
6d20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6d30: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
6d40: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
6d50: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
6d60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6d70: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
6d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6de0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
6df0: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
6e00: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
6e10: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e  void CheckReadOn
6e20: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly()..          
6e30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6e40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
6e50: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
6e60: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22  : In "read-only"
6e70: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
6e80: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63  ow all write acc
6e90: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
6ea0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6eb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72            if (!r
6ec0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6ee0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
6ef0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
6f00: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
6f10: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
6f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6f90: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
6fa0: 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20  eckSafe()..     
6fb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6fc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6fe0: 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22   NOTE: In "safe"
6ff0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
7000: 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63  ow all direct ac
7010: 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20  cess to the..   
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7030: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20        contained 
7040: 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20  registry key... 
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7060: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
7070: 20 20 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20     if (!safe).. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7090: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
70b0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
70c0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
70d0: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
70e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
70f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
7100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
7160: 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a  egion System.Obj
7170: 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20  ect Overrides.. 
7180: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7190: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
71a0: 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20  g ToString()..  
71b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
71d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
71e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
71f0: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d   return this.Nam
7200: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
7210: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
7220: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
7230: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7280: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
7290: 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e  ion Implicit Con
72a0: 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72  version Operator
72b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
72c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
72d0: 2f 20 42 55 47 42 55 47 3a 20 54 68 65 20 27 77  / BUGBUG: The 'w
72e0: 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 73 65 74  hat-if' mode set
72f0: 74 69 6e 67 20 68 65 72 65 20 73 68 6f 75 6c 64  ting here should
7300: 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73   probably be bas
7310: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
7320: 2f 2f 20 20 20 20 20 20 20 20 20 6f 6e 20 73 6f  //         on so
7330: 6d 65 20 73 74 61 74 69 63 20 70 72 6f 70 65 72  me static proper
7340: 74 79 2c 20 6e 6f 74 20 68 61 72 64 2d 63 6f 64  ty, not hard-cod
7350: 65 64 20 74 6f 20 74 72 75 65 3f 0d 0a 20 20 20  ed to true?..   
7360: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7370: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
7380: 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74 20  static implicit 
7390: 6f 70 65 72 61 74 6f 72 20 4d 6f 63 6b 52 65 67  operator MockReg
73a0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
73b0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
73c0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
73e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7400: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
7410: 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 6e 75  istryKey(key, nu
7420: 6c 6c 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c  ll, true, false,
7430: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
7440: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7450: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
74a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
74b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47            // BUG
74c0: 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20  BUG: Remove me? 
74d0: 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   This should be 
74e0: 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20  safe because in 
74f0: 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20  'what-if'..     
7500: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
7510: 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20    mode all keys 
7520: 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d  are opened read-
7530: 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  only...         
7540: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7550: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
7560: 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74   implicit operat
7570: 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d  or RegistryKey(.
7580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7590: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
75a0: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
75b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
75c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
75d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
75e0: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b  key != null) ? k
75f0: 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a  ey.Key : null;..
7600: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7610: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
7620: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
7630: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7680: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7690: 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74  IDisposable "Pat
76a0: 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20  tern" Members.. 
76b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
76c0: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
76d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
76e0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
76f0: 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
7700: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
7710: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7720: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
7730: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
7740: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7750: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
7760: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7770: 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45   ObjectDisposedE
7780: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
77a0: 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74  ypeof(MockRegist
77b0: 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  ryKey).Name);.. 
77c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
77e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7820: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7830: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
7840: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
7850: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7870: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
78e0: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
78f0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
7900: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
7970: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
7980: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79e0: 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c    if (key != nul
79f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43             key.C
7a30: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b       key = null;
7a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7aa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ae0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
7af0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
7b00: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
7b70: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
7b80: 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
7b90: 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  now disposed... 
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7bc0: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
7bd0: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7c00: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
7c10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
7c20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7c70: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7c80: 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62  IDisposable Memb
7c90: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
7ca0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73   public void Dis
7cb0: 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  pose()..        
7cc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7cd0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
7ce0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
7cf0: 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65         GC.Suppre
7d00: 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29  ssFinalize(this)
7d10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
7d30: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7d40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7d90: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
7da0: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
7db0: 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b             ~Mock
7dc0: 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20  RegistryKey().. 
7dd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
7df0: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
7e00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7e10: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7e20: 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
7e30: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
7e40: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7ea0: 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74    #region Regist
7eb0: 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  ryHelper Class..
7ec0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7ed0: 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67  static class Reg
7ee0: 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20  istryHelper..   
7ef0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7f00: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
7f10: 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72  ic Static Proper
7f20: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
7f30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
7f40: 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61   int subKeysCrea
7f50: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
7f60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
7f70: 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74  int SubKeysCreat
7f80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
7f90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7fa0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
7fb0: 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20  subKeysCreated; 
7fc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8020: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8030: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8040: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c  c int subKeysDel
8050: 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  eted;..         
8060: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
8070: 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65   int SubKeysDele
8080: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
8090: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
80a0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
80b0: 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b   subKeysDeleted;
80c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
80d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
80e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8130: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
8140: 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73  ic int keyValues
8150: 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Set;..          
8160: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
8170: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74  int KeyValuesSet
8180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81a0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65   get { return ke
81b0: 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20  yValuesSet; }.. 
81c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
81e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8220: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8230: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
8240: 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t keyValuesDelet
8250: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
8260: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
8270: 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65  nt KeyValuesDele
8280: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
8290: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
82a0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
82b0: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
82c0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
82d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
82e0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
82f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
8350: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
8360: 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tic Methods..   
8370: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8380: 73 74 61 74 69 63 20 52 65 67 69 73 74 72 79 4b  static RegistryK
8390: 65 79 20 47 65 74 52 6f 6f 74 4b 65 79 42 79 4e  ey GetRootKeyByN
83a0: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
83b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
83c0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
83d0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
83e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
83f0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
8400: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
8410: 28 6b 65 79 4e 61 6d 65 29 29 0d 0a 20 20 20 20  (keyName))..    
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8450: 73 77 69 74 63 68 20 28 6b 65 79 4e 61 6d 65 2e  switch (keyName.
8460: 54 6f 55 70 70 65 72 49 6e 76 61 72 69 61 6e 74  ToUpperInvariant
8470: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8480: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8490: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
84a0: 20 22 48 4b 43 52 22 3a 0d 0a 20 20 20 20 20 20   "HKCR":..      
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
84c0: 73 65 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53  se "HKEY_CLASSES
84d0: 5f 52 4f 4f 54 22 3a 0d 0a 20 20 20 20 20 20 20  _ROOT":..       
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84f0: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
8500: 2e 43 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20  .ClassesRoot;.. 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8520: 20 20 20 63 61 73 65 20 22 48 4b 43 43 22 3a 0d     case "HKCC":.
8530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8540: 20 20 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f       case "HKEY_
8550: 43 55 52 52 45 4e 54 5f 43 4f 4e 46 49 47 22 3a  CURRENT_CONFIG":
8560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8580: 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
8590: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
85b0: 73 65 20 22 48 4b 43 55 22 3a 0d 0a 20 20 20 20  se "HKCU":..    
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85d0: 63 61 73 65 20 22 48 4b 45 59 5f 43 55 52 52 45  case "HKEY_CURRE
85e0: 4e 54 5f 55 53 45 52 22 3a 0d 0a 20 20 20 20 20  NT_USER":..     
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74     return Regist
8610: 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 3b 0d  ry.CurrentUser;.
8620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8630: 20 20 20 20 20 63 61 73 65 20 22 48 4b 44 44 22       case "HKDD"
8640: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
8650: 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 45         case "HKE
8660: 59 5f 44 59 4e 5f 44 41 54 41 22 3a 0d 0a 20 20  Y_DYN_DATA":..  
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
8690: 69 73 74 72 79 2e 44 79 6e 44 61 74 61 3b 0d 0a  istry.DynData;..
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86b0: 20 20 20 20 63 61 73 65 20 22 48 4b 4c 4d 22 3a      case "HKLM":
86c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86d0: 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 45 59        case "HKEY
86e0: 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22 3a  _LOCAL_MACHINE":
86f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8700: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8710: 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
8720: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
8740: 65 20 22 48 4b 50 44 22 3a 0d 0a 20 20 20 20 20  e "HKPD":..     
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8760: 61 73 65 20 22 48 4b 45 59 5f 50 45 52 46 4f 52  ase "HKEY_PERFOR
8770: 4d 41 4e 43 45 5f 44 41 54 41 22 3a 0d 0a 20 20  MANCE_DATA":..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
87a0: 69 73 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63  istry.Performanc
87b0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
87d0: 20 22 48 4b 55 22 3a 0d 0a 20 20 20 20 20 20 20   "HKU":..       
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
87f0: 65 20 22 48 4b 45 59 5f 55 53 45 52 53 22 3a 0d  e "HKEY_USERS":.
8800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8810: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8820: 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 3b 0d  Registry.Users;.
8830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8840: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8850: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
8860: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
8870: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8880: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
88d0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
88e0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
88f0: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
8910: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
8920: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
8930: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
8940: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8960: 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20  l writable,..   
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8980: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
8990: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
89a0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
89b0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
89c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
89d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
89e0: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
89f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a00: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
8a10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8a20: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
8a30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8a40: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
8a50: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
8a60: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
8a90: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
8aa0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
8ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ac0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
8ad0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
8ae0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
8af0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8b10: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
8b20: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
8b30: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
8b40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8b50: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
8b60: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
8b70: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
8b80: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ba0: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
8bb0: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
8bc0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
8bd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8bf0: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66  / HACK: Always f
8c00: 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61  orbid writable a
8c10: 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61  ccess when opera
8c20: 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20  ting in..       
8c30: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8c40: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
8c50: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8c60: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
8c70: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
8c80: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
8c90: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
8ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cb0: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
8cc0: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
8cd0: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
8ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8cf0: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
8d00: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
8d20: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8d30: 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61  (key, whatIf, fa
8d40: 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75  lse, false) : nu
8d50: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
8d60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8d70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8dc0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
8dd0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8de0: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e00: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
8e10: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
8e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8e30: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8e70: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8e90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8eb0: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
8ec0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8ed0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8ee0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8ef0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
8f00: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
8f10: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
8f20: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
8f30: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
8f40: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
8f70: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
8f80: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20         "rootKey 
8fb0: 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d  = {0}, subKeyNam
8fc0: 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  e = {1}",..     
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f     ForDisplay(ro
8ff0: 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c  otKey), ForDispl
9000: 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c  ay(subKeyName)),
9010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9020: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
9030: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
9050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9060: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9070: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73   // HACK: Always
90a0: 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61 74   open a key, rat
90b0: 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e  her than creatin
90c0: 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20 20  g one when..    
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69  //       operati
90f0: 6e 67 20 69 6e 20 27 77 68 61 74 2d 69 66 27 20  ng in 'what-if' 
9100: 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  mode...         
9110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9170: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
9180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
9190: 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  CK: Attempt to o
91a0: 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  pen the specifie
91b0: 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d 0a  d sub-key.  If..
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91d0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
91e0: 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65 20   this fails, we 
91f0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
9200: 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20 20  rn the root..   
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65       //       ke
9230: 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e  y itself since n
9240: 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c  o writes are all
9250: 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20  owed in..       
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9270: 20 2f 2f 20 20 20 20 20 20 20 27 77 68 61 74 2d   //       'what-
9280: 69 66 27 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e  if' mode anyhow.
9290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
92b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92c0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
92d0: 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74  ryKey key = root
92e0: 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73  Key.OpenSubKey(s
92f0: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
9320: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20  ey != null) ?.. 
9330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9340: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3a             key :
9350: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
9360: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
9390: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 72 75 65  subKeyName, true
93a0: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b  , false, false);
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
93e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
93f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9410: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63    return new Moc
9420: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
9450: 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey.CreateSubKey(
9460: 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 66 61 6c  subKeyName), fal
9470: 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  se, false,..    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d          false);.
94a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
94b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
94c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
94d0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
94e0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
94f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9500: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
9510: 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20  ysCreated++;..  
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9590: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
95a0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
95b0: 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79  oid DeleteSubKey
95c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
95d0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
95e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9600: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
9610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9620: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
9640: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9660: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9680: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
9690: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
96a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
96b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
96c0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
96d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
96e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
96f0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
9700: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
9710: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
9730: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
9740: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
9750: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9770: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
9780: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
9790: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
97b0: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
97c0: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
97d0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  ubKeyName)),..  
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
9800: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
9810: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
9820: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
9830: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
9840: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28  ey.DeleteSubKey(
9850: 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9870: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b  subKeysDeleted++
9880: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
98f0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
9900: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
9910: 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
9920: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
9930: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
9940: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9950: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
9960: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
9970: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
9980: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
9990: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
99a0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
99b0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
99c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
99d0: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
99e0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9a00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9a10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
9a20: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
9a40: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
9a50: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
9a60: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
9a90: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
9aa0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
9ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ac0: 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65           "rootKe
9ad0: 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e  y = {0}, subKeyN
9ae0: 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ame = {1}",..   
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
9b10: 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73  rootKey), ForDis
9b20: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
9b30: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
9b50: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9b70: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53   rootKey.DeleteS
9ba0: 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79  ubKeyTree(subKey
9bb0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
9bc0: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
9bd0: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
9be0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9bf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9c50: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
9c60: 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d  g[] GetSubKeyNam
9c70: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
9c80: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
9c90: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
9ca0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
9cb0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
9cc0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
9cd0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
9ce0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9cf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9d00: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9d10: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9d30: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9d50: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d70: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
9d80: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
9d90: 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20  ority.High,..   
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
9dc0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
9dd0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
9de0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9df0: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
9e00: 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
9e10: 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63 65 43  ay(key)), traceC
9e20: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9e40: 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65  urn key.GetSubKe
9e50: 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20  yNames();..     
9e60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9e70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9ec0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9ed0: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
9ee0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9ef0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
9f00: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
9f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f20: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
9f40: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
9f50: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
9f60: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
9f70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9f80: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
9f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9fa0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9fb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9fc0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9fd0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9fe0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9ff0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
a000: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
a010: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
a020: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
a030: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
a040: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
a050: 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
a070: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
a080: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
a090: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0b0: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
a0c0: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66   name = {1}, def
a0d0: 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22  aultValue = {2}"
a0e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a0f0: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
a100: 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
a110: 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20  isplay(name),.. 
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a130: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
a140: 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29  y(defaultValue))
a150: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
a160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a170: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
a180: 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64  GetValue(name, d
a190: 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20  efaultValue);.. 
a1a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a200: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
a210: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
a220: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
a240: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
a250: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a260: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
a270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a280: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a   object value,..
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2a0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
a2c0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a2e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a300: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a320: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a340: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a360: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
a370: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
a380: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3a0: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
a3b0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
a3c0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
a3d0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
a3f0: 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
a400: 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32   {1}, value = {2
a410: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
a430: 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f  Display(key), Fo
a440: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20  rDisplay(name), 
a450: 46 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65  ForDisplay(value
a460: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
a480: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4a0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4c0: 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e    key.SetValue(n
a4d0: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a  ame, value);....
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4f0: 6b 65 79 56 61 6c 75 65 73 53 65 74 2b 2b 3b 0d  keyValuesSet++;.
a500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a570: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
a580: 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28  oid DeleteValue(
a590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a5a0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
a5b0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
a5c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
a5d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
a5e0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
a5f0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
a600: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
a610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a620: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a640: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
a650: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a660: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a670: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a680: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
a690: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a6a0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
a6b0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
a6c0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
a6d0: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
a6f0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
a700: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
a710: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a730: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
a740: 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72  name = {1}", For
a750: 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20  Display(key),.. 
a760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a770: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
a780: 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  y(name)), traceC
a790: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a7b0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
a7d0: 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e  ey.DeleteValue(n
a7e0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
a7f0: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
a800: 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  esDeleted++;..  
a810: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a820: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
a830: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
a840: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a850: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a8b0: 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 4c   #region StringL
a8c0: 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
a8d0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
a8e0: 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 4c 69  d class StringLi
a8f0: 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e 67  st : List<string
a900: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
a910: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a920: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a 20   StringList().. 
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
a940: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
a950: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a960: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
a970: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
a980: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a990: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a9e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
a9f0: 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d 65  tringList(IEnume
aa00: 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63 6f  rable<string> co
aa10: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
aa20: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
aa30: 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  e(collection).. 
aa40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
aa60: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
aa70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
aa80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
aa90: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
aaa0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aaf0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
ab00: 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72   StringDictionar
ab10: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
ab20: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
ab30: 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69 63 74  class StringDict
ab40: 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69 6f 6e  ionary : Diction
ab50: 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74 72 69  ary<string, stri
ab60: 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng>..        {..
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ab80: 69 63 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e  ic StringDiction
ab90: 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ary()..         
aba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
abb0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
abc0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
abd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
abe0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
abf0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ac50: 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e   #region Version
ac60: 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
ac70: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
ac80: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
ac90: 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65 72 73  List : List<Vers
aca0: 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ion>..        {.
acb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
acc0: 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  lic VersionList(
acd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ace0: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
acf0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
ad10: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
ad20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ad30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ad90: 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 49  ic VersionList(I
ada0: 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72 73 69  Enumerable<Versi
adb0: 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  on> collection).
adc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
add0: 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69   : base(collecti
ade0: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
adf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ae00: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
ae10: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
ae20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
ae30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
ae40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
aea0: 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d 61  region VersionMa
aeb0: 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  p Class..       
aec0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
aed0: 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d 61 70  class VersionMap
aee0: 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74   : Dictionary<st
aef0: 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69 73  ring, VersionLis
af00: 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t>..        {.. 
af10: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
af20: 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d 0a  c VersionMap()..
af30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af50: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
af60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
af70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
af80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
af90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
afe0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
aff0: 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73 73 0d  n Package Class.
b000: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
b010: 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 50  l sealed class P
b020: 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20  ackage..        
b030: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
b040: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
b050: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
b060: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 50          public P
b070: 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20 20 20  ackage()..      
b080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b090: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
b0a0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
b0b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b0c0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
b0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b120: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b130: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
b140: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
b150: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b160: 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b 0d  Guid packageId;.
b170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
b180: 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67 65  lic Guid Package
b190: 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
b1a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b1b0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
b1c0: 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20  packageId; }..  
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
b1e0: 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d 20  t { packageId = 
b1f0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
b200: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b210: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b260: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b270: 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64  e Guid serviceId
b280: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
b290: 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76 69  ublic Guid Servi
b2a0: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
b2b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b2c0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
b2d0: 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a  n serviceId; }..
b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2f0: 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64 20  set { serviceId 
b300: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
b310: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b320: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b370: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b380: 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f 75  ate Guid dataSou
b390: 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  rceId;..        
b3a0: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
b3b0: 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20 20  DataSourceId..  
b3c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b3e0: 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53 6f   { return dataSo
b3f0: 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  urceId; }..     
b400: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
b410: 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20   dataSourceId = 
b420: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
b430: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b440: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b490: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b4a0: 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76 69  e Guid dataProvi
b4b0: 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  derId;..        
b4c0: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
b4d0: 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d 0a  DataProviderId..
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
b500: 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61  et { return data
b510: 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20  ProviderId; }.. 
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b530: 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64 65  et { dataProvide
b540: 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  rId = value; }..
b550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b5c0: 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64 6f  private Guid ado
b5d0: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b  NetTechnologyId;
b5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
b5f0: 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65 74  blic Guid AdoNet
b600: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20  TechnologyId..  
b610: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b630: 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65 74   { return adoNet
b640: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d  TechnologyId; }.
b650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b660: 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65 63   set { adoNetTec
b670: 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75  hnologyId = valu
b680: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
b690: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b6a0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
b6b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b6c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b6d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b720: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b730: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43   Configuration C
b740: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
b750: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
b760: 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ss Configuration
b770: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b780: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b790: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
b7a0: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
b7b0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68  private const ch
b7c0: 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27 3b  ar Switch = '-';
b7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b7e0: 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72  ivate const char
b7f0: 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f 27   AltSwitch = '/'
b800: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b810: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b850: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b860: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
b870: 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61 72  ic readonly char
b880: 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20 3d  [] SwitchChars =
b890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b8a0: 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74 53      Switch, AltS
b8b0: 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  witch..         
b8c0: 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20     };..         
b8d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b940: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
b950: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
b960: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b970: 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  e Configuration(
b980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b990: 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
b9a0: 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
b9b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67        string log
b9c0: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
b9d0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b9e0: 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ba00: 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
ba10: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ba20: 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
ba30: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
ba40: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ba50: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
ba60: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
ba70: 20 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67      string debug
ba80: 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
ba90: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
baa0: 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  traceFormat,..  
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
bac0: 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
bad0: 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  llFlags,..      
bae0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
baf0: 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
bb00: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
bb10: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
bb20: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
bb30: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
bb40: 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61        bool insta
bb50: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
bb60: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74       bool noRunt
bb70: 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
bb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
bb90: 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20  l noDesktop,..  
bba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bbb0: 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20  ol noCompact,.. 
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
bbd0: 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a  ool noNetFx20,..
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbf0: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d  bool noNetFx40,.
bc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc10: 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d   bool noVs2008,.
bc20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc30: 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d   bool noVs2010,.
bc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc50: 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a   bool noTrace,..
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d  bool noConsole,.
bc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc90: 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20   bool noLog,..  
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bcb0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
bcd0: 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
bce0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
bcf0: 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20  confirm..       
bd00: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
bd10: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bd20: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
bd30: 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65 6d  assembly = assem
bd40: 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
bd50: 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46 69        this.logFi
bd60: 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c 65  leName = logFile
bd70: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
bd80: 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 72 65         this.dire
bd90: 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72  ctory = director
bda0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
bdb0: 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69 6c      this.coreFil
bdc0: 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c 65  eName = coreFile
bdd0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
bde0: 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 71         this.linq
bdf0: 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71 46  FileName = linqF
be00: 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
be10: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
be20: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
be30: 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  = designerFileNa
be40: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
be50: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46       this.debugF
be60: 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72  ormat = debugFor
be70: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
be80: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
be90: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
bea0: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
beb0: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
bec0: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
bed0: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
bee0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
bef0: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
bf00: 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bf20: 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
bf30: 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
bf40: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
bf50: 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c      this.install
bf60: 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20   = install;..   
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
bf80: 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  s.noRuntimeVersi
bf90: 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65  on = noRuntimeVe
bfa0: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
bfb0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44          this.noD
bfc0: 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74  esktop = noDeskt
bfd0: 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op;..           
bfe0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70       this.noComp
bff0: 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b  act = noCompact;
c000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c010: 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30    this.noNetFx20
c020: 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20   = noNetFx20;.. 
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
c040: 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  his.noNetFx40 = 
c050: 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
c060: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
c070: 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
c080: 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
c090: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
c0a0: 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
c0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c0c0: 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d    this.noTrace =
c0d0: 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
c0e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
c0f0: 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f  noConsole = noCo
c100: 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
c110: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c          this.noL
c120: 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  og = noLog;..   
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
c140: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
c150: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
c160: 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
c170: 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
c190: 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
c1a0: 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
c1b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c1c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
c1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
c220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
c230: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
c240: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
c250: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
c260: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
c270: 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
c280: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
c290: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
c2a0: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
c2b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
c2c0: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
c2d0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
c2e0: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
c2f0: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c310: 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  ef string design
c320: 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
c330: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c340: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c360: 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d   (thisAssembly =
c370: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c390: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
c3a0: 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
c3b0: 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65  y = Path.GetDire
c3c0: 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73  ctoryName(thisAs
c3d0: 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
c3e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c3f0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
c400: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
c410: 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
c420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c430: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
c440: 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
c450: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
c460: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c480: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
c490: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  CoreFileName);..
c4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4b0: 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
c4c0: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
c4d0: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
c4f0: 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65  staller.LinqFile
c500: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
c510: 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
c520: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
c530: 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
c540: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
c550: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
c560: 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ler.DesignerFile
c570: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
c580: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c590: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c5d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c5e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
c5f0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
c600: 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  kOption(..      
c610: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
c620: 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20  ring arg..      
c630: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
c640: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c650: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c660: 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b  ng result = arg;
c670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c680: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
c690: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65  IsNullOrEmpty(re
c6a0: 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
c6b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6d0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c6e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
c6f0: 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69  Remove all leadi
c700: 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e  ng switch chars.
c710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c720: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c740: 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72  sult = result.Tr
c750: 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68  imStart(SwitchCh
c760: 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ars);....       
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c790: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f       // NOTE: Ho
c7a0: 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72  w many chars wer
c7b0: 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20  e removed?..    
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7d0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c7e0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e          int coun
c7f0: 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d  t = arg.Length -
c800: 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d   result.Length;.
c810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c820: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c840: 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72  / NOTE: Was ther
c850: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d  e at least one?.
c860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c870: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c890: 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20  (count > 0)..   
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8e0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
c8f0: 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65   Ok, replace the
c900: 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  ir original..   
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72       //       ar
c930: 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  gument...       
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c950: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
c970: 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20   = result;....  
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20    // NOTE: Yes, 
c9c0: 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68  this is a switch
c9d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c9e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ca10: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
ca20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ca40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ca50: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ca70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ca80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
caa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cac0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cad0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
cae0: 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28  ool MatchOption(
caf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb00: 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20    string arg,.. 
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
cb20: 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20  tring option..  
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
cb40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb60: 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c  if ((arg == null
cb70: 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20  ) || (option == 
cb80: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
cba0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
cbc0: 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61  urn String.Compa
cbd0: 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f  re(arg, 0, optio
cbe0: 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  n, 0,..         
cbf0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c             arg.L
cc00: 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d  ength, StringCom
cc10: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
cc20: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b  gnoreCase) == 0;
cc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
cc40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
cc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
cca0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
ccb0: 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c   bool? ParseBool
ccc0: 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ean(..          
ccd0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
cce0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
ccf0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
cd00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cd10: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
cd20: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
cd30: 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
cd40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
cd60: 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ol value;....   
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd80: 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72   if (bool.TryPar
cd90: 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c  se(text, out val
cda0: 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cdc0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
cde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cdf0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ce10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ce20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ce70: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
ce80: 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28  bject ParseEnum(
ce90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cea0: 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c    Type enumType,
ceb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cec0: 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a    string text,..
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cee0: 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20  bool noCase..   
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cf20: 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20  f ((enumType == 
cf30: 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79  null) || !enumTy
cf40: 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20  pe.IsEnum)..    
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf60: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf80: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
cf90: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
cfa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cfb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cfc0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfe0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
d000: 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65  urn Enum.Parse(e
d010: 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e  numType, text, n
d020: 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  oCase);..       
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
d070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d080: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
d090: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
d0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d0b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
d0d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d0e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
d0f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
d100: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
d110: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d160: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
d170: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
d180: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
d190: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d1a0: 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
d1b0: 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
d1c0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
d1d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d1e0: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
d1f0: 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d210: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
d220: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
d230: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d240: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
d250: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
d260: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
d270: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
d280: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
d290: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65 66            GetDef
d2a0: 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2c0: 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f 72      ref director
d2d0: 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e  y, ref coreFileN
d2e0: 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c  ame, ref linqFil
d2f0: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
d300: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
d310: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
d320: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d330: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
d340: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74   Configuration(t
d350: 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
d360: 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  l, directory,.. 
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c     coreFileName,
d390: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64   linqFileName, d
d3a0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3c0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d3d0: 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
d3e0: 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
d3f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d400: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
d410: 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ags.Default, Tra
d420: 63 65 50 72 69 6f 72 69 74 79 2e 44 65 62 75 67  cePriority.Debug
d430: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d440: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
d450: 72 69 74 79 2e 54 72 61 63 65 2c 20 74 72 75 65  rity.Trace, true
d460: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
d470: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d490: 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c     false, false,
d4a0: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
d4b0: 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75  alse, false, tru
d4c0: 65 2c 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20  e, true,..      
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
d4e0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
d4f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d500: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d550: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d560: 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72  atic bool FromAr
d570: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
d580: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
d590: 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
d5a0: 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
d5b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d5c0: 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61     ref Configura
d5d0: 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
d5e0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
d5f0: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
d600: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
d610: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
d620: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d630: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d660: 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
d670: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d690: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
d6c0: 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d6f0: 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72  ation = Configur
d700: 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61  ation.CreateDefa
d710: 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ult();....      
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d730: 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e  t length = args.
d740: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
d760: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
d770: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
d780: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
d7c0: 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e  ng arg = args[in
d7d0: 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
d810: 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79 20 61  NOTE: Skip any a
d820: 72 67 75 6d 65 6e 74 20 74 68 61 74 20 69 73 20  rgument that is 
d830: 6e 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65  null (?) or an e
d840: 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mpty..          
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d860: 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a         string...
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d880: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
d890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8a0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
d8b0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67  sNullOrEmpty(arg
d8c0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
d8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8e0: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d900: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d920: 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 72 65   // NOTE: We are
d930: 20 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79   going to modify
d940: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72   the original ar
d950: 67 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  gument..        
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 2f 2f 20 20 20 20 20 20 20 62 79 20 72 65 6d 6f  //       by remo
d980: 76 69 6e 67 20 61 6e 79 20 6c 65 61 64 69 6e 67  ving any leading
d990: 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65   option characte
d9a0: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
d9c0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
d9d0: 20 77 65 20 75 73 65 20 61 20 6e 65 77 20 73 74   we use a new st
d9e0: 72 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74 68 65  ring to hold the
d9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
da00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
da10: 20 20 20 6d 6f 64 69 66 69 65 64 20 61 72 67 75     modified argu
da20: 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ment...         
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
da40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
da50: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
da60: 67 20 6e 65 77 41 72 67 20 3d 20 61 72 67 3b 0d  g newArg = arg;.
da70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
da80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daa0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
dab0: 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
dac0: 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
dad0: 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65       //       be
db00: 67 69 6e 20 77 69 74 68 20 61 6e 20 6f 70 74 69  gin with an opti
db10: 6f 6e 20 63 68 61 72 61 63 74 65 72 20 28 65 2e  on character (e.
db20: 67 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20  g. a minus..    
db30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db40: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 72 20      //       or 
db50: 66 6f 72 77 61 72 64 20 73 6c 61 73 68 29 3b 20  forward slash); 
db60: 61 74 74 65 6d 70 74 20 74 6f 20 76 61 6c 69 64  attempt to valid
db70: 61 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20  ate that..      
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20    //       now. 
dba0: 20 49 66 20 77 65 20 66 61 69 6c 20 69 6e 20 73   If we fail in s
dbb0: 74 72 69 63 74 20 6d 6f 64 65 2c 20 77 65 20 61  trict mode, we a
dbc0: 72 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20  re done;..      
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
dbf0: 77 69 73 65 2c 20 6a 75 73 74 20 73 6b 69 70 20  wise, just skip 
dc00: 74 68 69 73 20 61 72 67 75 6d 65 6e 74 20 61 6e  this argument an
dc10: 64 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20  d advance..     
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74     //       to t
dc40: 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20  he next one...  
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc60: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc80: 20 20 69 66 20 28 21 43 68 65 63 6b 4f 70 74 69    if (!CheckOpti
dc90: 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29 0d  on(ref newArg)).
dca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
dce0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
dcf0: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
dd20: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
dd30: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
dd60: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
dd70: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
dda0: 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61  nsupported comma
ddb0: 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
ddc0: 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dde0: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
ddf0: 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
de00: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
de30: 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
de60: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65  // NOTE: All the
def0: 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61   supported comma
df00: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20  nd line options 
df10: 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
df20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
df30: 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61         have a va
df40: 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  lue; therefore, 
df50: 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e  attempt to advan
df60: 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
df70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
df80: 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20       to it now. 
df90: 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65 20   If we fail, we 
dfa0: 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20  are done...     
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfc0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
dfe0: 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  ndex++;....     
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
e010: 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  length)..       
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
e060: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
e070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
e0a0: 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
e0b0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
e0e0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
e0f0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e110: 20 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76        "Missing v
e120: 61 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a  alue for option:
e130: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
e160: 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
e170: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e190: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
e1a0: 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
e1d0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1f0: 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e230: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
e240: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
e250: 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 74 65  OTE: Grab the te
e260: 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  xtual value of t
e270: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  his command line
e280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e290: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
e2a0: 20 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20     option...    
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 73 74 72 69 6e 67 20 74 65 78 74 20 3d 20 61 72  string text = ar
e2f0: 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e330: 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72    // NOTE: Figur
e340: 65 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d  e out which comm
e350: 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20  and line option 
e360: 74 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  this is..       
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65 64   //       (based
e390: 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e 61   on a partial na
e3a0: 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74 68  me match) and th
e3b0: 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20  en try..        
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3d0: 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 74 65  //       to inte
e3e0: 72 70 72 65 74 20 74 68 65 20 74 65 78 74 75 61  rpret the textua
e3f0: 6c 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 63  l value as the c
e400: 6f 72 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20  orrect..        
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e 0d 0a  //       type...
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e440: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70 74      if (MatchOpt
e470: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72  ion(newArg, "str
e480: 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ict"))..        
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
e4c0: 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
e4d0: 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
e4e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e500: 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
e510: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
e560: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
e570: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
e5a0: 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
e5b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
e5f0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
e600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e620: 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
e630: 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
e640: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e660: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
e670: 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
e680: 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
e690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6b0: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
e6c0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6e0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
e6f0: 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e720: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
e750: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e790: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7b0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77    // NOTE: Allow
e7c0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
e7d0: 65 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a  e arguments to..
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
e800: 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68       override th
e810: 65 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73  e "strictness" s
e820: 65 74 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  etting..        
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e840: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f      //       pro
e850: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
e860: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...          
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e880: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8a0: 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c    strict = (bool
e8b0: 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e8e0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
e8f0: 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
e900: 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c  (newArg, "logFil
e910: 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
e960: 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  ogFileName = tex
e970: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
e980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
e9b0: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
e9c0: 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29  rg, "directory")
e9d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e9e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
ea10: 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
ea20: 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea60: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
ea70: 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74  : *SPECIAL* Must
ea80: 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c   refresh the fil
ea90: 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  e names..       
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eab0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65       //       he
eac0: 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75  re because the u
ead0: 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74  nderlying direct
eae0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb00: 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
eb10: 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb50: 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
eb60: 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
eb70: 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
eb80: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eba0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
ebb0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
ebc0: 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
ebf0: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
ec00: 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
ec10: 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
ec20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ec40: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
ec50: 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
ec60: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
ec90: 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43  me = Installer.C
eca0: 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
ecd0: 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
ece0: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
ecf0: 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed10: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
ed20: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
ed30: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
ed40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ed60: 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
ed70: 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
ed80: 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  on.linqFileName;
ed90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edb0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
edc0: 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
edd0: 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
ee00: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
ee10: 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69  tFileName(linqFi
ee20: 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee40: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
ee50: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
ee60: 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
ee70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee90: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
eea0: 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
eeb0: 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eed0: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
eee0: 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
eef0: 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
ef00: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef20: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
ef30: 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71  .directory, linq
ef40: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
ef70: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
ef80: 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
ef90: 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
efa0: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
efd0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
efe0: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
eff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f010: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
f020: 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
f030: 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c  Name(designerFil
f040: 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f060: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
f070: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
f080: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
f090: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0b0: 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
f0c0: 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
f0d0: 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
f0e0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f100: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
f110: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
f120: 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
f130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f150: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
f160: 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67  directory, desig
f170: 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f190: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
f1c0: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
f1d0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d  coreFileName")).
f1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f1f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f210: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
f220: 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
f230: 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f250: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
f270: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
f280: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e  ion(newArg, "lin
f290: 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  qFileName"))..  
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2d0: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
f2e0: 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  on.linqFileName 
f2f0: 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f310: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f320: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
f330: 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
f340: 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e  (newArg, "design
f350: 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  erFileName")).. 
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f390: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
f3a0: 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  ion.designerFile
f3b0: 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20  Name = text;..  
f3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3f0: 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
f400: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
f410: 65 62 75 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20  ebugFormat")).. 
f420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f430: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
f460: 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 20  ion.debugFormat 
f470: 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f490: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
f4a0: 62 75 67 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66  bugFormat = conf
f4b0: 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 46  iguration.debugF
f4c0: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f4f0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
f500: 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
f510: 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f  newArg, "traceFo
f520: 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f560: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
f570: 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  aceFormat = text
f580: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
f5a0: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
f5b0: 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
f5c0: 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b  ion.traceFormat;
f5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f600: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
f610: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
f620: 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
f630: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
f670: 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
f680: 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
f6b0: 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
f6c0: 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
f6f0: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f710: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
f740: 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
f750: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
f790: 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
f7a0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
f7d0: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
f7e0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f810: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
f820: 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
f850: 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
f860: 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
f870: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
f8a0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
f8d0: 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f900: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
f930: 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f970: 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
f980: 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
f990: 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
f9a0: 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9c0: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
f9d0: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
f9e0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
f9f0: 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
fa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
fa30: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
fa40: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
fa50: 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa90: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
faa0: 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
fab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fad0: 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
fae0: 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
faf0: 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb10: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
fb20: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
fb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb60: 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
fb70: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
fb80: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
fb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
fbb0: 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
fbc0: 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
fbd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbf0: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
fc00: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
fc10: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
fc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc30: 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
fc40: 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
fc50: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc70: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
fc80: 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
fc90: 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcc0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
fcd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcf0: 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
fd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
fd30: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
fd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
fd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
fda0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
fdb0: 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  ePriority = (Tra
fdc0: 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
fdd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
fdf0: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
fe00: 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
fe10: 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
fe20: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
fe40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe50: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
fe60: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
fe70: 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29  wArg, "install")
fe80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
fe90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
fec0: 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
fed0: 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
ff00: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
ff50: 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
ff60: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
ffa0: 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
ffb0: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
ffe0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
fff0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10020 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
10030 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
10040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
10070 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
10080 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
100c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100e0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10110 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
10120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10140 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
10190 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61  figuration.insta
101a0 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ll = (bool)value
101b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
101c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
101f0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
10200 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73  g, "installFlags
10210 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10240 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
10250 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
10260 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e         typeof(In
10290 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78  stallFlags), tex
102a0 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
102d0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10310 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
10320 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
10330 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
10370 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
10380 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
103b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
103c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
103f0 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66  nvalid install f
10400 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22  lags value: {0}"
10410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10430 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
10440 79 28 74 65 78 74 29 29 2c 20 74 72 61 63 65 43  y(text)), traceC
10450 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10480 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
104b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
104e0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10500 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10520 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
10530 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61 67  tion.installFlag
10540 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61 67  s = (InstallFlag
10550 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  s)value;..      
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
10590 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
105a0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e  n(newArg, "noRun
105b0 74 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a  timeVersion"))..
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
10600 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
10610 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
10640 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10660 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10680 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
10690 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
106a0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
106e0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
106f0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
10720 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
10730 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
10760 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
10770 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107a0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
107b0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
107c0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
107d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
107f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
10860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10880 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
108d0 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d  uration.noRuntim
108e0 65 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c  eVersion = (bool
108f0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10910 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
10920 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
10930 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
10940 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66  (newArg, "whatIf
10950 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10990 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
109a0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
109b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
109d0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
109e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
10a30 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
10a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a60 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
10a70 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
10a80 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10ab0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
10ac0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10af0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
10b00 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
10b10 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b30 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
10b40 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
10b50 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b80 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
10b90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
10bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
10bf0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c10 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
10c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10c40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10c60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
10c70 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  tIf = (bool)valu
10c80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cb0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
10cc0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
10cd0 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d  rg, "verbose")).
10ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10cf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
10d20 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
10d30 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
10d60 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
10d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
10db0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
10dc0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
10e00 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
10e10 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
10e40 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
10e50 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
10e80 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
10e90 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
10ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
10ed0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
10ee0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
10f10 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
10f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10f80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fe0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
10ff0 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65  guration.verbose
11000 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
11010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11020 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
11050 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
11060 20 22 63 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20   "confirm"))..  
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
110b0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
110c0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
110f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
11140 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
11150 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11180 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
11190 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
111a0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111c0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
111d0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
111e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11200 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
11210 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
11220 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11260 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
11270 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
112a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
112d0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11300 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11350 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
11380 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20  ation.confirm = 
11390 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
113e0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
113f0 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20  oDesktop"))..   
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11430 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
11440 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
11450 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
11480 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
114d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
114e0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11510 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
11520 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
11530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
11560 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
11570 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
115a0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
115b0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
115f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
11600 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
11630 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11660 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11690 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
116c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
11710 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d  tion.noDesktop =
11720 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
11730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11740 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
11770 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
11780 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20  noCompact"))..  
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
117d0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
117e0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
11810 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
11860 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
11870 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
118a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
118b0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
118c0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
118f0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11900 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
11930 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
11940 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11980 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
11990 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
119c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
119f0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11a20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
11aa0 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20  ation.noCompact 
11ab0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ad0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
11b00 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
11b10 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20  "noNetFx20")).. 
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
11b60 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
11b70 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b90 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
11ba0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11be0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
11bf0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
11c00 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11c30 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
11c40 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
11c50 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
11c80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
11c90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
11cc0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
11cd0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
11d10 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
11d20 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
11d50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
11d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11d80 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
11d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11db0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
11dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11de0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
11e30 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30  ration.noNetFx20
11e40 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
11e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
11e90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
11ea0 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a   "noNetFx40"))..
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
11ef0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
11f00 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
11f30 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
11f80 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
11f90 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
11fd0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
11fe0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12010 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
12020 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
12050 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
12060 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
120a0 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
120b0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
120e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
12150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
121c0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34  uration.noNetFx4
121d0 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
121e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
121f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12210 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
12220 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
12230 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a  , "noVs2008"))..
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
12280 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
12290 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122b0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
122c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
12310 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
12320 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
12360 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
12370 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
123a0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
123b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
123e0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
123f0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
12430 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
12440 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
12470 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
124e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
12510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12520 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12550 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
12560 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
12570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12580 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
125b0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
125c0 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20   "noVs2010")).. 
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
12610 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
12620 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12640 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
12650 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
126a0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
126b0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
126e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
126f0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
12700 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12730 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
12740 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
12770 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
12780 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127b0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
127c0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
127d0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12800 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12830 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12860 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
12870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12890 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
128e0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
128f0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12910 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
12940 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
12950 22 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20  "noTrace"))..   
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
129a0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
129b0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
129e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
12a30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
12a40 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12a70 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
12a80 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
12a90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12ac0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12ad0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
12b00 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
12b10 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
12b50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12b60 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12b90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12bc0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12bf0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12c20 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12c70 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28  tion.noTrace = (
12c80 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
12cd0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
12ce0 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20  Console"))..    
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
12d30 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
12d40 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
12d70 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12db0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
12dc0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
12dd0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12e00 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
12e10 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
12e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12e50 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
12e60 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
12e90 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
12ea0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
12ee0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
12ef0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12f20 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12f50 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
12f80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12fb0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13000 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  ion.noConsole = 
13010 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
13060 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
13070 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
130c0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
130d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
13100 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
13150 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
13160 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
13190 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
131a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
131e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
131f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
13220 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
13230 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
13240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
13260 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
13270 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
13280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
132b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
132e0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13310 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
13340 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13390 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76  .noLog = (bool)v
133a0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
133c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
133d0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13410 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13420 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13430 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
13460 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
13470 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
134a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
134b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
134e0 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
134f0 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b  d line option: {
13500 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
13530 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
13540 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
13570 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
135a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
135b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
135e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
135f0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
13600 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13610 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
13620 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
13630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13650 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
13660 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
13670 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
13680 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
136a0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
136b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
136c0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
136d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
136e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
136f0 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79  Failed to modify
13700 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
13710 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13720 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13730 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
13740 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
13750 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13760 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
13770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
137a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
137b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
137c0 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
137d0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
137e0 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
137f0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
13800 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
13810 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
13820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13830 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
13860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13870 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
13880 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13890 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
138a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138c0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
138d0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13900 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
13910 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66   = "Invalid conf
13920 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13950 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
13960 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13980 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
13990 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  bly = configurat
139a0 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d  ion.assembly;...
139b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139c0 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
139d0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13a00 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
13a10 20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65   = "Invalid asse
13a20 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20  mbly.";..       
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13a80 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
13a90 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20  noTrace)..      
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ac0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
13ad0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
13ae0 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  g &&..          
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f    String.IsNullO
13b10 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61  rEmpty(configura
13b20 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
13b30 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13b40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
13b70 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
13b80 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
13b90 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  eName();..      
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
13c30 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d  tion.noConsole).
13c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c90 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
13ca0 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f 64 65   In verbose mode
13cb0 2c 20 64 65 62 75 67 20 6f 75 74 70 75 74 20 28  , debug output (
13cc0 74 68 61 74 20 6d 65 65 74 73 0d 0a 20 20 20 20  that meets..    
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13cf0 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
13d00 70 72 69 6f 72 69 74 79 20 63 72 69 74 65 72 69  priority criteri
13d10 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  a) will be..    
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13d40 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68   displayed to th
13d50 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72  e console; other
13d60 77 69 73 65 2c 20 74 72 61 63 65 0d 0a 20 20 20  wise, trace..   
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13d90 20 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d    output (that m
13da0 65 65 74 73 20 74 68 65 20 63 6f 6e 66 69 67 75  eets the configu
13db0 72 65 64 20 70 72 69 6f 72 69 74 79 0d 0a 20 20  red priority..  
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13de0 20 20 20 63 72 69 74 65 72 69 61 29 20 77 69 6c     criteria) wil
13df0 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64 20 74  l be displayed t
13e00 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a  o the console...
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13e50 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76  !configuration.v
13e60 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
13eb0 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
13ec0 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
13ed0 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 44 45 42        }..#if DEB
13f00 55 47 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  UG..            
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
13f90 3a 20 46 6f 72 20 61 20 62 75 69 6c 64 20 77 69  : For a build wi
13fa0 74 68 20 22 44 45 42 55 47 22 20 64 65 66 69 6e  th "DEBUG" defin
13fb0 65 64 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  ed, we..        
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13fe0 20 63 61 6e 20 73 69 6d 70 6c 79 20 75 73 65 20   can simply use 
13ff0 74 68 65 20 44 65 62 75 67 20 63 6c 61 73 73 3b  the Debug class;
14000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72    //       other
14030 77 69 73 65 2c 20 74 68 65 20 63 6f 6e 73 6f 6c  wise, the consol
14040 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 0d 0a  e will be used..
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6c  //       directl
14080 79 20 28 62 79 20 44 65 62 75 67 43 6f 72 65 29  y (by DebugCore)
14090 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 44 65 62 75 67 2e 4c 69 73         Debug.Lis
140e0 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
140f0 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
14100 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
14170 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26  uration.noLog &&
14180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 53                !S
141a0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
141b0 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  pty(configuratio
141c0 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d  n.logFileName)).
141d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
14210 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
14220 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65 4c  TextWriterTraceL
14230 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20  istener(..      
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14260 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
14270 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame));..        
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
142a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
142d0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
142e0 20 44 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67   Dump the config
142f0 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63  uration now in c
14300 61 73 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a  ase we need to..
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f      //       tro
14330 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73  ubleshoot any is
14340 73 75 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  sues...         
14350 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
14380 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
14390 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
143a0 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
143d0 6f 6e 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c  on.Dump(debugCal
143e0 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14400 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
14410 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c  .tracePriority <
14420 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
14430 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14450 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
14460 75 6d 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63  ump(traceCallbac
14470 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
14480 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77     // NOTE: Show
144b0 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72 75   where we are ru
144c0 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68  nning from and h
144d0 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20  ow we were..    
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64  //       invoked
14500 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14510 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
14530 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d  tring location =
14540 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69   assembly.Locati
14550 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
14560 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14570 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
14580 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
14590 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145b0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
145c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
145d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20         "Running 
14600 65 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b  executable is: {
14610 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
14620 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20  location)),..   
14630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14640 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14650 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
14660 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14670 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14680 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
14690 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
146c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
146d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146f0 20 20 20 20 20 20 20 20 22 4f 72 69 67 69 6e 61          "Origina
14700 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69  l command line i
14710 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s: {0}",..      
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f    Environment.Co
14740 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63  mmandLine), trac
14750 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14770 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
14780 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20  ation.whatIf).. 
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
147c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
147d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
147e0 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 67  E: If the debugg
147f0 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20 61  er is attached a
14800 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f 64 65 0d  nd What-If mode.
14810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14820 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
14830 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62    is [now] disab
14840 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77 61 72  led, issue a war
14850 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ning...         
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14870 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
14880 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 44             if (D
14890 65 62 75 67 67 65 72 2e 49 73 41 74 74 61 63 68  ebugger.IsAttach
148a0 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
148d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
148e0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
14910 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
14920 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
14950 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65  orced to disable
14960 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64   \"what-if\" mod
14970 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20  e with " +..    
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14990 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65 62              "deb
149a0 75 67 67 65 72 20 61 74 74 61 63 68 65 64 2e 22  ugger attached."
149b0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
149c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
149d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
149f0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
14a00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
14a30 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
14a40 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
14a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
14a70 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
14a80 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74 75          "No actu
14ab0 61 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20  al changes will 
14ac0 62 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20  be made to this 
14ad0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 22 73 79 73 74 65 6d 20 62 65 63 61 75 73 65   "system because
14b00 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64   \"what-if\" mod
14b10 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d  e is enabled.",.
14b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14b40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14b70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
14ba0 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
14bb0 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e  has not been man
14bc0 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  ually..         
14bd0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14be0 20 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69      confirmed (i
14bf0 2e 65 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c  .e. via the expl
14c00 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  icit command lin
14c10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
14c20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
14c30 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74  option), then st
14c40 6f 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f  op processing no
14c50 77 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a  w.  We enforce..
14c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69      //       thi
14c80 73 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73  s rule so that s
14c90 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69  imply double-cli
14ca0 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  cking the..     
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14cc0 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62  /       executab
14cd0 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75  le will not resu
14ce0 6c 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65  lt in any change
14cf0 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20  s being..       
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14d10 20 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68        made to th
14d20 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20  e system...     
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14d40 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
14d50 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
14d60 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
14d70 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
14d80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e     error = "Cann
14db0 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65  ot continue, the
14dc0 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74   \"confirm\" opt
14dd0 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20  ion is " +..    
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61          "not ena
14e00 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20  bled.";....     
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
14e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
14e60 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e90 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
14ea0 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
14eb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14ec0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14ed0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14ee0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
14ef0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
14f20 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
14f30 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
14f40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
14f50 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14f60 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72   = "Failed to pr
14f70 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74  ocess configurat
14f80 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  ion.";..        
14f90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14fb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
14fc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14fd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
14fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
15020 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
15030 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43  ic static bool C
15040 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69  heckRuntimeVersi
15050 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
15060 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
15070 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
15080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15090 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d     bool strict,.
150a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
150b0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
150c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
150d0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
150e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
150f0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
15100 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15120 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
15130 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15160 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
15170 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e  r = "Invalid con
15180 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20  figuration.";.. 
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
151b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
151c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
151f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
15200 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e  TE: What version
15210 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20   of the runtime 
15220 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70 72  was the core (pr
15230 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20  imary)..        
15240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15250 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f       assembly co
15260 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28  mpiled against (
15270 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37  e.g. "v2.0.50727
15280 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  " or..          
15290 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
152a0 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29     "v4.0.30319")
152b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
152c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
152e0 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52  tring coreImageR
152f0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
15300 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  GetImageRuntimeV
15310 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15330 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
15340 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
15350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15360 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
15380 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74  NOTE: We allow t
15390 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65 20  he actual image 
153a0 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e 67  runtime checking
153b0 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..        
153c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
153d0 20 20 20 20 20 62 79 70 61 73 73 65 64 20 76 69       bypassed vi
153e0 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d  a the "-noRuntim
153f0 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e  eVersion" comman
15400 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
15410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15420 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68       option.  Th
15430 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  e command line o
15440 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65  ption is intende
15450 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  d for..         
15460 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
15470 20 20 20 20 65 78 70 65 72 74 20 75 73 65 20 6f      expert use o
15480 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
15490 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
154c0 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72  ion.noRuntimeVer
154d0 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  sion)..         
154e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
15510 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
15520 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
15530 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m,..            
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
15560 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15570 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
155a0 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  bly is compiled 
155b0 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61  for the .NET Fra
155c0 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d  mework {0}; " +.
155d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68 6f               "ho
155f0 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74  wever, installat
15600 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e 73  ion restrictions
15610 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20 22   based on this "
15620 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 22 66 61 63 74 20 68 61 76 65 20 62 65 65 6e 20  "fact have been 
15650 64 69 73 61 62 6c 65 64 20 76 69 61 20 74 68 65  disabled via the
15660 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c   command line.",
15670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15690 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
156a0 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61 74  rsion), traceCat
156b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
156e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
156f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15720 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52        // TODO: R
15730 65 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e 66  estrict the conf
15740 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64 20  iguration based 
15750 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d 0a  on which image..
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75 6e      //       run
15780 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28 77  time versions (w
15790 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73  hich more-or-les
157a0 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20  s correspond..  
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e    //       to .N
157d0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72  ET Framework ver
157e0 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70 6f  sions) are suppo
157f0 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  rted by the..   
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69 6f   //       versio
15820 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75  ns of Visual Stu
15830 64 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e 73  dio that are ins
15840 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20  talled...       
15850 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
15860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15870 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
15880 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
15890 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
158a0 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
158c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
158e0 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66 69  "invalid core fi
158f0 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  le image runtime
15900 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
15930 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15940 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
15960 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
15970 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
159a0 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
159b0 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
159c0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
159f0 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
15a00 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
15a10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a50 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
15a60 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e  the CLR v2.0 run
15a70 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
15a80 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20  we disable..    
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79      //       any
15ab0 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20   attempt to use 
15ac0 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68  it for things th
15ad0 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20  at require..    
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15af0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20      //       an 
15b00 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
15b10 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34  d for the CLR v4
15b20 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20  .0.  It is..    
15b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b40 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63      //       unc
15b50 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20 69  ertain if this i
15b60 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f  s actually a pro
15b70 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20  blem in..       
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74 69   //       practi
15ba0 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76 34  ce as the CLR v4
15bb0 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20  .0 can load and 
15bc0 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20  use an..        
15bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15be0 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
15bf0 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  y compiled with 
15c00 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f  the CLR v2.0; ho
15c10 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  wever,..        
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20 74  //       since t
15c40 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65  his project offe
15c50 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72  rs both configur
15c60 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  ations,..       
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75 72   //       we cur
15c90 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20  rently disallow 
15ca0 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a  this mismatch...
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15cf0 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72  n.noNetFx40 = tr
15d00 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15d20 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
15d30 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  010 = true;.... 
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
15d60 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
15d70 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
15d80 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
15db0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15dc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
15df0 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
15e00 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
15e10 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b  amework {0}, " +
15e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
15e40 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20  upport for .NET 
15e50 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73  Framework {1} is
15e60 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c   now disabled.",
15e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4c                CL
15e90 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
15ea0 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
15eb0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
15ec0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
15ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15f10 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15f20 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
15f30 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
15f60 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
15f70 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
15f80 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
15fb0 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
15fc0 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
15fd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ff0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
16020 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69  e CLR v4.0 runti
16030 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
16040 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16060 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
16070 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
16080 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
16090 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
160c0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
160d0 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
160e0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
160f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16120 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
16130 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
16160 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a  Vs2008 = true;..
16170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16180 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
16190 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
161a0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
161b0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
161e0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
161f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
16200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
16220 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
16230 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
16240 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20   Framework {0}, 
16250 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e   "support for .N
16280 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d  ET Framework {1}
16290 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64   is now disabled
162a0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
162b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162c0 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76   ForDisplay(CLRv
162d0 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
162e0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43      ForDisplay(C
16310 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
16320 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16350 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
163a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
163b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
163c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
163d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e               "un
163f0 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66  supported core f
16400 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
16410 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20  e version " +.. 
16420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16430 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c             "{0},
16440 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20   must be {1} or 
16450 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
16480 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
16490 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
164a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164b0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
164c0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
164d0 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
16500 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  ay(CLRv4ImageRun
16510 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  timeVersion));..
16520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16530 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16540 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16570 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
16580 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16590 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
165a0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
165b0 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
165c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
165f0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
16600 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
16610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16620 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
16630 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
16640 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
16650 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65    error = "Faile
16680 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65  d to check image
16690 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
166a0 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
166b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
166c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
166d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
166e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
166f0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
16700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
16710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16750 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16760 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
16770 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
16780 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
16790 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20   HasFlags(..    
167a0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
167b0 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67  allFlags hasFlag
167c0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
167d0 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20      bool all..  
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
167f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20  if (all)..      
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16830 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c  turn ((installFl
16840 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20  ags & hasFlags) 
16850 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20  == hasFlags);.. 
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16870 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
16880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16890 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26  ((installFlags &
168a0 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e   hasFlags) != In
168b0 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29  stallFlags.None)
168c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
168d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
168e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
168f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16920 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
16930 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
16940 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ump(..          
16950 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
16960 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
16970 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  k..             
16980 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
16990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
169a0 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61       if (traceCa
169b0 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d  llback != null).
169c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
169d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
169e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
169f0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
16a00 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
16a10 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72   "Assembly", For
16a40 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79  Display(assembly
16a50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16a70 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16aa0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
16ab0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
16ac0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f               "Lo
16ae0 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  gFileName", ForD
16af0 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61  isplay(logFileNa
16b00 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16b20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b40 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16b50 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
16b60 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
16b70 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16b90 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44  Directory", ForD
16ba0 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
16bb0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16bd0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16c00 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
16c10 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
16c20 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
16c40 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  reFileName", For
16c50 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65  Display(coreFile
16c60 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16ca0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16cb0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
16cc0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
16cd0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c   "LinqFileName",
16d00 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71   ForDisplay(linq
16d10 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16d40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16d50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16d60 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
16d70 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
16d80 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 20 20 20 20 22 44 65 73 69 67 6e 65 72 46 69       "DesignerFi
16db0 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
16dc0 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  lay(designerFile
16dd0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16e10 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16e20 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
16e30 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
16e40 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20   "DebugFormat", 
16e70 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
16e80 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
16eb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16ec0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16ed0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
16ee0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
16ef0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
16f20 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
16f30 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16f60 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16f70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16f80 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
16f90 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
16fa0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
16fd0 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
16fe0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
16ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17000 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17010 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
17040 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
17050 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
17060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17070 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 50           "DebugP
17080 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
17090 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f 72 69  play(debugPriori
170a0 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
170c0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
170d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
170f0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
17100 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
17110 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17130 54 72 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20  TracePriority", 
17140 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
17150 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
17160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17170 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17180 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
17190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
171a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
171b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
171c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20       "Install", 
171f0 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61  ForDisplay(insta
17200 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ll)),..         
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17220 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17240 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17250 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
17260 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
17270 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17290 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
172a0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
172b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
172c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
172d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
172e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
17310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
17320 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
17330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17340 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
17350 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
17360 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
17370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17380 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17390 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
173c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
173d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
173e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
173f0 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
17400 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
17410 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17440 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17460 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
17470 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
17480 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
174b0 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
174c0 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
174f0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
17500 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17510 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
17520 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
17530 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22       "NoNetFx40"
17560 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
17570 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20  etFx40)),..     
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
175a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
175b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
175c0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
175d0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
175e0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46     "NoVs2008", F
17610 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
17620 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  08)),..         
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17640 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17660 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17670 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
17680 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
17690 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
176b0 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69  NoVs2010", ForDi
176c0 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29  splay(noVs2010))
176d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
176e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
176f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
17720 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
17730 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
17740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17750 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72             "NoTr
17760 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ace", ForDisplay
17770 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20  (noTrace)),..   
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
177a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
177b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
177c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
177d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
177e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17800 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22       "NoConsole"
17810 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43  , ForDisplay(noC
17820 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20  onsole)),..     
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17850 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17860 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17870 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
17880 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
17890 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44     "NoLog", ForD
178c0 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d  isplay(noLog)),.
178d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
178e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
178f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
17920 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
17930 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
17940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17950 20 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66           "WhatIf
17960 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68  ", ForDisplay(wh
17970 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20  atIf)),..       
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
179a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
179b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
179c0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
179d0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
179e0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44   "Verbose", ForD
17a10 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29  isplay(verbose))
17a20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17a30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17a40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
17a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a60 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
17a70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
17a80 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
17a90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17aa0 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66             "Conf
17ab0 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  irm", ForDisplay
17ac0 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20  (confirm)),..   
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17af0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
17b00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17b10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17b20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
17b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
17b90 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
17ba0 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
17bb0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
17bc0 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
17bd0 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
17be0 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20  public Assembly 
17bf0 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  Assembly..      
17c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17c10 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17c20 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20  eturn assembly; 
17c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17c40 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c     set { assembl
17c50 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
17c60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17c70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
17cd0 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67  ivate string log
17ce0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
17cf0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
17d00 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65  ring LogFileName
17d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d30 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f   get { return lo
17d40 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  gFileName; }..  
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
17d60 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  t { logFileName 
17d70 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
17d80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17d90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
17da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
17de0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
17df0 61 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63  ate string direc
17e00 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
17e10 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
17e20 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   Directory..    
17e30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17e40 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
17e50 20 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72   return director
17e60 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
17e70 20 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65        set { dire
17e80 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ctory = value; }
17e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
17eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ef0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
17f00 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
17f10 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
17f20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
17f30 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69  ic string CoreFi
17f40 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
17f50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17f60 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
17f70 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  urn coreFileName
17f80 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
17f90 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46       set { coreF
17fa0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
17fb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17fc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17fd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18010 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18020 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
18030 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  ng linqFileName;
18040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18050 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71  blic string Linq
18060 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
18070 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18080 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
18090 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61  eturn linqFileNa
180a0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
180b0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e         set { lin
180c0 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  qFileName = valu
180d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
180e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
180f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
18100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18130 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18140 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
18150 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
18160 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
18170 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
18180 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g DesignerFileNa
18190 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
181a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
181b0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
181c0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
181d0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
181e0 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67       set { desig
181f0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  nerFileName = va
18200 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
18210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18220 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18260 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18270 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18280 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d  string debugForm
18290 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
182a0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
182b0 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
182c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
182d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
182e0 20 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72   return debugFor
182f0 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
18300 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
18310 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  bugFormat = valu
18320 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
18330 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18340 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
18350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18380 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18390 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
183a0 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
183b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
183c0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61  ublic string Tra
183d0 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
183e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
183f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
18400 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
18410 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
18420 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
18430 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
18440 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18450 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18460 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
184b0 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74      private Inst
184c0 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
184d0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
184e0 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61      public Insta
184f0 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46  llFlags InstallF
18500 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
18510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18520 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
18530 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20  n installFlags; 
18540 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18550 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
18560 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
18570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
185e0 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
185f0 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
18600 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
18610 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
18620 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72  Priority DebugPr
18630 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
18640 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18650 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
18660 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74  urn debugPriorit
18670 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
18680 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
18690 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  gPriority = valu
186a0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
186b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
186c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
186d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18710 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72        private Tr
18720 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
18730 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
18740 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
18750 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61  racePriority Tra
18760 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  cePriority..    
18770 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18780 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
18790 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
187a0 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20  ority; }..      
187b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
187c0 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
187d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
187e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
187f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18840 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
18850 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d  e bool install;.
18860 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
18870 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c  lic bool Install
18880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
18890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
188b0 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20  stall; }..      
188c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
188d0 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b  install = value;
188e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
188f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18900 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18940 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18950 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
18960 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
18970 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
18980 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75  public bool NoRu
18990 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20  ntimeVersion..  
189a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
189c0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74   { return noRunt
189d0 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20  imeVersion; }.. 
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
189f0 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65  et { noRuntimeVe
18a00 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
18a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18a20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18a80 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
18a90 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
18aa0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
18ab0 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20  ol NoDesktop..  
18ac0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
18ae0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b   { return noDesk
18af0 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  top; }..        
18b00 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
18b10 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b  Desktop = value;
18b20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18b30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18b40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18b90 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
18ba0 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20   noCompact;..   
18bb0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
18bc0 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a  bool NoCompact..
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
18bf0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
18c00 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20  mpact; }..      
18c10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
18c20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75  noCompact = valu
18c30 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
18c40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18c50 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
18c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18ca0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
18cb0 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20  ol noNetFx20;.. 
18cc0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
18cd0 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30  c bool NoNetFx20
18ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
18cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d00 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
18d10 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20  NetFx20; }..    
18d20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
18d30 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61  { noNetFx20 = va
18d40 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
18d50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18d60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18da0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18db0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18dc0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  bool noNetFx40;.
18dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
18de0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
18df0 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..            
18e00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18e10 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
18e20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20  noNetFx40; }..  
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
18e40 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20  t { noNetFx40 = 
18e50 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
18e60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18e70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18ec0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
18ed0 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b  e bool noVs2008;
18ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18ef0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
18f00 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  08..            
18f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18f20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
18f30 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20  noVs2008; }..   
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
18f50 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61   { noVs2008 = va
18f60 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
18f70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18f80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fc0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18fd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18fe0 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  bool noVs2010;..
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
19000 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30  ic bool NoVs2010
19010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19030 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
19040 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20  Vs2010; }..     
19050 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
19060 20 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75   noVs2010 = valu
19070 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
19080 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19090 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
190a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
190e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
190f0 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20  ol noTrace;..   
19100 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
19110 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20  bool NoTrace..  
19120 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
19140 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63   { return noTrac
19150 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
19160 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72        set { noTr
19170 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ace = value; }..
19180 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19190 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
191a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
191f0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43  private bool noC
19200 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20  onsole;..       
19210 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
19220 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20   NoConsole..    
19230 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19240 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
19250 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c   return noConsol
19260 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
19270 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f        set { noCo
19280 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d  nsole = value; }
19290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
192a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
192b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
192f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19300 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
19310 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  oLog;..         
19320 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
19330 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20  oLog..          
19340 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19350 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
19360 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20  n noLog; }..    
19370 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
19380 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b  { noLog = value;
19390 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
193a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
193b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
193c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
193f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19400 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
19410 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
19420 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
19430 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l WhatIf..      
19440 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19450 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
19460 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d  eturn whatIf; }.
19470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19480 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20   set { whatIf = 
19490 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
194a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
194b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
194c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
194f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19500 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
19510 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d  e bool verbose;.
19520 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19530 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65  lic bool Verbose
19540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19560 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
19570 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20  rbose; }..      
19580 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
19590 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b  verbose = value;
195a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
195b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
195c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
195d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
195f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19600 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19610 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
19620 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20   confirm;..     
19630 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
19640 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20  ol Confirm..    
19650 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19660 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
19670 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b   return confirm;
19680 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19690 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72      set { confir
196a0 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  m = value; }..  
196b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
196c0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
196d0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
196e0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
196f0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
19700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19740 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19750 20 23 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f   #region Framewo
19760 72 6b 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  rkList Class..  
19770 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
19780 61 6c 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65  aled class Frame
19790 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20  workList..      
197a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
197b0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
197c0 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
197d0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
197e0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29   FrameworkList()
197f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19810 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
19820 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19830 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
19840 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
19850 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
19860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19890 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
198a0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
198b0 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
198c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
198d0 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65 79  vate RegistryKey
198e0 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20   rootKey;..     
198f0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52 65         public Re
19900 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65  gistryKey RootKe
19910 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
19920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19930 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72    get { return r
19940 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20  ootKey; }..     
19950 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
19960 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65   rootKey = value
19970 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
19980 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19990 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
199a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
199e0 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72       private Str
199f0 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a  ingList names;..
19a00 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
19a10 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61  ic StringList Na
19a20 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
19a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19a40 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
19a50 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20   names; }..     
19a60 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
19a70 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20   names = value; 
19a80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
19a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ae0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
19af0 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
19b00 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d  onMap versions;.
19b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19b20 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56  lic VersionMap V
19b30 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
19b40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19b50 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
19b60 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
19b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b80 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
19b90 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
19ba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19bb0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
19bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
19c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
19c10 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20  vate StringList 
19c20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a  platformNames;..
19c30 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
19c40 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c  ic StringList Pl
19c50 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20  atformNames..   
19c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19c70 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
19c80 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72  { return platfor
19c90 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20  mNames; }..     
19ca0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
19cb0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d   platformNames =
19cc0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
19cd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19ce0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
19cf0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
19d00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
19d10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
19d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
19d70 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61  egion VsList Cla
19d80 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
19d90 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
19da0 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20   VsList..       
19db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19dc0 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
19dd0 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
19de0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
19df0 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  VsList()..      
19e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19e10 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
19e20 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
19e30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19e40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
19e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
19e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ea0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
19eb0 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
19ec0 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
19ed0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
19ee0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
19ef0 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Key;..          
19f00 20 20 70 75 62 6c 69 63 20 52 65 67 69 73 74 72    public Registr
19f10 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20  yKey RootKey..  
19f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
19f40 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65   { return rootKe
19f50 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
19f60 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74        set { root
19f70 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Key = value; }..
19f80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
19fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19ff0 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c  private VersionL
1a000 69 73 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  ist versions;.. 
1a010 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1a020 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65  c VersionList Ve
1a030 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  rsions..        
1a040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a050 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1a060 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d  urn versions; }.
1a070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a080 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20   set { versions 
1a090 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1a0a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a0b0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1a0c0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
1a0d0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1a0e0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1a0f0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1a100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a140 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1a150 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
1a160 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61  te Constant Data
1a170 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1a180 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
1a190 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  oreFileName = "S
1a1a0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1a1b0 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  e.dll";..       
1a1c0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1a1d0 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61  tring LinqFileNa
1a1e0 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
1a1f0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c  a.SQLite.Linq.dl
1a200 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
1a210 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1a220 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g DesignerFileNa
1a230 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73  me = "SQLite.Des
1a240 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20  igner.dll";..   
1a250 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1a260 73 74 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64  st string Provid
1a270 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  erName = "SQLite
1a280 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b   Data Provider";
1a290 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1a2a0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  e const string P
1a2b0 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79  rojectName = "Sy
1a2c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a2d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1a2e0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1a2f0 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61   LegacyProjectNa
1a300 6d 65 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a  me = "SQLite";..
1a310 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a320 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76  const string Inv
1a330 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79  ariantName = "Sy
1a340 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a350 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1a360 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1a370 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
1a380 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
1a390 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63  SQLite.SQLiteFac
1a3a0 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  tory";..        
1a3b0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1a3c0 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e  ring Description
1a3d0 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f   = ".NET Framewo
1a3e0 72 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  rk Data Provider
1a3f0 20 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d   for SQLite";...
1a400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1a410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1a460 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1a470 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69   CLRv2ImageRunti
1a480 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e  meVersion = "v2.
1a490 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20  0.50727";..     
1a4a0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1a4b0 20 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61   string CLRv4Ima
1a4c0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1a4d0 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b   = "v4.0.30319";
1a4e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a530 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1a540 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1a550 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65  ing NameAndValue
1a560 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b  Format = "{0}: {
1a570 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  1}";..        pr
1a580 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1a590 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78  ng LogFileSuffix
1a5a0 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20   = ".log";....  
1a5b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1a600 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1a610 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
1a620 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d   string VsIdForm
1a630 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20  at = "B";....   
1a640 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a690 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a6a0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
1a6b0 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b  string Framework
1a6c0 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20  KeyName =..     
1a6d0 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65         "Software
1a6e0 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45  \\Microsoft\\.NE
1a6f0 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d 0a 0d 0a  TFramework";....
1a700 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1a710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1a750 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1a760 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
1a770 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
1a780 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
1a790 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
1a7a0 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
1a7b0 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
1a7c0 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
1a7d0 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
1a7e0 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
1a7f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
1a800 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
1a810 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
1a820 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
1a830 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
1a840 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
1a850 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
1a860 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
1a870 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
1a880 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1a890 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1a8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1a8f0 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
1a900 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
1a910 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1a920 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
1a930 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
1a940 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
1a950 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
1a960 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1a970 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
1a980 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
1a990 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
1a9a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
1a9b0 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
1a9c0 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
1a9d0 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
1a9e0 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
1a9f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1aa00 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
1aa10 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
1aa20 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
1aa30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1aa40 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
1aa50 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
1aa60 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
1aa70 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1aa80 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1aa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aad0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1aae0 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48   #region Trace H
1aaf0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
1ab00 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1ab10 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c  string GetLogFil
1ab20 65 4e 61 6d 65 28 29 20 2f 2a 20 74 68 72 6f 77  eName() /* throw
1ab30 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1ab50 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
1ab60 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e 61  th.GetTempFileNa
1ab70 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
1ab80 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
1ab90 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69  ory = Path.GetDi
1aba0 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c 65  rectoryName(file
1abb0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
1abc0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
1abd0 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e 47  ameOnly = Path.G
1abe0 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f 75  etFileNameWithou
1abf0 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e  tExtension(fileN
1ac00 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1ac10 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 46       string newF
1ac20 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
1ac30 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
1ac40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ac50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ac60 20 2b 20 22 2e 22 20 2b 20 66 69 6c 65 4e 61 6d   + "." + fileNam
1ac70 65 4f 6e 6c 79 20 2b 20 4c 6f 67 46 69 6c 65 53  eOnly + LogFileS
1ac80 75 66 66 69 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  uffix);....     
1ac90 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65         File.Move
1aca0 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69  (fileName, newFi
1acb0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1acc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
1acd0 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ewFileName;..   
1ace0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1acf0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ad00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad30 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1ad40 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1ad50 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62 75  tic void AppDebu
1ad60 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
1ad70 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
1ad80 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1ad90 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
1ada0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1adb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1adc0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1add0 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f  ugCore(String.Fo
1ade0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1adf0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1ae00 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61  DebugFormat, Tra
1ae10 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67 49  ceOps.NextDebugI
1ae20 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d(),..          
1ae30 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1ae40 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d  imeStamp(DateTim
1ae50 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61  e.UtcNow), messa
1ae60 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ge), category);.
1ae70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1ae80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1aed0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1aee0 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
1aef0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1af00 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
1af10 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
1af20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
1af30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1af40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1af50 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1af60 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e  .TraceCore(Strin
1af70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1af80 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1af90 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
1afa0 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54 72   TraceOps.NextTr
1afb0 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  aceId(),..      
1afc0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1afd0 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
1afe0 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
1aff0 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
1b000 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
1b010 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1b020 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1b030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b070 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1b080 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
1b090 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
1b0a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1b0b0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
1b0c0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
1b0d0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1b0e0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
1b0f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1b100 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1b110 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1b120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b130 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
1b140 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b150 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
1b160 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
1b170 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
1b180 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
1b190 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
1b1a0 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
1b1b0 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
1b1c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b1d0 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
1b1e0 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
1b1f0 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
1b200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b210 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
1b220 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
1b230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b240 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1b250 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
1b260 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
1b270 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
1b290 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
1b2a0 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
1b2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b2c0 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
1b2d0 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
1b2e0 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
1b2f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1b300 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1b310 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1b330 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
1b340 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
1b350 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
1b360 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
1b370 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b380 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
1b390 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1b3b0 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
1b3c0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b3d0 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
1b3e0 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
1b3f0 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
1b400 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
1b410 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1b420 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
1b430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1b450 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
1b460 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b470 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1b480 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1b490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b4d0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1b4e0 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  on .NET Framewor
1b4f0 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  k Handling..    
1b500 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1b510 69 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61  ic string GetIma
1b520 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1b530 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
1b540 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a  tring fileName..
1b550 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1b560 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b570 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1b580 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b590 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1b5a0 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20  ly assembly =.. 
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5c0 20 20 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c     Assembly.Refl
1b5d0 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72  ectionOnlyLoadFr
1b5e0 6f 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  om(fileName); /*
1b5f0 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20   throw */....   
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b610 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
1b620 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b630 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
1b640 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e  ssembly.ImageRun
1b650 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  timeVersion;..  
1b660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b670 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
1b680 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b6a0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
1b6b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b6d0 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
1b6e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1b6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b730 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1b740 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1b750 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
1b760 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
1b770 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
1b780 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
1b790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
1b7a0 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
1b7b0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
1b7c0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
1b7d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1b7e0 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
1b7f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1b800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b810 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
1b820 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
1b830 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
1b840 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b860 72 6f 6f 74 4b 65 79 2c 20 46 72 61 6d 65 77 6f  rootKey, Framewo
1b870 72 6b 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  rkKeyName, false
1b880 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1b890 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1b8a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b8b0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
1b8c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b8d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b8e0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
1b8f0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1b900 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
1b910 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
1b920 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1b930 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
1b940 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c  tallRoot", null,
1b950 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1b960 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b970 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
1b980 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9a0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
1b9b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b9c0 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43     return Path.C
1b9d0 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
1b9f0 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69  ring)value, Stri
1ba00 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22  ng.Format("v{0}"
1ba10 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
1ba20 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
1ba30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1ba40 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1ba50 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
1ba60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1baa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bab0 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72    #region Per-Fr
1bac0 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d  amework/Platform
1bad0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
1bae0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1baf0 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
1bb00 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d  eFrameworkList(.
1bb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
1bb20 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
1bb30 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
1bb40 20 20 20 20 20 20 20 72 65 66 20 46 72 61 6d 65         ref Frame
1bb50 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
1bb60 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
1bb70 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1bb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1bb90 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20   (frameworkList 
1bba0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1bbb0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1bbc0 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72  orkList = new Fr
1bbd0 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a  ameworkList();..
1bbe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1bbf0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
1bc00 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  RootKey == null)
1bc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1bc30 52 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73 74  RootKey = Regist
1bc40 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ry.LocalMachine;
1bc50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1bcb0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1bcc0 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75  List.Names == nu
1bcd0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1bce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bcf0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
1bd00 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74  t.Names = new St
1bd10 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1bd30 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1bd40 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1bd50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
1bd60 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
1bd80 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
1bd90 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77  .Add(".NETFramew
1bda0 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ork");....      
1bdb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
1bdc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1bdd0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
1bde0 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
1bdf0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1be00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1be10 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1be20 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
1be30 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
1be40 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
1be70 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
1be80 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
1be90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bea0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1beb0 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
1bec0 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
1bed0 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
1bee0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1bef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1bf00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1bf60 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
1bf70 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
1bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
1bfb0 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72  rsions = new Ver
1bfc0 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20  sionMap();....  
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1bfe0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
1bff0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
1c000 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
1c010 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
1c020 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
1c040 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74  ersionList deskt
1c050 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20  opVersionList = 
1c060 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
1c070 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c080 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
1c090 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1c0a0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
1c0b0 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32  uration.NoNetFx2
1c0c0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
1c0e0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
1c0f0 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32  dd(new Version(2
1c100 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d  , 0, 50727));...
1c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c120 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
1c130 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
1c140 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
1c150 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20  on.NoNetFx40).. 
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
1c180 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
1c190 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20  w Version(4, 0, 
1c1a0 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20  30319));....    
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
1c1d0 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54  rsions.Add(".NET
1c1e0 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73       desktopVers
1c210 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20  ionList);..     
1c220 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c240 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1c250 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1c260 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1c270 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
1c280 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2a0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
1c2b0 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45  ersions.Add(".NE
1c2c0 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
1c2d0 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
1c2f0 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77   VersionList(new
1c300 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20   Version[] {..  
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
1c330 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e  n(2, 0, 0, 0), n
1c340 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c  ew Version(3, 5,
1c350 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20   0, 0)..        
1c360 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b              }));
1c370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c380 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1c390 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c3a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1c3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1c3f0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
1c400 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
1c410 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
1c420 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1c440 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
1c450 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20  formNames = new 
1c460 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d  StringList();...
1c470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c480 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1c490 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1c4a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1c4b0 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20  oDesktop)..     
1c4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1c4d0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1c4e0 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e  tformNames.Add(n
1c4f0 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ull);....       
1c500 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
1c510 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1c520 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
1c530 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
1c540 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c550 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c560 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1c570 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1c580 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65  Names.Add("Pocke
1c590 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  tPC");..        
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
1c5b0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
1c5c0 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61  rmNames.Add("Sma
1c5d0 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20  rtphone");..    
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1c600 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
1c610 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20  "WindowsCE");.. 
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c640 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1c650 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1c6a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1c6b0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
1c6c0 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20  eFramework(..   
1c6d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
1c6e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
1c6f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1c700 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
1c710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
1c720 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
1c730 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
1c740 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
1c750 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
1c760 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
1c770 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
1c780 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
1c790 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1c7a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c7b0 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
1c7c0 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
1c7d0 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
1c7e0 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66              "Sof
1c800 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
1c810 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d  \\{0}\\v{1}\\{2}
1c820 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " :..           
1c830 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c       "Software\\
1c840 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c  Microsoft\\{0}\\
1c850 76 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  v{1}";....      
1c860 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
1c870 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f  Name = String.Fo
1c880 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c890 20 20 20 20 20 20 20 66 6f 72 6d 61 74 2c 20 66         format, f
1c8a0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
1c8b0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
1c8c0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a  platformName);..
1c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
1c8e0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
1c8f0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
1c900 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
1c910 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
1c920 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
1c930 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
1c940 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
1c950 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
1c960 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c970 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
1c980 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1c990 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c9a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c9c0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
1c9d0 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
1c9e0 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
1c9f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ca00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1ca10 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1ca20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
1ca30 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
1ca40 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
1ca50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ca60 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
1ca70 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
1ca80 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1ca90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1caa0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1cab0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
1cac0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1caf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb00 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
1cb10 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
1cb20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1cb30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1cb40 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1cb50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1cb60 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1cb70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1cb80 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1cbe0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1cbf0 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  l ForEachFramewo
1cc00 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20  rkConfig(..     
1cc10 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
1cc20 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
1cc30 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
1cc40 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67   FrameworkConfig
1cc50 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
1cc60 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1cc70 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
1cc80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1cc90 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
1cca0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1ccb0 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
1ccc0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ccd0 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
1cce0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
1ccf0 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
1cd00 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1cd10 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
1cd20 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
1cd30 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
1cd40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
1cd50 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1cd60 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
1cd70 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
1cd80 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1cd90 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1cda0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1cdb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
1cdc0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e  ameworkList == n
1cdd0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1cde0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cdf0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
1ce00 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
1ce10 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20  list";..        
1ce20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1ce30 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1ce40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ce50 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
1ce60 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
1ce70 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
1ce80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ce90 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
1cea0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1ceb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cec0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
1ced0 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
1cee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cef0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1cf00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1cf10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1cf20 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65   (!Object.Refere
1cf30 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
1cf40 79 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72 72  y, Registry.Curr
1cf50 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20  entUser) &&..   
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62               !Ob
1cf70 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
1cf80 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65  uals(rootKey, Re
1cf90 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
1cfa0 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ine))..         
1cfb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cfc0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72        error = "r
1cfd0 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20  oot key must be 
1cfe0 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d  per-user or per-
1cff0 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20  machine";..     
1d000 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1d010 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1d020 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d030 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
1d040 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
1d050 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1d060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d070 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1d080 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61  "no framework na
1d090 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1d0b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1d0c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d0d0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
1d0e0 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
1d0f0 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
1d100 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1d120 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
1d130 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e  rk versions foun
1d140 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
1d150 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1d160 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d170 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1d180 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1d190 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
1d1a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1d1b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d1c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1d1d0 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e  = "no platform n
1d1e0 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d200 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d210 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d220 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
1d230 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1d240 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65  s.Count != frame
1d250 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
1d260 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20  mNames.Count).. 
1d270 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d290 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
1d2a0 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e  mat("framework n
1d2b0 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f  ame count {0} do
1d2c0 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20  "match platform 
1d2f0 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c  name count {1}",
1d300 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
1d310 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20  ames.Count,..   
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
1d340 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
1d350 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
1d360 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1d370 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1d380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d390 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
1d3a0 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
1d3b0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
1d3c0 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78  mes.Count; index
1d3d0 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
1d3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d3f0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1d400 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1d410 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f   Grab the name o
1d420 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20  f the framework 
1d430 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65  (e.g. ".NETFrame
1d440 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20  work")..        
1d450 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1d460 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
1d470 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65   the platform (e
1d480 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29  .g. "WindowsCE")
1d490 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d4a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d4b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
1d4c0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72  ameworkName = fr
1d4d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1d4e0 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  s[index];..     
1d4f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1d500 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
1d510 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
1d520 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64  latformNames[ind
1d530 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
1d540 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1d560 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f  OTE: Skip all no
1d570 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77  n-desktop framew
1d580 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68  orks (i.e. if th
1d590 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20  e platform..    
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d5b0 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74       name is not
1d5c0 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20   null)...       
1d5d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d5f0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
1d600 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1d610 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1d620 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1d630 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d650 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73  NOTE: Grab the s
1d660 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  upported version
1d670 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63  s of this partic
1d680 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20  ular..          
1d690 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
1d6a0 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20  ramework...     
1d6b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
1d6d0 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65  ersionList frame
1d6e0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b  workVersionList;
1d6f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d700 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f      if (!framewo
1d710 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
1d720 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  TryGetValue(..  
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
1d750 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f  ame, out framewo
1d760 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c  rkVersionList) |
1d770 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
1d780 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
1d790 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
1d7a0 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
1d7b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d7d0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1d7e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1d800 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
1d810 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1d820 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72   in frameworkVer
1d830 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20  sionList)..     
1d840 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d860 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1d870 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1d880 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8a0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1d8b0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1d8c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1d8d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
1d8f0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
1d900 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
1d910 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
1d940 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
1d950 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
1d960 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
1d990 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
1d9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d9b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1d9c0 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
1d9d0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
1d9e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d9f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1da00 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a  HaveFramework(..
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1da30 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
1da40 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
1da50 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
1da80 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1da90 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1daa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1dad0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1dae0 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1db10 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1db20 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1db30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db40 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
1db50 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  work not found, 
1db60 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20  skipping...",.. 
1db70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1db90 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1dbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dbd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1dbf0 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75   (callback == nu
1dc00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1dc20 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1dc40 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
1dc50 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
1dc60 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
1dc90 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 68 61 74  orkVersion, what
1dca0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
1dcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dcc0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
1dcd0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
1dce0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1dd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dd10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1dd20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1dd30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
1dd40 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1dd70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1dd80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dda0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
1ddb0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
1ddc0 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61  irectory is inva
1ddd0 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  lid, " +..      
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
1de00 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
1de10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1de20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1de50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1de60 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1de70 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1de80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
1deb0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
1dec0 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22  ectory, "Config"
1ded0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1dee0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
1def0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
1df00 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1df30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1df40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1df50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1df60 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
1df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df80 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1df90 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1dfa0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1dfb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
1dfd0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1dfe0 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64   directory {1} d
1dff0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
1e000 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e020 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
1e030 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
1e040 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e060 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1e070 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
1e080 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1e090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1e0b0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1e0c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e0e0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1e0f0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
1e100 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
1e110 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
1e120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e130 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
1e140 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
1e150 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
1e160 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e180 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1e190 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1e1a0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1e1d0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1e1e0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1e1f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e210 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
1e220 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b  ework {0} file {
1e230 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  1} does not exis
1e240 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  t, " +..        
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e260 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
1e270 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
1e280 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
1e290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1e2b0 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d  rDisplay(fileNam
1e2c0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
1e2d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2f0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e320 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63          bool loc
1e330 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b  alSaved = false;
1e340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e350 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
1e360 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
1e390 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64  variant, name, d
1e3a0 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65  escription, type
1e3b0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3d0 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
1e3e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68 61   clientData, wha
1e3f0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 6c             ref l
1e420 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66 20 65  ocalSaved, ref e
1e430 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
1e440 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1e470 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1e480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1e4b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4d0 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 53        if (localS
1e4e0 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29 0d  aved && !saved).
1e4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
1e510 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  ed = true;....  
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
1e540 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1e550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e560 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1e570 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1e580 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1e5b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1e5c0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1e5d0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63              "loc
1e600 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73  alSaved = {0}, s
1e610 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  aved = {1}",..  
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1e640 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61  rDisplay(localSa
1e650 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ved), ForDisplay
1e660 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20  (saved)),..     
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1e690 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1e6c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1e6d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1e6e0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1e6f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1e700 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e750 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e760 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72   static bool For
1e770 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67  EachFrameworkReg
1e780 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
1e790 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73      FrameworkLis
1e7a0 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c  t frameworkList,
1e7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
1e7c0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43  ameworkRegistryC
1e7d0 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
1e7e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
1e7f0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
1e800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1e810 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1e820 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1e830 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
1e840 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1e850 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
1e860 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1e870 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e880 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d  frameworkList ==
1e890 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e8a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e8b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1e8c0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
1e8d0 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  k list";..      
1e8e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e8f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1e900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e910 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
1e920 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d  y rootKey = fram
1e930 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
1e940 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
1e950 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
1e960 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e970 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e980 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1e990 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79  invalid root key
1e9a0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1e9b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e9c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1e9d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e9e0 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65  if (!Object.Refe
1e9f0 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
1ea00 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43 75  Key, Registry.Cu
1ea10 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20  rrentUser) &&.. 
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
1ea30 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
1ea40 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
1ea50 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
1ea60 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20  chine))..       
1ea70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ea80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1ea90 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
1eaa0 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
1eab0 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ead0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1eae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1eaf0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
1eb00 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
1eb10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1eb20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1eb30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1eb40 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
1eb50 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1eb70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1eb80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1eb90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1eba0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
1ebb0 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ebe0 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
1ebf0 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f  work versions fo
1ec00 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
1ec10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1ec20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1ec30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ec40 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1ec50 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
1ec60 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
1ec70 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1ec90 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d  r = "no platform
1eca0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1ecd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ecf0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
1ed00 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61  mes.Count != fra
1ed10 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
1ed20 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d  ormNames.Count).
1ed30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed50 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
1ed60 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b  ormat("framework
1ed70 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20   name count {0} 
1ed80 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eda0 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72    "match platfor
1edb0 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d  m name count {1}
1edc0 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ", frameworkList
1edd0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20  .Names.Count,.. 
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
1ee00 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
1ee10 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ount);....      
1ee20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ee30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1ee40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ee50 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69        for (int i
1ee60 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20  ndex = 0; index 
1ee70 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  < frameworkList.
1ee80 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64  Names.Count; ind
1ee90 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
1eea0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1eeb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1eec0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1eed0 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
1eee0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
1eef0 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
1ef00 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
1ef10 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1ef20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
1ef30 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
1ef40 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
1ef50 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
1ef60 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1ef70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1ef80 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
1ef90 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
1efa0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20  mes[index];..   
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1efc0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
1efd0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
1efe0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69  .PlatformNames[i
1eff0 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  ndex];....      
1f000 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1f020 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
1f030 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
1f040 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
1f050 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
1f060 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1f070 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
1f080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
1f0b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1f0c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f0d0 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
1f0e0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
1f0f0 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1f120 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
1f130 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
1f140 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
1f150 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
1f160 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
1f170 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
1f180 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1a0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1f1b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1d0 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
1f1e0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1f1f0 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
1f200 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
1f210 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1f240 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1f250 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1f280 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1f290 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1f2a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
1f2c0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
1f2d0 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
1f2e0 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
1f2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f300 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
1f310 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
1f320 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
1f330 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f350 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
1f360 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
1f370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f380 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1f390 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
1f3a0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
1f3b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f3d0 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d  !HaveFramework(.
1f3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1f400 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
1f410 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
1f420 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f440 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
1f450 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1f460 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1f470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1f4a0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1f4b0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1f4e0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1f4f0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
1f520 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c  ework not found,
1f530 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f560 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1f590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f5c0 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
1f5d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f5f0 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f610 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
1f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f630 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
1f640 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
1f650 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
1f660 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f680 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
1f690 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68 61 74  clientData, what
1f6a0 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
1f6d0 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
1f6e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1f710 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1f720 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f730 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1f740 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f750 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f760 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1f770 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1f780 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1f790 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f7e0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65        #region Pe
1f7f0 72 2d 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  r-Visual Studio 
1f800 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67  Version Handling
1f810 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1f820 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
1f830 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d  itializeVsList(.
1f840 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
1f850 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
1f860 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
1f870 20 20 20 20 20 20 20 72 65 66 20 56 73 4c 69 73         ref VsLis
1f880 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20  t vsList..      
1f890 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1f8a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f8b0 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75  if (vsList == nu
1f8c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f8d0 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65       vsList = ne
1f8e0 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  w VsList();.... 
1f8f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1f900 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d  sList.RootKey ==
1f910 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1f920 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52          vsList.R
1f930 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73 74 72  ootKey = Registr
1f940 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d  y.LocalMachine;.
1f950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1f960 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  f (vsList.Versio
1f970 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
1f980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f990 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
1f9a0 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
1f9b0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
1f9c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f9d0 20 20 20 20 2f 2f 20 76 73 4c 69 73 74 2e 56 65      // vsList.Ve
1f9e0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
1f9f0 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f  ersion(8, 0)); /
1fa00 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  / Visual Studio 
1fa10 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2005....        
1fa20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
1fa30 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1fa40 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
1fa50 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d  ation.NoVs2008).
1fa60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fa70 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
1fa80 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
1fa90 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20  sion(9, 0)); // 
1faa0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
1fab0 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  08....          
1fac0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
1fad0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
1fae0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
1faf0 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20  ion.NoVs2010).. 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
1fb20 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
1fb30 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 56 69  on(10, 0));// Vi
1fb40 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 31 30  sual Studio 2010
1fb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1fb60 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1fb70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1fb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1fbc0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1fbd0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
1fbe0 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  eVsVersion(..   
1fbf0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
1fc00 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
1fc10 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
1fc20 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
1fc30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1fc40 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1fc50 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
1fc60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
1fc70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1fc80 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
1fc90 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
1fca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fcb0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1fcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1fcd0 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 22 53  ring format = "S
1fce0 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f  oftware\\Microso
1fcf0 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f  ft\\VisualStudio
1fd00 5c 5c 7b 30 7d 22 3b 0d 0a 20 20 20 20 20 20 20  \\{0}";..       
1fd10 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
1fd20 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ame = String.For
1fd30 6d 61 74 28 66 6f 72 6d 61 74 2c 20 76 73 56 65  mat(format, vsVe
1fd40 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  rsion);....     
1fd50 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
1fd60 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
1fd70 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
1fd80 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
1fdb0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
1fdc0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1fdf0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
1fe00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1fe20 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1fe30 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
1fe40 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ue = RegistryHel
1fe50 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20  per.GetValue(.. 
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe70 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c     key, "Install
1fe80 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  Dir", null, what
1fe90 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
1fea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1feb0 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20   if (!(value is 
1fec0 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20  string))..      
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1fee0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1ff00 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
1ff10 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b  = (string)value;
1ff20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ff30 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
1ff40 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
1ff50 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ff70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ff90 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78  f (!Directory.Ex
1ffa0 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29  ists(directory))
1ffb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ffc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1ffd0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1ffe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1fff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
20000 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
20010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
20020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
20070 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
20080 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e  ForEachVsVersion
20090 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
200a0 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73         VsList vs
200b0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
200c0 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52     VisualStudioR
200d0 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20  egistryCallback 
200e0 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
200f0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
20100 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
20110 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
20120 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
20130 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
20140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
20150 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
20160 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
20170 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
20180 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
20190 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
201a0 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
201b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
201c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
201d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
201e0 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
201f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20200 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
20210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
20230 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
20240 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b  y = vsList.RootK
20250 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
20260 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
20270 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
20280 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20290 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
202a0 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
202b0 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
202c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
202d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
202e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
202f0 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66   if (!Object.Ref
20300 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
20310 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43  tKey, Registry.C
20320 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a  urrentUser) &&..
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
20350 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
20360 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
20370 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20  achine))..      
20380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20390 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
203a0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
203b0 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
203c0 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
203e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
203f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20400 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
20410 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
20420 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
20430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20440 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
20450 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66  no VS versions f
20460 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
20470 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
20480 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
20490 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
204a0 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
204b0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69  sion vsVersion i
204c0 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e  n vsList.Version
204d0 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
204e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
204f0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
20500 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
20510 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
20520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20530 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
20540 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
20550 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
20560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20570 20 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e        "vsVersion
20580 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
20590 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c  lay(vsVersion)),
205a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
205b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
205c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
205d0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
205e0 76 65 56 73 56 65 72 73 69 6f 6e 28 72 6f 6f 74  veVsVersion(root
205f0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
20600 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
20610 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20620 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20630 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
20640 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
20650 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
20660 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
20680 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
20690 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75 64      "Visual Stud
206c0 69 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66  io version not f
206d0 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
206e0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20700 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20720 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
20730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
20740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20750 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
20760 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
20780 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
20790 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
207a0 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207c0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
207d0 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
207e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68 61   clientData, wha
207f0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
20810 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
20820 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20830 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20840 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20850 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
20860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20870 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20880 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20890 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
208a0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
208b0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
208c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
208d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20900 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20910 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
20920 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65 20 48  iguration File H
20930 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
20940 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
20950 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64  bool AddDbProvid
20960 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
20970 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
20980 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
20990 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
209a0 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
209b0 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
209c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
209d0 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
209e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
209f0 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
20a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
20a10 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
20a20 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
20a30 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
20a40 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
20a50 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
20a60 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
20a70 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
20a80 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
20a90 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
20aa0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
20ab0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20ac0 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
20ad0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20ae0 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
20af0 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
20b00 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
20b10 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
20b20 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
20b30 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
20b40 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
20b50 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
20b60 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
20b70 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
20b80 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
20b90 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
20ba0 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
20bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20bc0 20 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65    XPathForAddEle
20bd0 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
20be0 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
20bf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20c00 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
20c10 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
20c20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20c30 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c       string[] el
20c40 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a  ementNames = {..
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c60 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e          "system.
20c70 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64  data", "DbProvid
20c80 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20  erFactories"..  
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    };....        
20cb0 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
20cc0 6e 74 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65  nt previousEleme
20cd0 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
20ce0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
20cf0 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65  nt.DocumentEleme
20d00 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61  nt; /* configura
20d10 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  tion */....     
20d20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
20d30 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d 65  ch (string eleme
20d40 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e  ntName in elemen
20d50 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20  tNames)..       
20d60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 65 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f  element = previo
20d90 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74  usElement.Select
20da0 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65       elementName
20dd0 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
20de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20df0 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
20e00 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
20e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
20e40 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
20e50 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a  CreateElement(..
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
20e80 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e  entName, String.
20e90 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  Empty);....     
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20eb0 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
20ec0 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 65  nt.AppendChild(e
20ed0 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20f00 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45         previousE
20f10 6c 65 6d 65 6e 74 20 3d 20 65 6c 65 6d 65 6e 74  lement = element
20f20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20f30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20f40 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20          element 
20f50 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74  = document.Creat
20f60 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20  eElement(..     
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20f80 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70  add", String.Emp
20f90 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
20fa0 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
20fb0 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
20fc0 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 0d  ild(element);...
20fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20fe0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21000 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21010 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
21020 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  element.GetAttri
21030 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20  bute("name"),.. 
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43     name, StringC
21060 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69  omparison.Invari
21070 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20  antCulture))..  
21080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
210a0 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
210b0 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b  e("name", name);
210c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
210d0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
210e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
210f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21100 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
21110 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  (element.GetAttr
21120 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74  ibute("invariant
21130 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
21140 20 20 20 20 20 20 20 20 20 69 6e 76 61 72 69 61           invaria
21150 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  nt, StringCompar
21160 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75  ison.InvariantCu
21170 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20  lture))..       
21180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21190 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e          element.
211a0 53 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e  SetAttribute("in
211b0 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69  variant", invari
211c0 61 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ant);..         
211d0 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
211e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
211f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21200 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
21210 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65  quals(element.Ge
21220 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
21230 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20  ription"),..    
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72  description, Str
21260 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
21270 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
21280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
212a0 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72   element.SetAttr
212b0 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69  ibute("descripti
212c0 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69 6f 6e  on", description
212d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
212e0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
212f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21310 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70 65 4e  string fullTypeN
21320 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ame = String.For
21330 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d  mat("{0}, {1}",.
21340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21350 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73 65 6d   typeName, assem
21360 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  blyName);....   
21370 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
21380 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d  ring.Equals(elem
21390 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
213a0 28 22 74 79 70 65 22 29 2c 0d 0a 20 20 20 20 20  ("type"),..     
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
213c0 75 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53 74 72  ullTypeName, Str
213d0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
213e0 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
213f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21410 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72   element.SetAttr
21420 69 62 75 74 65 28 22 74 79 70 65 22 2c 20 66 75  ibute("type", fu
21430 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20  llTypeName);..  
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
21450 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
21460 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21470 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
21480 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a  rty || whatIf)..
21490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
214b0 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
214e0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
214f0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21510 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
21520 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
21530 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
21540 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65                "e
21560 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46  lement = {0}", F
21570 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d 65 6e  orDisplay(elemen
21580 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
21590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
215a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
215b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
215c0 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65     document.Save
215f0 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
21600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21610 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20  aved = true;..  
21620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21630 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21640 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
21650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
21660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
216b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
216c0 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f  bool RemoveDbPro
216d0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
216e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
216f0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
21700 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
21710 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
21720 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
21730 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
21740 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
21750 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
21760 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
21770 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
21780 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
21790 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
217a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
217b0 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
217c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
217d0 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
217e0 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
217f0 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
21800 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
21810 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
21820 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
21830 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
21840 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
21850 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
21860 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
21870 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
21880 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
21890 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ode(String.Forma
218a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
218b0 20 20 20 20 58 50 61 74 68 46 6f 72 41 64 64 45      XPathForAddE
218c0 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
218d0 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
218e0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
218f0 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 21 3d    if (element !=
21900 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21910 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21920 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 50         element.P
21930 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65  arentNode.Remove
21940 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  Child(element);.
21950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21960 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
21970 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21980 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65  .            ele
21990 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
219a0 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
219b0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
219c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
219d0 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45   XPathForRemoveE
219e0 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
219f0 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
21a00 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
21a10 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 21 3d    if (element !=
21a20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21a40 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 50         element.P
21a50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65  arentNode.Remove
21a60 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  Child(element);.
21a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21a80 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
21a90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21ab0 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
21ac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21ae0 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
21b10 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
21b20 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
21b30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21b40 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
21b50 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
21b60 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
21b70 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b90 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22   "element = {0}"
21ba0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c 65  , ForDisplay(ele
21bb0 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  ment)),..       
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bd0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21bf0 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
21c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c10 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53        document.S
21c20 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ave(fileName);..
21c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c40 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
21c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
21c70 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
21c80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21c90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21ce0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21cf0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44  ic bool ProcessD
21d00 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
21d10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
21d20 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d  tring fileName,.
21d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21d40 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a  ing invariant,..
21d50 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21d60 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
21d70 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
21d80 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
21d90 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
21da0 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
21db0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
21dc0 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d  e assemblyName,.
21dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
21de0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
21df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21e00 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
21e10 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
21e20 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
21e30 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
21e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
21e50 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
21e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
21e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21e80 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
21e90 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
21ea0 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
21eb0 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
21ec0 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
21ed0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
21ee0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21ef0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21f00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
21f10 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
21f20 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c  work config call
21f30 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
21f40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21f50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
21f60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21f70 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
21f80 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
21f90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21fa0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
21fb0 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
21fc0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
21fd0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
21fe0 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77  me, invariant, w
21ff0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
22000 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ref saved,..    
22010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22020 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20  ref error) &&.. 
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
22040 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ddDbProviderFact
22050 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
22060 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
22070 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e  me, invariant, n
22080 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e  ame, description
22090 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  , typeName,..   
220a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220b0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77   assemblyName, w
220c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
220d0 72 65 66 20 73 61 76 65 64 2c 20 72 65 66 20 65  ref saved, ref e
220e0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
220f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
22100 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
22110 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22120 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
22130 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46  emoveDbProviderF
22140 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
22150 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
22160 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74  eName, invariant
22170 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
22180 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20  e, ref saved,.. 
22190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221a0 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
221b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
221c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
221d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
221e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
221f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22230 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
22240 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64  on Assembly Fold
22250 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ers Handling..  
22260 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22270 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41  atic string GetA
22280 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
22290 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
222a0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
222b0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
222c0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
222d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
222e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
222f0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
22300 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
22310 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22320 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22330 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67  format = !String
22340 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70  .IsNullOrEmpty(p
22350 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a  latformName) ?..
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22370 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f  "Software\\Micro
22380 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c  soft\\{0}\\v{1}\
22390 5c 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f  \{2}\\AssemblyFo
223a0 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20  ldersEx" :..    
223b0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66              "Sof
223c0 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
223d0 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 41 73 73  \\{0}\\v{1}\\Ass
223e0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b  emblyFoldersEx";
223f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22400 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
22410 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 66 72 61  rmat(format, fra
22420 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
22430 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
22450 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20  latformName);.. 
22460 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22470 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
224c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
224d0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f  tatic bool AddTo
224e0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
224f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
22500 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
22510 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
22520 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
22530 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
22540 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
22550 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
22560 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22570 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
22580 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22590 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
225a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
225b0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
225c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
225d0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
225e0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
225f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
22600 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
22610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
22620 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
22630 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
22640 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
22650 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
22660 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
22670 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
22680 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
22690 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
226a0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
226b0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
226c0 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
226d0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
226e0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
226f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22700 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
22710 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  e, true, whatIf,
22720 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
22730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22740 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
22750 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
22790 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
227c0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
227d0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
22800 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22850 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
22860 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
22870 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
22880 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
22890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228a0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
228b0 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
228c0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
228e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
228f0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
22900 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
22910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22930 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
22940 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
22950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
22970 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72  uld not create r
22980 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
22990 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229b0 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
229c0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
229d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
229f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
22a20 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
22a30 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a50 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69  subKey, null, di
22a60 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c  rectory, whatIf,
22a70 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
22a80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
22a90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22ab0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
22ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
22ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22b20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
22b30 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d   bool RemoveFrom
22b40 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
22b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
22b60 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
22b70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
22b80 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
22b90 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
22ba0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
22bb0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
22bc0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22bd0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
22be0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22bf0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
22c00 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22c10 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
22c20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
22c30 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
22c40 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
22c50 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
22c60 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22c70 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
22c80 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73  keyName = GetAss
22c90 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e  emblyFoldersKeyN
22ca0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
22cb0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
22cc0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
22cd0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
22ce0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
22cf0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
22d00 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
22d10 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
22d20 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
22d50 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
22d60 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
22d70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22d90 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
22db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22dc0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
22dd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
22de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22df0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
22e00 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
22e10 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e30 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
22e40 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
22e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22e90 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
22ea0 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
22eb0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
22ec0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
22ed0 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  KeyName, whatIf,
22ee0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
22ef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22f00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22f10 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
22f20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
22f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
22f80 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
22f90 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62  ol ProcessAssemb
22fa0 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
22fb0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
22fc0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
22fd0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22fe0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
22ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
23000 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
23010 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
23020 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
23030 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
23040 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
23050 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
23060 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
23070 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
23080 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
23090 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
230a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
230b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
230c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
230d0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
230e0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
230f0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
23100 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
23110 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
23120 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
23130 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
23140 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23150 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
23160 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
23170 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
23180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23190 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
231a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
231b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
231c0 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
231d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
231e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
231f0 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d   RemoveFromAssem
23200 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
23230 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
23240 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
23250 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 65                Le
23270 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c  gacyProjectName,
23280 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23290 2c 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d  , ref error) &&.
232a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
232b0 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
232c0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
232d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
232e0 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
232f0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
23300 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
23310 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
23320 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
23330 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 77 68  Name, pair.X, wh
23340 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
23350 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
23360 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23370 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
23380 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23390 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
233a0 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  rn RemoveFromAss
233b0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
233e0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
233f0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
23400 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23420 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 68 61  ProjectName, wha
23430 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
23440 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
23450 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23460 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
23470 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
23480 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
234d0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
234e0 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64  sual Studio Hand
234f0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
23500 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
23510 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  ing GetVsKeyName
23520 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  (..            V
23530 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
23540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
23550 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
23560 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
23570 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
235a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
235b0 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
235c0 28 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72  ("Software\\Micr
235d0 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75  osoft\\VisualStu
235e0 64 69 6f 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20  dio\\{0}",..    
235f0 20 20 20 20 20 20 20 20 20 20 20 20 76 73 56 65              vsVe
23600 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  rsion);..       
23610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
23620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23660 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23670 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
23680 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72  Studio Data Sour
23690 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ce Handling..   
236a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
236b0 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61  tic bool AddVsDa
236c0 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
236d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
236e0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
236f0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
23700 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
23710 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
23720 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
23730 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
23740 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
23750 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
23760 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
23770 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
23780 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23790 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
237a0 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
237b0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
237c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
237d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
237e0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
237f0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
23800 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23810 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23830 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
23840 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
23850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23860 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23870 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
23880 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
23890 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
238a0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
238b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
238c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
238d0 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
238e0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d  ame(vsVersion);.
238f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
23900 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
23910 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
23920 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
23930 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
23940 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
23950 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
23960 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
23970 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
23980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23990 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
239a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
239b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
239e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a00 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
23a10 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
23a20 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a40 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
23a50 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
23a60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23a70 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
23a80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
23ab0 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
23ac0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
23ad0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
23b00 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
23b10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
23b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23b40 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
23b50 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
23b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23b80 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23b90 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
23ba0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
23bd0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
23be0 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
23bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
23c10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23c30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23c60 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
23c70 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
23c80 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20  y dataSourceKey 
23c90 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
23cb0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
23cc0 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
23cd0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
23d00 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
23d10 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d30 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
23d40 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
23d80 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e  taSourceKey == n
23d90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
23dd0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
23de0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
23e10 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
23e20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20  key: {0}\\{1}", 
23e30 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
23e60 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
23e70 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
23e80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
23ef0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53             dataS
23f20 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20  ourceKey, null, 
23f30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
23f60 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c   Database File",
23f70 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
23f80 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fa0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
23fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23fc0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
23fd0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
23fe0 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b  bKey(dataSourceK
23ff0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
24020 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64  SupportingProvid
24030 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20  ers\\{0}",..    
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
24060 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
24070 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
24080 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
240b0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
240c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
240e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
240f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24100 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
24110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24160 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24170 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
24180 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
24190 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
241a0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
241b0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
241c0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
241d0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
241e0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
241f0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
24200 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
24210 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
24220 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
24230 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
24240 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
24250 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
24260 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24270 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
24280 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
24290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
242a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
242b0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
242c0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
242d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
242e0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
242f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24300 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
24310 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
24320 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24330 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
24340 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
24350 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
24360 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24370 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
24380 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24390 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
243a0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
243b0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b  Name(vsVersion);
243c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
243d0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
243e0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
243f0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
24400 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
24420 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
24430 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
24440 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
24450 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24460 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
24470 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24480 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
244b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
244e0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
244f0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
24520 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24540 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
24550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24570 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
24580 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
24590 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
245a0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53       key, "DataS
245d0 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77  ources", true, w
245e0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
245f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24600 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24610 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
24620 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
24630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
24660 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
24670 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
246a0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
246b0 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22  0}\\DataSources"
246c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
246e0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24700 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24730 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
24740 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
24750 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
24780 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
24790 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
247a0 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247c0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
247d0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
247e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
247f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24800 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
24810 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
24820 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24870 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
24880 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
24890 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72  rocessVsDataSour
248a0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
248b0 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
248c0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
248d0 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
248e0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
248f0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
24900 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
24910 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
24920 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
24930 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
24940 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
24950 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
24960 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
24970 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
24980 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
24990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
249a0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
249b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
249c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
249d0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
249e0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
249f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
24a30 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
24a40 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
24a50 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
24a60 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
24a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
24a80 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
24a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ab0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
24ac0 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
24ad0 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
24ae0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
24af0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
24b00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24b10 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
24b20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24b40 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f  turn AddVsDataSo
24b50 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
24b60 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
24b70 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
24b80 61 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20  ackage, whatIf, 
24b90 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
24ba0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
24bb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
24bc0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
24bd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24be0 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
24bf0 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28  oveVsDataSource(
24c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c10 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
24c20 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
24c30 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24c40 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
24c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24c60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24c70 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
24c80 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
24ce0 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
24cf0 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20  o Data Provider 
24d00 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
24d10 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
24d20 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50   bool AddVsDataP
24d30 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
24d40 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
24d50 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
24d60 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
24d70 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
24d80 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
24d90 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
24da0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
24db0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
24dc0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
24dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24de0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
24df0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
24e00 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
24e10 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
24e20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24e30 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
24e40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24e50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24e60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
24e70 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
24e80 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
24e90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
24ea0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
24eb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24ec0 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
24ed0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24ef0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
24f00 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
24f10 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
24f20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
24f30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
24f40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24f50 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
24f60 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
24f70 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  (vsVersion);....
24f80 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
24f90 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
24fa0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
24fb0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
24fc0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
24fd0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
24fe0 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
24ff0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
25000 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
25010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25020 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
25030 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
25040 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
25060 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
25070 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
25090 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
250a0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
250b0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
250d0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
250e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
250f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25100 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25110 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25120 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
25130 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
25140 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
25150 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
25160 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
25170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25180 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69   key, "DataProvi
25190 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ders", true, wha
251a0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
251d0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
251e0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25210 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25220 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
25230 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25250 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
25260 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
25270 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22  \\DataProviders"
25280 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
252a0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
252f0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
25300 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
25310 65 79 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey dataProviderK
25320 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ey =..          
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
25350 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75  .CreateSubKey(su
25360 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  bKey,..         
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25380 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
25390 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
253a0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
253b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
253d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25410 66 20 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  f (dataProviderK
25420 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
25470 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
254a0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
254b0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
254c0 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20  \{1}", key,..   
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
254f0 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
25500 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
25510 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25540 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
25580 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
25590 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
255c0 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72  Key, null, Descr
255d0 69 70 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d  iption, whatIf,.
255e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
255f0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
25600 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
25630 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
25660 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69  iderKey, "Invari
25670 61 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69  antName", Invari
25680 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  antName,..      
25690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256a0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
256b0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
256e0 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
256f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25700 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
25710 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e  viderKey, "Techn
25720 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20  ology",..       
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25740 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f       package.Ado
25750 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e  NetTechnologyId.
25760 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
25770 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
257a0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
257b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257c0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
257d0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
25800 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65  erKey, "CodeBase
25810 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61  ", fileName, wha
25820 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25840 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
25870 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
25880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
258a0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46  aProviderKey, "F
258b0 61 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d  actoryService",.
258c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
258e0 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
258f0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
25900 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25920 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
25930 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
25950 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
25960 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
25970 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
259a0 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
259b0 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74  ConnectionUICont
259c0 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  rol",..         
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
259f0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
25a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
25a20 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
25a30 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
25a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a50 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
25a60 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
25a70 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65  aConnectionPrope
25a80 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  rties",..       
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25aa0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
25ab0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
25ae0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
25af0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
25b20 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
25b30 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70  ataConnectionSup
25b40 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b60 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
25b70 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
25b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b90 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
25ba0 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
25bb0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
25bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bd0 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
25be0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
25bf0 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22  taObjectSupport"
25c00 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
25c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25c40 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
25c50 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
25c60 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
25c70 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
25c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c90 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
25ca0 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65  Objects\\DataVie
25cb0 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49  wSupport", whatI
25cc0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
25d20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25d30 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
25d40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25d50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25da0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25db0 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
25dc0 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  veVsDataProvider
25dd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
25de0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
25df0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
25e00 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
25e10 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
25e20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
25e30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
25e40 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
25e50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
25e60 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
25e70 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
25e80 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
25e90 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
25ea0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25eb0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
25ec0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
25ed0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25ee0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
25ef0 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
25f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25f10 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25f40 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
25f50 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
25f60 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  rsion);....     
25f70 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
25f80 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
25f90 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
25fa0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fc0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
25fd0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
25fe0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26010 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
26020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26040 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
26050 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26070 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
26080 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
26090 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
260a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
260b0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
260c0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
260f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26100 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26110 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
26120 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
26130 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
26140 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
26150 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
26160 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
26170 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
26180 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
26190 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
261a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
261b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261c0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
261d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
261e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
261f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26200 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
26210 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
26240 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
26250 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
26260 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
26270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26280 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
26290 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
262a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
262b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
262d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
262e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
262f0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
26300 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
26330 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
26340 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
26350 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
26370 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
26380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26390 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
263a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
263b0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
263c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
263d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
263e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26420 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
26430 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
26440 65 73 73 56 73 44 61 74 61 50 72 6f 76 69 64 65  essVsDataProvide
26450 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
26460 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
26470 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
26480 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
26490 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
264a0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
264b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
264c0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
264d0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
264e0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
264f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
26500 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
26510 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
26520 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
26530 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
26540 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
26550 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
26560 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
26570 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
26580 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
26590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
265a0 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
265b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265d0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
265e0 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74   VS callback dat
265f0 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
26600 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26610 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26620 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26630 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
26640 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26650 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26660 75 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f  urn AddVsDataPro
26670 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
26680 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
26690 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
266a0 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c  package, pair.X,
266b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
266c0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
266d0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
266e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
266f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
26700 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
26710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26720 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
26730 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  eVsDataProvider(
26740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26750 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
26760 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
26770 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  e, whatIf,..    
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
267a0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
267b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
267c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
267d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
267e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26820 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26830 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20   #region Visual 
26840 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48  Studio Package H
26850 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
26860 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
26870 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
26880 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
26890 20 20 20 20 20 20 20 72 65 66 20 50 61 63 6b 61         ref Packa
268a0 67 65 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20  ge package..    
268b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
268c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
268d0 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
268e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
268f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26900 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d         package =
26910 20 6e 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d   new Package();.
26920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26930 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
26940 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20  tTechnologyId = 
26950 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26970 37 37 41 42 39 41 39 44 2d 37 38 42 39 2d 34 42  77AB9A9D-78B9-4B
26980 41 37 2d 39 31 41 43 2d 38 37 33 46 35 33 33 38  A7-91AC-873F5338
26990 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  F1D2");....     
269a0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
269b0 67 65 2e 50 61 63 6b 61 67 65 49 64 20 3d 20 6e  ge.PackageId = n
269c0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
269e0 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39  CBE6C8D-0E57-409
269f0 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34  9-A183-98FF74C64
26a00 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  D9C");....      
26a10 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
26a20 65 2e 53 65 72 76 69 63 65 49 64 20 3d 20 6e 65  e.ServiceId = ne
26a30 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43               "DC
26a50 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39  BE6C8D-0E57-4099
26a60 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44  -A183-98FF74C64D
26a70 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  9D");....       
26a80 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
26a90 2e 44 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20  .DataSourceId = 
26aa0 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26ac0 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42  0EBAAB6E-CA80-4B
26ad0 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35  4A-8DDF-CBE6BF05
26ae0 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  8C71");....     
26af0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
26b00 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
26b10 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
26b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b30 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
26b40 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
26b50 42 46 30 35 38 43 37 30 22 29 3b 0d 0a 20 20 20  BF058C70");..   
26b60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26b70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26b80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bc0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26bd0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
26be0 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63  ic bool AddVsPac
26bf0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
26c00 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
26c10 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
26c20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
26c30 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
26c40 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
26c50 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
26c60 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
26c70 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
26c80 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
26c90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
26ca0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
26cb0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
26cc0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
26cd0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
26ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26cf0 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
26d00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26d10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26d20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
26d30 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
26d40 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
26d50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26d60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26d80 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
26d90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26db0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
26dc0 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
26dd0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
26de0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26df0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26e00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26e10 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
26e20 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
26e30 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
26e40 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
26e50 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26e60 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
26e70 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
26e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e90 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
26ea0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
26eb0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
26ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ee0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
26ef0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26f10 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
26f20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
26f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f40 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
26f50 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
26f60 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
26f70 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
26f80 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
26f90 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
26fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26fb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
26fc0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
26fd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26fe0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
26ff0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
27000 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
27010 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
27020 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
27040 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
27050 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
27060 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
27070 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27090 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
270a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
270b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
270e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
27110 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
27120 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
27130 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
27160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27170 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27190 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
271b0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
271c0 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79  ryKey packageKey
271d0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
271e0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
271f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27200 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
27210 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  Key, package.Pac
27220 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
27230 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
27240 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20    verbose))..   
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
272a0 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75  packageKey == nu
272b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
272c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
272f0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
27300 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
27330 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
27340 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  key, package.Pac
27380 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
27390 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d  VsIdFormat));...
273a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
273c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
273f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27400 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
27410 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
27420 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
27430 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27450 20 20 20 20 20 20 20 22 7b 30 7d 20 44 65 73 69         "{0} Desi
27460 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50  gner Package", P
27470 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61  rojectName), wha
27480 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
27490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274a0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
274d0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
274e0 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73  ackageKey, "Clas
274f0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
27520 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22  r.SQLitePackage"
27530 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
27540 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
27560 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
27570 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
27580 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a  y, "CodeBase",..
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275a0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
275b0 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
275c0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275e0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
275f0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
27600 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30  geKey, "ID", 400
27610 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27630 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
27640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27650 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
27660 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
27670 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
27680 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22  "InprocServer32"
27690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
276b0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e 76 69  ath.Combine(Envi
276c0 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69  ronment.SystemDi
276d0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 20 20 20 20 22 6d 73 63 6f 72            "mscor
27700 65 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74 49 66  ee.dll"), whatIf
27710 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
27740 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
27750 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70  ackageKey, "Comp
27760 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  anyName",..     
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73         "http://s
27790 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74  ystem.data.sqlit
277a0 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c  e.org/", whatIf,
277b0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
277e0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
277f0 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64  ckageKey, "MinEd
27800 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  ition",..       
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27820 20 20 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c       "standard",
27830 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
27840 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
27860 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
27870 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
27880 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c  , "ProductName",
27890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
278b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
278c0 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67   Designer Packag
278d0 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
278e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
27900 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
27910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27920 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
27930 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
27940 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
27950 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22  "ProductVersion"
27960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
27980 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65  1.0", whatIf, ve
27990 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
279c0 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f  gistryKey toolbo
279d0 78 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  xKey = RegistryH
279e0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
279f0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a10 20 20 20 20 20 70 61 63 6b 61 67 65 4b 65 79 2c       packageKey,
27a20 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74   "Toolbox", what
27a30 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f        if (toolbo
27a80 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  xKey == null).. 
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27aa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
27ad0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
27ae0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b00 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
27b10 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
27b20 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 54  stry key: {0}\\T
27b30 6f 6f 6c 62 6f 78 22 2c 0d 0a 20 20 20 20 20 20  oolbox",..      
27b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
27b60 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20  ckageKey);....  
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27b90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bd0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
27be0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
27bf0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20      toolboxKey, 
27c20 22 44 65 66 61 75 6c 74 20 49 74 65 6d 73 22 2c  "Default Items",
27c30 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20   3, whatIf,..   
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
27c60 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
27c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
27c90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27ca0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
27cc0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
27cd0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
27ce0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
27cf0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d10 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c     key, "Menus",
27d20 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
27d30 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
27d40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d60 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
27d70 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
27d80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27da0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
27db0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
27de0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
27df0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75  y key: {0}\\Menu
27e00 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
27e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
27e80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
27e90 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27eb0 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
27ec0 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69  PackageId.ToStri
27ed0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
27ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27ef0 20 20 20 20 20 20 20 20 20 22 2c 20 31 30 30 30           ", 1000
27f00 2c 20 33 22 2c 20 77 68 61 74 49 66 2c 20 76 65  , 3", whatIf, ve
27f10 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
27f20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
27f40 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
27f50 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
27f60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
27f70 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f90 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73    key, "Services
27fa0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
27fb0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fe0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
27ff0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28000 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28020 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
28030 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28050 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
28060 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
28070 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65  try key: {0}\\Se
28080 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20  rvices",..      
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280a0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
280b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
280d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
280e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
280f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28100 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
28110 67 69 73 74 72 79 4b 65 79 20 73 65 72 76 69 63  gistryKey servic
28120 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  eKey = RegistryH
28130 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
28140 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
28170 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
28180 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
28190 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281b0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d        verbose)).
281c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
281d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281f0 69 66 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d  if (serviceKey =
28200 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28240 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
28250 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
28260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28270 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
28280 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
28290 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
282a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
282b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282c0 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
282d0 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
282e0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
282f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28310 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28330 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28350 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
28360 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72  per.SetValue(ser
28370 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a  viceKey, null,..
28380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28390 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
283a0 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
283b0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
283c0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283e0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
283f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
28410 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
28420 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79  Value(serviceKey
28430 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  , "Name",..     
28440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28450 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
28460 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
28470 65 72 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f  er Service", Pro
28480 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
28490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284a0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
284b0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
284d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
284e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
284f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28500 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
28510 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28520 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28570 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28580 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
28590 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  veVsPackage(..  
285a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
285b0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
285c0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
285d0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
285e0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
285f0 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
28600 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
28610 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
28620 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
28630 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
28640 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
28650 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
28660 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28670 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
28680 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
28690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
286a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
286b0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
286c0 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
286e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
286f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28700 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
28710 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
28720 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28740 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
28750 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28770 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28780 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28790 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
287a0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
287b0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
287c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
287d0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
287e0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
287f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
28800 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28820 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
28830 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
28840 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
28850 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28860 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
28870 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
28880 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
288b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
288c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288d0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
288e0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
288f0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
28900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28910 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
28920 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28940 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
28950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28970 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
28980 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
28990 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
289a0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289c0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
289d0 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
289e0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
289f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28a10 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
28a20 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28a50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
28a60 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
28a70 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
28aa0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
28ab0 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ad0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
28ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28af0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28b00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
28b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28b20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28b30 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
28b40 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
28b50 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b70 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50    key, package.P
28b80 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
28b90 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
28ba0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
28bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bc0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
28bd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bf0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
28c00 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
28c10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
28c20 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
28c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c40 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22      key, "Menus"
28c50 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
28c60 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
28c70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c90 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
28ca0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28cb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cd0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
28ce0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d00 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
28d10 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
28d20 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e  ry key: {0}\\Men
28d30 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  us",..          
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d50 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
28db0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
28dc0 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
28dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28de0 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
28df0 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
28e00 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
28e10 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e30 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
28e60 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
28e70 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
28e80 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
28e90 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
28ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28eb0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53           key, "S
28ec0 65 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20  ervices", true, 
28ed0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
28ee0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28ef0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28f00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
28f10 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
28f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28f50 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
28f60 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f80 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
28f90 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
28fa0 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d  {0}\\Services",.
28fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
28fd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28ff0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29010 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
29020 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
29030 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
29040 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
29050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29060 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
29070 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f  age.ServiceId.To
29080 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
29090 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
290a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290b0 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
290c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
290e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
290f0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
29100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29110 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29160 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
29170 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
29180 73 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  sVsPackage(..   
29190 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
291a0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
291b0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
291c0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
291d0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
291e0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
291f0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
29200 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
29210 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
29220 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
29230 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
29240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
29250 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
29260 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
29270 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29280 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
29290 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
292a0 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
292b0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
292c0 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
292d0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
292e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
292f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29300 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
29310 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
29320 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
29330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29340 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29350 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29360 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
29370 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
29380 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29390 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
293a0 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293c0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
293d0 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  on, package, pai
293e0 72 2e 58 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  r.X, whatIf,..  
293f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29400 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
29410 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
29420 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29430 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
29440 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29450 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
29460 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d  emoveVsPackage(.
29470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29480 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
29490 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
294a0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
294b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
294c0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
294d0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
294e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
294f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
29500 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  n..        #endr
29510 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
29520 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29570 20 20 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c      #region Appl
29580 69 63 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f  ication Entry Po
29590 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 70 72 69  int..        pri
295a0 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
295b0 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  Main(..         
295c0 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
295d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
295e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
295f0 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
29600 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
29610 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ion = null;..   
29620 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
29630 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  error = null;...
29640 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
296a0 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20  #region Command 
296b0 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d  Line Processing.
296c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
296d0 28 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!Configuration.
296e0 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20  FromArgs(..     
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
29700 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20 63  rgs, true, ref c
29710 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
29720 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20  f error) ||..   
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 21 43 6f               !Co
29740 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63  nfiguration.Proc
29750 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ess(..          
29760 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20            args, 
29770 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74  configuration, t
29780 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20  rue, ref error) 
29790 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
297a0 20 20 20 20 21 43 6f 6e 66 69 67 75 72 61 74 69      !Configurati
297b0 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69 6d 65 56  on.CheckRuntimeV
297c0 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
297d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
297e0 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65  figuration, true
297f0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
29800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
29820 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
29830 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
29840 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
29860 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
29870 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
29880 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298a0 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
298b0 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
298c0 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
298f0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
29900 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29910 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
29920 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
29930 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
29940 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29950 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
299a0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
299b0 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ion .NET Framewo
299c0 72 6b 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64  rk / Visual Stud
299d0 69 6f 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  io Data..       
299e0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
299f0 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  kage = null;..  
29a00 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
29a10 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
29a20 6b 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  kList = null;.. 
29a30 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73             VsLis
29a40 74 20 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b  t vsList = null;
29a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29aa0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29ab0 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50     InitializeVsP
29ac0 61 63 6b 61 67 65 28 72 65 66 20 70 61 63 6b 61  ackage(ref packa
29ad0 67 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge);..          
29ae0 20 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d    InitializeFram
29af0 65 77 6f 72 6b 4c 69 73 74 28 63 6f 6e 66 69 67  eworkList(config
29b00 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 66 72 61  uration, ref fra
29b10 6d 65 77 6f 72 6b 4c 69 73 74 29 3b 0d 0a 20 20  meworkList);..  
29b20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
29b30 6c 69 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66 69  lizeVsList(confi
29b40 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 76 73  guration, ref vs
29b50 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  List);..        
29b60 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
29b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29bd0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
29be0 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
29bf0 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
29c00 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
29c10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
29c20 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
29c30 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
29c40 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
29c50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29ca0 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
29cb0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 64 69 72  tring, bool> dir
29cc0 65 63 74 6f 72 79 50 61 69 72 20 3d 20 6e 65 77  ectoryPair = new
29cd0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
29ce0 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20   bool>(..       
29cf0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
29d00 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79  ration.Directory
29d10 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
29d20 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  Install);....   
29d30 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
29d40 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 66  <string, bool> f
29d50 69 6c 65 4e 61 6d 65 50 61 69 72 20 3d 20 6e 65  ileNamePair = ne
29d60 77 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  w AnyPair<string
29d70 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20  , bool>(..      
29d80 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
29d90 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72  uration.Designer
29da0 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67  FileName, config
29db0 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
29dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29dd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29e20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
29e30 20 47 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d   GAC Install/Rem
29e40 6f 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ove..           
29e50 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
29e60 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
29e70 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74 72  allFlags.GAC, tr
29e80 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
29e90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29ea0 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75 62       Publish pub
29eb0 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  lish = null;....
29ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ed0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
29ee0 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f00 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75  publish = new Pu
29f10 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20  blish();....    
29f20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29f30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e  configuration.In
29f40 73 74 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20  stall)..        
29f50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29f70 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
29f80 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fa0 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e     publish.GacIn
29fb0 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74  stall(configurat
29fc0 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.CoreFileName
29fd0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
29fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ff0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2a000 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2a010 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
2a020 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2a030 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2a040 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2a050 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2a060 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a080 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20     "GacInstall: 
2a090 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b  assemblyPath = {
2a0a0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2a0c0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
2a0d0 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e  ration.CoreFileN
2a0e0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
2a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a100 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2a110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a120 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
2a130 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
2a140 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a150 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2a160 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f  sh.GacInstall(co
2a170 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71  nfiguration.Linq
2a180 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
2a190 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
2a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2a1b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2a1c0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2a1d0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1f0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2a200 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2a210 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2a220 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a230 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49             "GacI
2a240 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79  nstall: assembly
2a250 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
2a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a270 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2a280 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
2a290 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  inqFileName)),..
2a2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2a2c0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
2a2d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a2e0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2a2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a300 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a310 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
2a320 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
2a330 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
2a340 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
2a350 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63  lish.GacRemove(c
2a360 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
2a370 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  qFileName); /* t
2a380 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2a3a0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2a3b0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2a3c0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2a3f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2a400 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2a410 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a420 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
2a430 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
2a440 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2a470 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
2a480 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  inqFileName)),..
2a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2a4b0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2a4d0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
2a4e0 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a500 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
2a510 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
2a520 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
2a530 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
2a540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a550 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
2a560 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
2a570 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
2a580 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2a590 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2a5a0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2a5b0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2a5c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5e0 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73    "GacRemove: as
2a5f0 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
2a600 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a610 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2a620 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
2a630 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
2a640 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2a660 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
2a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2a690 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2a6a0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2a6b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a700 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2a710 6e 20 2e 4e 45 54 20 41 73 73 65 6d 62 6c 79 46  n .NET AssemblyF
2a720 6f 6c 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20  olders..        
2a730 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
2a740 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49  ation.HasFlags(I
2a750 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65  nstallFlags.Asse
2a760 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75  mblyFolders, tru
2a770 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2a780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a790 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
2a7a0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
2a7b0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2a7d0 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65  eworkList, Proce
2a7e0 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ssAssemblyFolder
2a7f0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
2a800 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
2a810 63 74 6f 72 79 50 61 69 72 2c 20 63 6f 6e 66 69  ctoryPair, confi
2a820 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
2a830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a840 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2a850 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
2a860 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a890 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
2a8a0 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50  owMessage(TraceP
2a8b0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2a8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8d0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2a8e0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2a8f0 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65  llback, thisAsse
2a900 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2a920 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
2a930 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
2a940 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a960 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63      MessageBoxIc
2a970 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  on.Error);....  
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46    return 1; /* F
2a9a0 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20  AILURE */..     
2a9b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a9c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2a9d0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2a9e0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2a9f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2aa40 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
2aa50 45 54 20 44 62 50 72 6f 76 69 64 65 72 46 61 63  ET DbProviderFac
2aa60 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
2aa70 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
2aa80 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73  ion.HasFlags(Ins
2aa90 74 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76  tallFlags.DbProv
2aaa0 69 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75  iderFactory, tru
2aab0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2aac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2aad0 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d      bool saved =
2aae0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2aaf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ab00 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b  ForEachFramework
2ab10 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20  Config(..       
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab30 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20   frameworkList, 
2ab40 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
2ab50 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  rFactory,..     
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab70 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65     InvariantName
2ab80 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20  , ProviderName, 
2ab90 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  Description,..  
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abb0 20 20 20 20 20 20 46 61 63 74 6f 72 79 54 79 70        FactoryTyp
2abc0 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
2abd0 61 6d 65 2c 20 64 69 72 65 63 74 6f 72 79 50 61  ame, directoryPa
2abe0 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
2abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2ac00 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2ac10 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
2ac20 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72 65     ref saved, re
2ac50 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
2ac60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac80 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
2ac90 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69 6f  essage(TracePrio
2aca0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acc0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2acd0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2ace0 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c  ack, thisAssembl
2acf0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2ad00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2ad10 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
2ad20 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
2ad30 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
2ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad50 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
2ad60 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
2ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ad80 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
2ad90 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
2ada0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2adb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2adc0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2add0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ade0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae20 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2ae30 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 50 61     #region VS Pa
2ae40 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
2ae50 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
2ae60 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e  tion.HasFlags(In
2ae70 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
2ae80 6b 61 67 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  kage, true))..  
2ae90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2aeb0 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  (!ForEachVsVersi
2aec0 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
2aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aee0 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f       vsList, Pro
2aef0 63 65 73 73 56 73 50 61 63 6b 61 67 65 2c 20 70  cessVsPackage, p
2af00 61 63 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65  ackage, fileName
2af10 50 61 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  Pair,..         
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2af30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
2af40 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  tIf, configurati
2af50 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20  on.Verbose,..   
2af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af70 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29       ref error))
2af80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2afa0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2afb0 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72  s.ShowMessage(Tr
2afc0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
2afd0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
2afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2aff0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2b000 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
2b010 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
2b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b030 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
2b040 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
2b050 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
2b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b070 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
2b080 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
2b090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b0a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
2b0b0 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
2b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2b0f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2b100 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b150 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b160 6e 20 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d  n VS DataSource.
2b170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2b180 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
2b190 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46  asFlags(InstallF
2b1a0 6c 61 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63  lags.VsDataSourc
2b1b0 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  e, true))..     
2b1c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b1d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
2b1e0 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52  orEachVsVersionR
2b1f0 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
2b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b210 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73    vsList, Proces
2b220 73 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70  sVsDataSource, p
2b230 61 63 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65  ackage, fileName
2b240 50 61 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  Pair,..         
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2b260 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
2b270 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  tIf, configurati
2b280 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20  on.Verbose,..   
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29       ref error))
2b2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b2c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b2d0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2b2e0 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72  s.ShowMessage(Tr
2b2f0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
2b300 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
2b320 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
2b330 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
2b340 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b360 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
2b370 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
2b380 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
2b3b0 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
2b3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
2b3e0 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b410 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2b420 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2b430 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b480 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b490 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69 64 65  n VS DataProvide
2b4a0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  r..            i
2b4b0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
2b4c0 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c  .HasFlags(Instal
2b4d0 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 50 72 6f  lFlags.VsDataPro
2b4e0 76 69 64 65 72 2c 20 74 72 75 65 29 29 0d 0a 20  vider, true)).. 
2b4f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2b510 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73   (!ForEachVsVers
2b520 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ionRegistry(..  
2b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b540 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72        vsList, Pr
2b550 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
2b560 64 65 72 2c 20 70 61 63 6b 61 67 65 2c 20 66 69  der, package, fi
2b570 6c 65 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20  leNamePair,..   
2b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b590 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
2b5a0 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69  on.WhatIf, confi
2b5b0 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65  guration.Verbose
2b5c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b5d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
2b5e0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
2b5f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2b610 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
2b620 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
2b630 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
2b640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b650 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2b660 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2b670 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d  , thisAssembly,.
2b680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b690 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
2b6a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
2b6b0 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
2b6c0 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
2b6e0 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
2b6f0 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
2b700 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b710 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
2b720 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
2b730 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b740 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2b750 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2b760 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2b770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b7c0 23 72 65 67 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d  #region Log Summ
2b7d0 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ary..           
2b7e0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2b7f0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2b800 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20  ority.Higher,.. 
2b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2b820 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2b830 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2b840 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2b850 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75               "su
2b860 62 4b 65 79 73 43 72 65 61 74 65 64 20 3d 20 7b  bKeysCreated = {
2b870 30 7d 2c 20 73 75 62 4b 65 79 73 44 65 6c 65 74  0}, subKeysDelet
2b880 65 64 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  ed = {1}, " +.. 
2b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b8a0 6b 65 79 56 61 6c 75 65 73 53 65 74 20 3d 20 7b  keyValuesSet = {
2b8b0 32 7d 2c 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  2}, keyValuesDel
2b8c0 65 74 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20  eted = {3}",..  
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2b8e0 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72  rDisplay(Registr
2b8f0 79 48 65 6c 70 65 72 2e 53 75 62 4b 65 79 73 43  yHelper.SubKeysC
2b900 72 65 61 74 65 64 29 2c 0d 0a 20 20 20 20 20 20  reated),..      
2b910 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2b920 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c  play(RegistryHel
2b930 70 65 72 2e 53 75 62 4b 65 79 73 44 65 6c 65 74  per.SubKeysDelet
2b940 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ed),..          
2b950 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2b960 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
2b970 4b 65 79 56 61 6c 75 65 73 53 65 74 29 2c 0d 0a  KeyValuesSet),..
2b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b990 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73  ForDisplay(Regis
2b9a0 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c  tryHelper.KeyVal
2b9b0 75 65 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20  uesDeleted)),.. 
2b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2b9d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2b9f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2ba00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ba50 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ba60 30 3b 20 2f 2a 20 53 55 43 43 45 53 53 20 2a 2f  0; /* SUCCESS */
2ba70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2ba80 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2ba90 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64  .    }..    #end
2baa0 72 65 67 69 6f 6e 0d 0a 7d 0d 0a                 region..}..