System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact f7fd6ac9d0e685df2fd947d0e6a6174be314b343:


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 0d 0a 20 20 20 20 20 20   Medium,..      
0a70: 20 20 54 72 61 63 65 20 3d 20 4d 65 64 69 75 6d    Trace = Medium
0a80: 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e  ..    }..    #en
0a90: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f  dregion....    /
0aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0af0: 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61 6c    #region Instal
0b00: 6c 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 69  ler Class..    i
0b10: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 63  nternal static c
0b20: 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d 0a  lass Installer..
0b30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23      {..        #
0b40: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 48  region Private H
0b50: 65 6c 70 65 72 20 43 6c 61 73 73 65 73 0d 0a 20  elper Classes.. 
0b60: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
0b70: 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a 20 20  nyPair Class..  
0b80: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
0b90: 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79 50 61  aled class AnyPa
0ba0: 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20  ir<T1, T2>..    
0bb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0bc0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
0bd0: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 57              // W
0c00: 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e  ARNING: This con
0c10: 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75 63 65  structor produce
0c20: 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22  s an immutable "
0c30: 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20 20 20  empty" pair..   
0c40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
0c50: 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20       object...  
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
0c70: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
0c80: 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20 20 20   AnyPair()..    
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
0ca0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
0cb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0cc0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
0cd0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
0ce0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
0cf0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d30: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0d40: 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50       public AnyP
0d50: 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20 20 20  air(T1 x)..     
0d60: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
0d70: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
0d80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
0d90: 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d      this.x = x;.
0da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
0db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
0dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
0e10: 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28   public AnyPair(
0e20: 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20 20 20  T1 x, T2 y)..   
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
0e40: 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20 20 20  his(x)..        
0e50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
0e60: 20 20 20 20 20 20 20 74 68 69 73 2e 79 20 3d 20         this.y = 
0e70: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
0e80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
0e90: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
0ea0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
0f00: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
0f10: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
0f20: 20 20 20 70 72 69 76 61 74 65 20 54 31 20 78 3b     private T1 x;
0f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
0f40: 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20 20 20  blic T1 X..     
0f50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0f60: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
0f70: 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20  return x; }..   
0f80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
0f90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
0ff0: 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20 20 20  vate T2 y;..    
1000: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
1010: 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2 Y..           
1020: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1030: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1040: 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20   y; }..         
1050: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1060: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
1070: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1080: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1090: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10e0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
10f0: 6e 20 54 72 61 63 65 4f 70 73 20 43 6c 61 73 73  n TraceOps Class
1100: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1110: 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 54  e static class T
1120: 72 61 63 65 4f 70 73 0d 0a 20 20 20 20 20 20 20  raceOps..       
1130: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1140: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
1150: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
1160: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1170: 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66 61  onst string Defa
1180: 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 20 3d  ultDebugFormat =
1190: 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b 32   "#{0} @ {1}: {2
11a0: 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }";..           
11b0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
11c0: 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72 61  tring DefaultTra
11d0: 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d  ceFormat = "#{0}
11e0: 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d   @ {1}: {2}";...
11f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1200: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1210: 67 20 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d  g Iso8601DateTim
1220: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d  eOutputFormat =.
1230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1240: 20 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a   "yyyy.MM.ddTHH:
1250: 6d 6d 3a 73 73 2e 66 66 66 66 66 66 66 22 3b 0d  mm:ss.fffffff";.
1260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1270: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1280: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
12d0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
12e0: 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
12f0: 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20   Data..         
1300: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1310: 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f  c object syncRoo
1320: 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29  t = new object()
1330: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1340: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f  rivate static lo
1350: 6e 67 20 6e 65 78 74 44 65 62 75 67 49 64 3b 0d  ng nextDebugId;.
1360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1370: 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e 67  vate static long
1380: 20 6e 65 78 74 54 72 61 63 65 49 64 3b 0d 0a 20   nextTraceId;.. 
1390: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
13a0: 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50  te static TraceP
13b0: 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
13c0: 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69  ority = TracePri
13d0: 6f 72 69 74 79 2e 44 65 62 75 67 3b 0d 0a 20 20  ority.Debug;..  
13e0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
13f0: 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50 72  e static TracePr
1400: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
1410: 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f  rity = TracePrio
1420: 72 69 74 79 2e 54 72 61 63 65 3b 0d 0a 20 20 20  rity.Trace;..   
1430: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1440: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 64   static string d
1450: 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66  ebugFormat = Def
1460: 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b  aultDebugFormat;
1470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1480: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
1490: 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20  ing traceFormat 
14a0: 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f  = DefaultTraceFo
14b0: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
14c0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
14d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1530: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
1540: 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
1550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1560: 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63  blic static Trac
1570: 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50  ePriority DebugP
1580: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
1590: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15a0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
15b0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
15c0: 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
15d0: 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rity; } }..     
15e0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
15f0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
1600: 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   { debugPriority
1610: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
1620: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1630: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1680: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1690: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
16a0: 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65  cePriority Trace
16b0: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
16c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16d0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
16e0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
16f0: 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
1700: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
1710: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1720: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
1730: 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  ) { tracePriorit
1740: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
1750: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17c0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
17d0: 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
17e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1800: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
1810: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
1820: 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d  debugFormat; } }
1830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1840: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
1850: 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46  ncRoot) { debugF
1860: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
1870: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1880: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1890: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18e0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
18f0: 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
1900: 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
1910: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1920: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
1930: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
1940: 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
1950: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
1960: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
1970: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
1980: 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
1990: 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  e; } }..        
19a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a20: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74  #region Interact
1a30: 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68  ive Support Meth
1a40: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1a50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1a60: 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
1a70: 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20  yTitle(..       
1a80: 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
1a90: 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y assembly..    
1aa0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1ab0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ad0: 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75   (assembly != nu
1ae0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1af0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
1b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b40: 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44  if (assembly.IsD
1b50: 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20  efined(..       
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b70: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
1b80: 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
1b90: 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29  ribute), false))
1ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd0: 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
1be0: 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 20  yTitleAttribute 
1bf0: 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20  title =..       
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c10: 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62           (Assemb
1c20: 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1c30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c50: 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43     assembly.GetC
1c60: 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28  ustomAttributes(
1c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
1ca0: 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
1cb0: 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b  ute), false)[0];
1cc0: 0d 0a 0d 0a 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: 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54 69 74  return title.Tit
1cf0: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d30: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
1d40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
1d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1da0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1dc0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
1dd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1de0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e30: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1e40: 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52  c static DialogR
1e50: 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67  esult ShowMessag
1e60: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1e70: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1e80: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
1e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea0: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
1eb0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
1ee0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
1ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1f00: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c  sembly assembly,
1f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f20: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
1f30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f40: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
1f50: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
1f60: 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42       MessageBoxB
1f70: 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d  uttons buttons,.
1f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f90: 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20   MessageBoxIcon 
1fa0: 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  icon..          
1fb0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fd0: 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65          DialogRe
1fe0: 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69  sult result = Di
1ff0: 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a  alogResult.OK;..
2000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2010: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28    DebugAndTrace(
2020: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2040: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2050: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2060: 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67  , message, categ
2070: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2080: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79 73           if (Sys
2090: 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55  temInformation.U
20a0: 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d  serInteractive).
20b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
20e0: 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62  itle = GetAssemb
20f0: 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79  lyTitle(assembly
2100: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2110: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 69            if (ti
2120: 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  tle == null)..  
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2140: 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70        title = Ap
2150: 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63  plication.Produc
2160: 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tName;....      
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2180: 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f  sult = MessageBo
2190: 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20  x.Show(message, 
21a0: 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20  title, buttons, 
21b0: 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  icon);....      
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
21d0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
21e0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
21f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2200: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2210: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2220: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2240: 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72 20            "User 
2250: 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c  choice of {0}.",
2260: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75   ForDisplay(resu
2270: 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  lt)),..         
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2290: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
22a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
22c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22e0: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
22f0: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
2300: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2310: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2320: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2330: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
2340: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2350: 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75            "Defau
2360: 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d  lt choice of {0}
2370: 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  .", ForDisplay(r
2380: 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20  esult)),..      
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
23a0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23c0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
23d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23e0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
23f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2400: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2440: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2450: 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63      #region Trac
2460: 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68  ing Support Meth
2470: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
2480: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c   public static l
2490: 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49 64 28  ong NextDebugId(
24a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c0: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
24d0: 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72  cked.Increment(r
24e0: 65 66 20 6e 65 78 74 44 65 62 75 67 49 64 29 3b  ef nextDebugId);
24f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2500: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2560: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
2570: 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65 49 64  long NextTraceId
2580: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
2590: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25a0: 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c     return Interl
25b0: 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28  ocked.Increment(
25c0: 72 65 66 20 6e 65 78 74 54 72 61 63 65 49 64 29  ref nextTraceId)
25d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2630: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2640: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2650: 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74 61 6d   string TimeStam
2660: 70 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 54  p(DateTime dateT
2670: 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ime)..          
2680: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2690: 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65       return date
26a0: 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49 73  Time.ToString(Is
26b0: 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74  o8601DateTimeOut
26c0: 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20  putFormat);..   
26d0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
26f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
2740: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2750: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2760: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2770: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2780: 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4d 65  tic string GetMe
2790: 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20 20  thodName(..     
27a0: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
27b0: 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65  Trace stackTrace
27c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27d0: 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20 20     int level..  
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
27f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2810: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
2820: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2830: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
2860: 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20 74 72  a valid stack tr
2870: 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75 70 70  ace was not supp
2880: 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  lied by the..   
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
28b0: 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f 77  , create one now
28c0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75   based on the cu
28d0: 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  rrent..         
28e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
28f0: 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20 73 74      execution st
2900: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ack...          
2910: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2930: 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63 65    if (stackTrace
2940: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2970: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
29a0: 72 61 62 20 74 68 65 20 63 75 72 72 65 6e 74 20  rab the current 
29b0: 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e  execution stack.
29c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f0: 20 20 20 20 20 20 73 74 61 63 6b 54 72 61 63 65        stackTrace
2a00: 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63   = new StackTrac
2a10: 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
2a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a30: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2a50: 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70  OTE: Always skip
2a60: 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65   this call frame
2a70: 20 77 68 65 6e 20 77 65 20 63 61 70 74 75 72 65   when we capture
2a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2aa0: 20 20 20 74 68 65 20 73 74 61 63 6b 20 74 72 61     the stack tra
2ab0: 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce...           
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
2af0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b20: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2b30: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2b40: 20 47 65 74 20 74 68 65 20 73 70 65 63 69 66 69   Get the specifi
2b50: 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65 20 28  ed stack frame (
2b60: 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65 20 74  always add one t
2b70: 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  o..             
2b80: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2b90: 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68 6f 64  skip this method
2ba0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
2bb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd0: 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61 63 6b  StackFrame stack
2be0: 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54 72 61  Frame = stackTra
2bf0: 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65 76 65  ce.GetFrame(leve
2c00: 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
2c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c30: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20     // NOTE: Get 
2c40: 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  the method for t
2c50: 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65 2e 0d  he stack frame..
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 74               Met
2c90: 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64 42 61  hodBase methodBa
2ca0: 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d 65 2e  se = stackFrame.
2cb0: 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d 0a  GetMethod();....
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2cf0: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74 79 70  OTE: Get the typ
2d00: 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68 6f 64  e for the method
2d10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d20: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2d40: 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74 68 6f  ype type = metho
2d50: 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e 67 54  dBase.DeclaringT
2d60: 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ype;....        
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
2da0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2db0: 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20   method...      
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2de0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
2df0: 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 4e  e = methodBase.N
2e00: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e30: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74      // NOTE: Ret
2e40: 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72 6c 79  urn the properly
2e50: 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73 75 6c   formatted resul
2e60: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
2e70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e90: 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2ea0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2ec0: 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70 65  {0}{1}{2}", type
2ed0: 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c 69  .Name, Type.Deli
2ee0: 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a 20  miter, name);.. 
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f10: 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
2f20: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f40: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f70: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
2f80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2ff0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3000: 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72 65 28   void DebugCore(
3010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3020: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
3030: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3040: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
3050: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
3060: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
3070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3080: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
3090: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
30a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
30e0: 6f 72 20 61 20 62 75 69 6c 64 20 77 69 74 68 6f  or a build witho
30f0: 75 74 20 22 44 45 42 55 47 22 20 64 65 66 69 6e  ut "DEBUG" defin
3100: 65 64 2c 20 77 65 20 63 61 6e 6e 6f 74 0d 0a 20  ed, we cannot.. 
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3120: 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6d 70     //       simp
3130: 6c 79 20 75 73 65 20 74 68 65 20 44 65 62 75 67  ly use the Debug
3140: 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 69 74 20   class (i.e. it 
3150: 77 69 6c 6c 20 64 6f 0d 0a 20 20 20 20 20 20 20  will do..       
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3170: 20 20 20 20 20 20 6e 6f 74 68 69 6e 67 29 3b 20        nothing); 
3180: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 74  therefore, use t
3190: 68 65 20 63 6f 6e 73 6f 6c 65 20 64 69 72 65 63  he console direc
31a0: 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tly..           
31b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
31c0: 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20    instead...    
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e0: 2f 2f 0d 0a 23 69 66 20 44 45 42 55 47 0d 0a 20  //..#if DEBUG.. 
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3200: 20 20 20 44 65 62 75 67 2e 57 72 69 74 65 4c 69     Debug.WriteLi
3210: 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65  ne(message, cate
3220: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
3230: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
3240: 67 2e 46 6c 75 73 68 28 29 3b 0d 0a 23 65 6c 73  g.Flush();..#els
3250: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
3260: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
3270: 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e 67 2e  riteLine(String.
3280: 46 6f 72 6d 61 74 28 22 7b 31 7d 3a 20 7b 30 7d  Format("{1}: {0}
3290: 22 2c 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ", message,..   
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b0: 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 29 3b       category));
32c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
32d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
32e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
32f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3350: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
3360: 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20 20 20  TraceCore(..    
3370: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3380: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
33a0: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
33c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
33f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3410: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
3420: 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c  iteLine(message,
3430: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3450: 20 54 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d   Trace.Flush();.
3460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3470: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3480: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3490: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
34e0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
34f0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
3500: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
3510: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3520: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
3530: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
3540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3550: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
3560: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3580: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
3590: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
35b0: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
35c0: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
35d0: 20 20 20 20 20 20 20 20 20 20 20 45 78 63 65 70             Excep
35e0: 74 69 6f 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d  tion exception,.
35f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3600: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
3610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3620: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
3630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3640: 20 20 20 20 69 66 20 28 65 78 63 65 70 74 69 6f      if (exceptio
3650: 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3670: 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54  return DebugAndT
3680: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
3690: 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ty, debugCallbac
36a0: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
36c0: 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53  eCallback, new S
36d0: 74 61 63 6b 54 72 61 63 65 28 65 78 63 65 70 74  tackTrace(except
36e0: 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a  ion, true), 0,..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 20 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f          exceptio
3710: 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c 20 63 61  n.ToString(), ca
3720: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
3730: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3740: 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
3750: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3760: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
37b0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
37c0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
37d0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
37e0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
37f0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3800: 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54  string DebugAndT
3810: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
3820: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
3830: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
3840: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
3850: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
3860: 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  ck debugCallback
3870: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3880: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
3890: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
38a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38b0: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
38c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38d0: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
38e0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
38f0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
3900: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3910: 20 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75       return Debu
3920: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
3930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3940: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64  tracePriority, d
3950: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
3960: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
3970: 6c 2c 20 31 2c 0d 0a 20 20 20 20 20 20 20 20 20  l, 1,..         
3980: 20 20 20 20 20 20 20 20 20 20 20 6d 65 73 73 61             messa
3990: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
39b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
39c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3a10: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
3a20: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
3a30: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
3a40: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
3a50: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
3a60: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
3a80: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
3a90: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3ab0: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
3ac0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
3ad0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3ae0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
3af0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3b00: 20 20 20 20 20 20 20 20 53 74 61 63 6b 54 72 61          StackTra
3b10: 63 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a  ce stackTrace,..
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b30: 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20  int level,..    
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3b50: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
3b70: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
3b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3bc0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77      // NOTE: Alw
3bd0: 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61  ays skip this ca
3be0: 6c 6c 20 66 72 61 6d 65 20 69 66 20 74 68 65 20  ll frame if the 
3bf0: 73 74 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a  stack trace is..
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c10: 2f 2f 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74  //       going t
3c20: 6f 20 62 65 20 63 61 70 74 75 72 65 64 20 62 79  o be captured by
3c30: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d   GetMethodName..
3c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3c50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3c60: 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72       if (stackTr
3c70: 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ace == null)..  
3c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c90: 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20    level++;....  
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cc0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61    // NOTE: Forma
3cd0: 74 20 74 68 65 20 6d 65 73 73 61 67 65 20 66 6f  t the message fo
3ce0: 72 20 64 69 73 70 6c 61 79 20 28 6f 6e 63 65 29  r display (once)
3cf0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d00: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f         string fo
3d20: 72 6d 61 74 74 65 64 20 3d 20 53 74 72 69 6e 67  rmatted = String
3d30: 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31  .Format("{0}: {1
3d40: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
3d50: 20 20 20 20 20 20 20 20 20 47 65 74 4d 65 74 68           GetMeth
3d60: 6f 64 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63  odName(stackTrac
3d70: 65 2c 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61  e, level), messa
3d80: 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
3d90: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3da0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3db0: 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61 63  OTE: If the trac
3dc0: 65 20 70 72 69 6f 72 69 74 79 20 6f 66 20 74 68  e priority of th
3dd0: 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65  is message is le
3de0: 73 73 20 74 68 61 6e 0d 0a 20 20 20 20 20 20 20  ss than..       
3df0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3e00: 20 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e    what we curren
3e10: 74 6c 79 20 77 61 6e 74 20 74 6f 20 64 65 62 75  tly want to debu
3e20: 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20  g, skip it...   
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e50: 20 69 66 20 28 74 72 61 63 65 50 72 69 6f 72 69   if (tracePriori
3e60: 74 79 20 3e 3d 20 44 65 62 75 67 50 72 69 6f 72  ty >= DebugPrior
3e70: 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ity)..          
3e80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3eb0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
3ec0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2c 20   not specified, 
3ed0: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
3ee0: 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 2e 0d  debug callback..
3ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f00: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3f20: 28 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d  (debugCallback =
3f30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f50: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d   debugCallback =
3f60: 20 44 65 62 75 67 43 6f 72 65 3b 0d 0a 0d 0a 20   DebugCore;.... 
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f80: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
3fa0: 54 45 3a 20 57 72 69 74 65 20 74 68 65 20 66 6f  TE: Write the fo
3fb0: 72 6d 61 74 74 65 64 20 6d 65 73 73 61 67 65 20  rmatted message 
3fc0: 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69 76  to all the activ
3fd0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
3fe0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
3ff0: 64 65 62 75 67 20 6c 69 73 74 65 6e 65 72 73 2e  debug listeners.
4000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4010: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
4030: 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d  bugCallback(form
4040: 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29  atted, category)
4050: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4060: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4070: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4090: 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61 63  OTE: If the trac
40a0: 65 20 70 72 69 6f 72 69 74 79 20 6f 66 20 74 68  e priority of th
40b0: 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65  is message is le
40c0: 73 73 20 74 68 61 6e 0d 0a 20 20 20 20 20 20 20  ss than..       
40d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
40e0: 20 20 77 68 61 74 20 77 65 20 63 75 72 72 65 6e    what we curren
40f0: 74 6c 79 20 77 61 6e 74 20 74 6f 20 74 72 61 63  tly want to trac
4100: 65 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20  e, skip it...   
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4130: 20 69 66 20 28 74 72 61 63 65 50 72 69 6f 72 69   if (tracePriori
4140: 74 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72  ty >= TracePrior
4150: 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ity)..          
4160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4190: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
41a0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2c 20   not specified, 
41b0: 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
41c0: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0d  trace callback..
41d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
41e0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4200: 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d  (traceCallback =
4210: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4230: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d   traceCallback =
4240: 20 54 72 61 63 65 43 6f 72 65 3b 0d 0a 0d 0a 20   TraceCore;.... 
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4260: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4270: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4280: 54 45 3a 20 57 72 69 74 65 20 74 68 65 20 66 6f  TE: Write the fo
4290: 72 6d 61 74 74 65 64 20 6d 65 73 73 61 67 65 20  rmatted message 
42a0: 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69 76  to all the activ
42b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
42c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
42d0: 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 73 2e  trace listeners.
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
4310: 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d  aceCallback(form
4320: 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29  atted, category)
4330: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4340: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4350: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d          return m
4360: 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20  essage;..       
4370: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4380: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
4390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
43a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
43b0: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
43c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4400: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
4410: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
4420: 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Key Class..     
4430: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
4440: 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69  d class MockRegi
4450: 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f  stryKey : IDispo
4460: 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b  sable..        {
4470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
4480: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
4490: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
44a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
44b0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
44c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
44d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
44e0: 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b    whatIf = true;
44f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4500: 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75    readOnly = tru
4510: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
4520: 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b      safe = true;
4530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
4550: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
4560: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
45b0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
45c0: 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
45d0: 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
45e0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
45f0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
4610: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20  stryKey key..   
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4640: 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20  : this()..      
4650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4660: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65           this.ke
4670: 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20  y = key;..      
4680: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4690: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
46a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
46e0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
46f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
4700: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4710: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
4720: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
4730: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
4740: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
4750: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
4760: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
4770: 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20  s(key)..        
4780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4790: 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b         this.subK
47a0: 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e  eyName = subKeyN
47b0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
47c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
47d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
47e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4820: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
4830: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
4850: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4870: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
4880: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
4890: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
48a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48b0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
48c0: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
48d0: 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20   subKeyName)..  
48e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
48f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
4900: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
4910: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
4920: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
4930: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4980: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
4990: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
49b0: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
49d0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
49e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
49f0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
4a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a10: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4a40: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73     : this(key, s
4a50: 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
4a60: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
4a70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4a80: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
4a90: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
4aa0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
4b10: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
4b20: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
4b30: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
4b40: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
4b50: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4b60: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
4b80: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
4b90: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4ba0: 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20  readOnly,..     
4bb0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
4bc0: 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  safe..          
4bd0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4be0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
4bf0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
4c00: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
4c10: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
4c20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4c30: 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73     this.safe = s
4c40: 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  afe;..          
4c50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4c60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
4c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ca0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4cb0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
4cc0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
4ce0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
4cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d00: 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20   bool whatIf..  
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
4d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d30: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
4d40: 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  l, whatIf)..    
4d50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4d60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
4d70: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
4d80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4d90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4de0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4df0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
4e00: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
4e10: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
4e20: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
4e30: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
4e40: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
4e50: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
4e60: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
4e70: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
4e80: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
4e90: 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
4ea0: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
4eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
4ed0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
4ee0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4ef0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4f40: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
4f50: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
4f60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4f70: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
4f80: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
4f90: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
4fa0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4fb0: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
4fc0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4fd0: 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20     bool safe..  
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
4ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5000: 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c   : this(key, nul
5010: 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  l, whatIf, readO
5020: 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20  nly, safe)..    
5030: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5040: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
5050: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
5060: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
5070: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5080: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
50e0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
50f0: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
5100: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
5110: 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20  id Close()..    
5120: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5130: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5150: 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f  / NOTE: No dispo
5160: 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62  sed check here b
5170: 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74  ecause calling t
5180: 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20  his method..    
5190: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
51a0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a       should be j
51b0: 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67  ust like calling
51c0: 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20   Dispose...     
51d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
51e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
51f0: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
5200: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5210: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5260: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5270: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
5280: 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b  ryKey CreateSubK
5290: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
52a0: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
52b0: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
52c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
52d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
52e0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
52f0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
5300: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
5310: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
5320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5330: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
5340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5350: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
5360: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
5370: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
5380: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5390: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
53a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
53b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53c0: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
53d0: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
53e0: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
53f0: 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
5400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5410: 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20  //       fails, 
5420: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
5430: 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65  eturn the wrappe
5440: 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20  d root key..    
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5460: 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20  //       itself 
5470: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
5480: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27  are allowed in '
5490: 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20  what-if'..      
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
54b0: 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68         mode anyh
54c0: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
54d0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54f0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62   RegistryKey sub
5500: 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75  Key = key.OpenSu
5510: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
5520: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5530: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5540: 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29  (subKey != null)
5550: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
5560: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
5570: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55a0: 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66    subKey, whatIf
55b0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
55c0: 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) :..           
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
55e0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
55f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
5620: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
5630: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5660: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
5670: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5690: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
56a0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56c0: 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62     key.CreateSub
56d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c  Key(subKeyName),
56e0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
56f0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
5700: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5710: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5720: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5780: 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  blic void Delete
5790: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
57a0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
57b0: 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  subKeyName..    
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
57d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
57f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
5820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5830: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5840: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5850: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5860: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5870: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
5880: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5890: 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74         key.Delet
58a0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
58b0: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
58c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
58d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
58e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5910: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5920: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
5930: 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  d DeleteSubKeyTr
5940: 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
5950: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
5960: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
5970: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5980: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5990: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
59a0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
59c0: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
59d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59e0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
59f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5a00: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
5a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5a20: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a40: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62     key.DeleteSub
5a50: 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61  KeyTree(subKeyNa
5a60: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
5a70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5a80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ac0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5ad0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
5ae0: 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a  d DeleteValue(..
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b00: 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20  string name..   
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
5b40: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b60: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
5b70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5b80: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
5b90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
5ba0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5bb0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
5bc0: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
5bd0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5be0: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
5bf0: 74 65 56 61 6c 75 65 28 6e 61 6d 65 29 3b 0d 0a  teValue(name);..
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5c70: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20  public string[] 
5c80: 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29  GetSubKeyNames()
5c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5cb0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5cc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5cd0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
5ce0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
5cf0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5d00: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
5d10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5d20: 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e  n key.GetSubKeyN
5d30: 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20  ames();..       
5d40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5d50: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5da0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5db0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
5dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5dd0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
5de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5df0: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
5e00: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
5e10: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
5e20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5e30: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5e40: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5e50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
5e60: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
5e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e80: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
5e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ea0: 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 56   return key.GetV
5eb0: 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75  alue(name, defau
5ec0: 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  ltValue);..     
5ed0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5ee0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5f30: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5f40: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
5f50: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
5f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5f70: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f90: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5fa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5fb0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
5fc0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
5fd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f          return O
5fe0: 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79  penSubKey(subKey
5ff0: 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20  Name, false);.. 
6000: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6060: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6070: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
6080: 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79  ryKey OpenSubKey
6090: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
60a0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
60b0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
60c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74         bool writ
60d0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
60e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
60f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6100: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6110: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6120: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6130: 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20 20  writable)..     
6140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6150: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
6160: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6170: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
6180: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
6190: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
61a0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
61b0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
61c0: 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65  yKey subKey = ke
61d0: 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y.OpenSubKey(.. 
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61f0: 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77     subKeyName, w
6200: 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20  hatIf ? false : 
6210: 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20  writable);....  
6220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6230: 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20  turn (subKey != 
6240: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
6250: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
6260: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6270: 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c  (subKey, whatIf,
6280: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
6290: 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   : null;..      
62a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
62b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
62c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6300: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6310: 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d   void SetValue(.
6320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6330: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
6350: 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
6370: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6390: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
63a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
63b0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
63c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
63d0: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
63e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
63f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6400: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
6410: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
6420: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
6430: 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56          key.SetV
6440: 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65  alue(name, value
6450: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6460: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
6470: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
6480: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
64e0: 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65  ion Public Prope
64f0: 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..         
6500: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
6510: 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20   Name..         
6520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6530: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6540: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
6570: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
6580: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
6590: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65b0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
65c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
65d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21          return !
65e0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
65f0: 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  mpty(subKeyName)
6600: 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
6610: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
6620: 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c  ng.Format("{0}\\
6630: 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20  {1}", key.Name, 
6640: 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20  subKeyName) :.. 
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b         key.Name;
6670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6680: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6690: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
66a0: 20 20 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 2f 2f 2f 2f 2f  ////////////////
66e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
66f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67       private Reg
6700: 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20  istryKey key;.. 
6710: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
6720: 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b 65  c RegistryKey Ke
6730: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
6740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6750: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
6760: 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53 61  posed(); CheckSa
6770: 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 79  fe(); return key
6780: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
6790: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
67a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
67b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
67f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
6800: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d  ing subKeyName;.
6810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6820: 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b 65  lic string SubKe
6830: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
6840: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6850: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
6860: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
6870: 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20  urn subKeyName; 
6880: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
6890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
68a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68b0: 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
68f0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
6900: 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20  whatIf;..       
6910: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
6920: 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20   WhatIf..       
6930: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6940: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
6950: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
6960: 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d  eturn whatIf; }.
6970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
69e0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65   private bool re
69f0: 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20  adOnly;..       
6a00: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
6a10: 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20   ReadOnly..     
6a20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6a30: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
6a40: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6a50: 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79   return readOnly
6a60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
6a70: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
6a80: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6ad0: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
6ae0: 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20   safe;..        
6af0: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6b00: 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Safe..          
6b10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6b20: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
6b30: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
6b40: 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20  rn safe; }..    
6b50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6b60: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6b70: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
6b80: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6bd0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
6be0: 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ate Methods..   
6bf0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6c00: 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f   void CheckReadO
6c10: 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  nly()..         
6c20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6c30: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6c40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
6c50: 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79  E: In "read-only
6c60: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
6c70: 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63  low all write ac
6c80: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  cess...         
6c90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
6ca0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
6cb0: 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20  readOnly)..     
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6cd0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
6ce0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
6cf0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
6d00: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
6d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6d20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6d80: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
6d90: 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20 20  heckSafe()..    
6da0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6dd0: 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66 65  / NOTE: In "safe
6de0: 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c  " mode, we disal
6df0: 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20 61  low all direct a
6e00: 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20 20  ccess to the..  
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6e20: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64         contained
6e30: 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a   registry key...
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e50: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6e60: 20 20 20 20 69 66 20 28 21 73 61 66 65 29 0d 0a      if (!safe)..
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e80: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
6ea0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
6eb0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
6ec0: 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on();..         
6ed0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6ee0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6f40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
6f50: 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62  region System.Ob
6f60: 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d 0a  ject Overrides..
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6f80: 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  ic override stri
6f90: 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  ng ToString().. 
6fa0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6fc0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6fe0: 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e 61    return this.Na
6ff0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
7000: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
7010: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
7020: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
7080: 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f  gion Implicit Co
7090: 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f  nversion Operato
70a0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
70b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
70c0: 2f 2f 20 42 55 47 42 55 47 3a 20 54 68 65 20 27  // BUGBUG: The '
70d0: 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 73 65  what-if' mode se
70e0: 74 74 69 6e 67 20 68 65 72 65 20 73 68 6f 75 6c  tting here shoul
70f0: 64 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61  d probably be ba
7100: 73 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  sed..           
7110: 20 2f 2f 20 20 20 20 20 20 20 20 20 6f 6e 20 73   //         on s
7120: 6f 6d 65 20 73 74 61 74 69 63 20 70 72 6f 70 65  ome static prope
7130: 72 74 79 2c 20 6e 6f 74 20 68 61 72 64 2d 63 6f  rty, not hard-co
7140: 64 65 64 20 74 6f 20 74 72 75 65 3f 0d 0a 20 20  ded to true?..  
7150: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7160: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
7170: 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74   static implicit
7180: 20 6f 70 65 72 61 74 6f 72 20 4d 6f 63 6b 52 65   operator MockRe
7190: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
71a0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
71b0: 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20  stryKey key..   
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
71e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
71f0: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
7200: 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 6e  gistryKey(key, n
7210: 75 6c 6c 2c 20 74 72 75 65 2c 20 66 61 6c 73 65  ull, true, false
7220: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
7230: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7240: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7290: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
72a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55             // BU
72b0: 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f  GBUG: Remove me?
72c0: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
72d0: 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e   safe because in
72e0: 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20   'what-if'..    
72f0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
7300: 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73     mode all keys
7310: 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64   are opened read
7320: 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  -only...        
7330: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7340: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
7350: 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61  c implicit opera
7360: 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28  tor RegistryKey(
7370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7380: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
7390: 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  y key..         
73a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
73b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
73c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
73d0: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (key != null) ? 
73e0: 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d  key.Key : null;.
73f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7400: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
7410: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
7420: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
7470: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
7480: 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61   IDisposable "Pa
7490: 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a  ttern" Members..
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
74b0: 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
74c0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
74d0: 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65  private void Che
74e0: 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20  ckDisposed() /* 
74f0: 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
7500: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7510: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69           if (!di
7520: 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  sposed)..       
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7540: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
7550: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
7560: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
7570: 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66  Exception(typeof
7580: 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
7590: 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ).Name);..      
75a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
75b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7600: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
7610: 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20 76  e /* protected v
7620: 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44  irtual */ void D
7630: 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20 20  ispose(..       
7640: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
7650: 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20 20  sposing..       
7660: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7670: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7680: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
7690: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
76a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29    if (disposing)
76d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
7730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7740: 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67 65  / dispose manage
7750: 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72 65  d resources here
7760: 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .....           
7770: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
7780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
77c0: 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (key != null).. 
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28        key.Close(
7810: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  key = null;..   
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7860: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7880: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78c0: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
78d0: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
78e0: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7920: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7930: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
7960: 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64   object is now d
7970: 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20  isposed...      
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
79a0: 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d        disposed =
79b0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
79c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
79d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
79e0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
79f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7a50: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
7a60: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7a80: 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  ic void Dispose(
7a90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ab0: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
7ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ad0: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
7ae0: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
7af0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7b00: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
7b10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
7b20: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7b70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65        #region De
7b80: 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20  structor..      
7b90: 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73        ~MockRegis
7ba0: 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20  tryKey()..      
7bb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7bc0: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
7bd0: 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20  (false);..      
7be0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7bf0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
7c00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7c10: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7c20: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c70: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
7c80: 67 69 6f 6e 20 52 65 67 69 73 74 72 79 48 65 6c  gion RegistryHel
7c90: 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  per Class..     
7ca0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
7cb0: 63 20 63 6c 61 73 73 20 52 65 67 69 73 74 72 79  c class Registry
7cc0: 48 65 6c 70 65 72 0d 0a 20 20 20 20 20 20 20 20  Helper..        
7cd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
7ce0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
7cf0: 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  atic Properties.
7d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7d10: 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
7d20: 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 0d  subKeysCreated;.
7d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7d40: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 53  lic static int S
7d50: 75 62 4b 65 79 73 43 72 65 61 74 65 64 0d 0a 20  ubKeysCreated.. 
7d60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
7d80: 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b 65  t { return subKe
7d90: 79 73 43 72 65 61 74 65 64 3b 20 7d 0d 0a 20 20  ysCreated; }..  
7da0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7db0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7e10: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
7e20: 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b   subKeysDeleted;
7e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
7e40: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
7e50: 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 0d 0a  SubKeysDeleted..
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
7e80: 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b  et { return subK
7e90: 65 79 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20  eysDeleted; }.. 
7ea0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7f00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7f10: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
7f20: 74 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 0d  t keyValuesSet;.
7f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7f40: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b  lic static int K
7f50: 65 79 56 61 6c 75 65 73 53 65 74 0d 0a 20 20 20  eyValuesSet..   
7f60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
7f80: 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75  { return keyValu
7f90: 65 73 53 65 74 3b 20 7d 0d 0a 20 20 20 20 20 20  esSet; }..      
7fa0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20  //////////....  
8000: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
8010: 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
8020: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d 0a  ValuesDeleted;..
8030: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8040: 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65  ic static int Ke
8050: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d 0a  yValuesDeleted..
8060: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
8080: 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
8090: 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d 0d  aluesDeleted; }.
80a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
80b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
80c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
80d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
80e0: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
8120: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8130: 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d   Public Static M
8140: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
8150: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
8160: 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 47 65  c RegistryKey Ge
8170: 74 52 6f 6f 74 4b 65 79 42 79 4e 61 6d 65 28 0d  tRootKeyByName(.
8180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8190: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 0d   string keyName.
81a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81b0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
81c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
81d0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
81e0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b 65 79 4e  NullOrEmpty(keyN
81f0: 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
8200: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8210: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
8220: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63             switc
8230: 68 20 28 6b 65 79 4e 61 6d 65 2e 54 6f 55 70 70  h (keyName.ToUpp
8240: 65 72 49 6e 76 61 72 69 61 6e 74 28 29 29 0d 0a  erInvariant())..
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8270: 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 43         case "HKC
8280: 52 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  R":..           
8290: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
82a0: 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f 54  KEY_CLASSES_ROOT
82b0: 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ":..            
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
82d0: 72 6e 20 52 65 67 69 73 74 72 79 2e 43 6c 61 73  rn Registry.Clas
82e0: 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20  sesRoot;..      
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
8300: 73 65 20 22 48 4b 43 43 22 3a 0d 0a 20 20 20 20  se "HKCC":..    
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 63 61 73 65 20 22 48 4b 45 59 5f 43 55 52 52 45  case "HKEY_CURRE
8330: 4e 54 5f 43 4f 4e 46 49 47 22 3a 0d 0a 20 20 20  NT_CONFIG":..   
8340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8350: 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69       return Regi
8360: 73 74 72 79 2e 43 75 72 72 65 6e 74 43 6f 6e 66  stry.CurrentConf
8370: 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ig;..           
8380: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
8390: 4b 43 55 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  KCU":..         
83a0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
83b0: 22 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55 53  "HKEY_CURRENT_US
83c0: 45 52 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ER":..          
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
83e0: 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 43 75  turn Registry.Cu
83f0: 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20  rrentUser;..    
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8410: 63 61 73 65 20 22 48 4b 44 44 22 3a 0d 0a 20 20  case "HKDD":..  
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 20 20 63 61 73 65 20 22 48 4b 45 59 5f 44 59 4e    case "HKEY_DYN
8440: 5f 44 41 54 41 22 3a 0d 0a 20 20 20 20 20 20 20  _DATA":..       
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8460: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
8470: 2e 44 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20  .DynData;..     
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8490: 61 73 65 20 22 48 4b 4c 4d 22 3a 0d 0a 20 20 20  ase "HKLM":..   
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84b0: 20 63 61 73 65 20 22 48 4b 45 59 5f 4c 4f 43 41   case "HKEY_LOCA
84c0: 4c 5f 4d 41 43 48 49 4e 45 22 3a 0d 0a 20 20 20  L_MACHINE":..   
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84e0: 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69       return Regi
84f0: 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
8500: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
8510: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b          case "HK
8520: 50 44 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  PD":..          
8530: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
8540: 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43 45  HKEY_PERFORMANCE
8550: 5f 44 41 54 41 22 3a 0d 0a 20 20 20 20 20 20 20  _DATA":..       
8560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8570: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
8580: 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61  .PerformanceData
8590: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
85a0: 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 55         case "HKU
85b0: 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ":..            
85c0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b          case "HK
85d0: 45 59 5f 55 53 45 52 53 22 3a 0d 0a 20 20 20 20  EY_USERS":..    
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85f0: 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73      return Regis
8600: 74 72 79 2e 55 73 65 72 73 3b 0d 0a 20 20 20 20  try.Users;..    
8610: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8630: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
8640: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
86a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
86b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63  ublic static Moc
86c0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65  kRegistryKey Ope
86d0: 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
86e0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
86f0: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
8700: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8710: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8720: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
8730: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69          bool wri
8740: 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  table,..        
8750: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
8760: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
8770: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
8780: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8790: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
87a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
87b0: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
87c0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87e0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8800: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
8810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8820: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
8830: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
8840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8850: 20 20 20 77 72 69 74 61 62 6c 65 20 3f 20 54 72     writable ? Tr
8860: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
8870: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
8880: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88a0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
88b0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
88c0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
88d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
88e0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
88f0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
8900: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
8910: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
8920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8930: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
8940: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
8950: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
8960: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
8980: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
8990: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
89a0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
89b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
89c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
89d0: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
89e0: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
89f0: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
8a00: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
8a10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77       //       'w
8a20: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
8a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8a40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
8a50: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
8a60: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
8a70: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
8aa0: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
8ab0: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8ad0: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
8ae0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
8af0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
8b00: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
8b10: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
8b20: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
8b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8ba0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d   public static M
8bb0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
8bc0: 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
8be0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
8bf0: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
8c00: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8c10: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8c30: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8c40: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
8c50: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
8c60: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8c70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8c80: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
8c90: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
8cc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8cd0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
8ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cf0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
8d00: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
8d10: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
8d20: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
8d40: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
8d50: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
8d60: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d80: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
8d90: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
8da0: 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {1}", ForDisplay
8db0: 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20  (rootKey),..    
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8dd0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73      ForDisplay(s
8de0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 20 74 72 61  ubKeyName)), tra
8df0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e10: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
8e20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77      // HACK: Alw
8e60: 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20  ays open a key, 
8e70: 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  rather than crea
8e80: 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20  ting one when.. 
8e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ea0: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72     //       oper
8eb0: 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d 69  ating in 'what-i
8ec0: 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20  f' mode...      
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ef0: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
8f00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8f10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f30: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8f50: 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74   HACK: Attempt t
8f60: 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69  o open the speci
8f70: 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49  fied sub-key.  I
8f80: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8fa0: 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20      this fails, 
8fb0: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
8fc0: 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 20 6b  eturn the root k
8fd0: 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8ff0: 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e 63       itself sinc
9000: 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20  e no writes are 
9010: 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20  allowed in..    
9020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9030: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77 68      //       'wh
9040: 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79 68  at-if' mode anyh
9050: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
9070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9080: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
9090: 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72  istryKey key = r
90a0: 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65  ootKey.OpenSubKe
90b0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
90c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
90d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
90e0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
90f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
9110: 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  y : new MockRegi
9120: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9140: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
9150: 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74  y, subKeyName, t
9160: 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
9170: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9180: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91a0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
91b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91d0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
91e0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
91f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
9210: 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b  otKey.CreateSubK
9220: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
9230: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9250: 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
9260: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
92a0: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
92b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
92d0: 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d  bKeysCreated++;.
92e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
92f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9300: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9310: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9350: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9360: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
9370: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9380: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9390: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
93a0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93c0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
93d0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
93e0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
93f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9400: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9440: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
9450: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9470: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9480: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
9490: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
94a0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
94b0: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
94c0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
94d0: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94f0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
9500: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
9510: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9530: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
9540: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
9550: 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70   = {1}", ForDisp
9560: 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a 20  lay(rootKey),.. 
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9580: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
9590: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 20  y(subKeyName)), 
95a0: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
95b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
95c0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
95d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
95e0: 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c       rootKey.Del
95f0: 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  eteSubKey(subKey
9600: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
9610: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
9620: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
9630: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9640: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
96a0: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
96b0: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
96c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
96d0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
96e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9700: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
9710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9720: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
9730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
9740: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
9750: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9760: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9780: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
9790: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
97a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
97b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
97c0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
97d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
97f0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
9800: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
9810: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
9830: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
9840: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
9850: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9870: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
9880: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
9890: 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {1}", ForDisplay
98a0: 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20  (rootKey),..    
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73      ForDisplay(s
98d0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 20 74 72 61  ubKeyName)), tra
98e0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9900: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9920: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
9930: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9940: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
9950: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
9960: 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  ysDeleted++;..  
9970: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9980: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
99d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
99e0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
99f0: 6e 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61  ng[] GetSubKeyNa
9a00: 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mes(..          
9a10: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
9a20: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9a40: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
9a50: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
9a60: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
9a70: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9a80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9a90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
9aa0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ac0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ae0: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
9b10: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
9b20: 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20  iority.High,..  
9b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b40: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
9b50: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
9b60: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
9b70: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
9b90: 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70   = {0}", ForDisp
9ba0: 6c 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63 65  lay(key)), trace
9bb0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
9bd0: 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b  turn key.GetSubK
9be0: 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20  eyNames();..    
9bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9c00: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
9c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9c60: 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  ic static object
9c70: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
9c90: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
9ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9cb0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cd0: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
9ce0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
9cf0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
9d00: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
9d10: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
9d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9d30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
9d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9d50: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9d60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9d90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
9da0: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
9db0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
9dc0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
9dd0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
9de0: 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  .High,..        
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e00: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
9e10: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
9e20: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e40: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
9e50: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65  , name = {1}, de
9e60: 66 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d  faultValue = {2}
9e70: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
9e90: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
9ea0: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a  Display(name),..
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ec0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
9ed0: 61 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29  ay(defaultValue)
9ee0: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
9ef0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
9f10: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
9f20: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fa0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
9fb0: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
9fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
9fd0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
9fe0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
9ff0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
a000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a010: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d    object value,.
a020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a030: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a050: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
a070: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a090: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
a0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a0b0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0d0: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0f0: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
a100: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
a110: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
a120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a130: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
a140: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
a150: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
a160: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
a180: 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20  key = {0}, name 
a190: 3d 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b  = {1}, value = {
a1a0: 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  2}", ForDisplay(
a1b0: 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  key),..         
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
a1d0: 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c  orDisplay(name),
a1e0: 20 46 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75   ForDisplay(valu
a1f0: 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
a200: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
a210: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
a220: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a230: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65            key.Se
a240: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c  tValue(name, val
a250: 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
a260: 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65          keyValue
a270: 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  sSet++;..       
a280: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a290: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a2e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
a2f0: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65  static void Dele
a300: 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  teValue(..      
a310: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
a320: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a340: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
a360: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
a370: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
a380: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
a390: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a3a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a3c0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3e0: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a400: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
a420: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
a430: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
a440: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
a450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a460: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
a470: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
a480: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
a490: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
a4b0: 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b   = {0}, name = {
a4c0: 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  1}", ForDisplay(
a4d0: 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  key),..         
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
a4f0: 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29  orDisplay(name))
a500: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
a510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a520: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
a530: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a540: 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74         key.Delet
a550: 65 56 61 6c 75 65 28 6e 61 6d 65 29 3b 0d 0a 0d  eValue(name);...
a560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a570: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
a580: 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
a590: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a5a0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
a5b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a5c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a5d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a620: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
a630: 20 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73   StringList Clas
a640: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
a650: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
a660: 53 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73  StringList : Lis
a670: 74 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20  t<string>..     
a680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a690: 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
a6a0: 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ist()..         
a6b0: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d         : base().
a6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a760: 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73  public StringLis
a770: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74  t(IEnumerable<st
a780: 72 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e  ring> collection
a790: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a7a0: 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63     : base(collec
a7b0: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
a7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a7d0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
a7e0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
a7f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
a800: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a810: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
a820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a870: 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44   #region StringD
a880: 69 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d  ictionary Class.
a890: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
a8a0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74   sealed class St
a8b0: 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a  ringDictionary :
a8c0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
a8d0: 6e 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20  ng, string>..   
a8e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a8f0: 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
a900: 67 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20  gDictionary().. 
a910: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
a930: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
a940: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a950: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a960: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a970: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
a9c0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
a9d0: 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61   VersionList Cla
a9e0: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
a9f0: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
aa00: 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c   VersionList : L
aa10: 69 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20  ist<Version>..  
aa20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
aa30: 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
aa40: 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  ionList()..     
aa50: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
aa60: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
aa70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aa80: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
aa90: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
aaa0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
aab0: 20 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 2f 2f 2f  ////////////////
aaf0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ab00: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
ab10: 6f 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62  onList(IEnumerab
ab20: 6c 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c  le<Version> coll
ab30: 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
ab40: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
ab50: 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
ab60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
ab80: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
ab90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
aba0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
abb0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
abc0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
abd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
abf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ac10: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
ac20: 65 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d  ersionMap Class.
ac30: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
ac40: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65   sealed class Ve
ac50: 72 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69  rsionMap : Dicti
ac60: 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65  onary<string, Ve
ac70: 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20  rsionList>..    
ac80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ac90: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
aca0: 6e 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20  nMap()..        
acb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
acc0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
acd0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
ace0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
acf0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
ad00: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
ad10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ad60: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
ad70: 6e 4c 69 73 74 4d 61 70 20 43 6c 61 73 73 0d 0a  nListMap Class..
ad80: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ad90: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
ada0: 73 69 6f 6e 4c 69 73 74 4d 61 70 20 3a 20 44 69  sionListMap : Di
adb0: 63 74 69 6f 6e 61 72 79 3c 56 65 72 73 69 6f 6e  ctionary<Version
adc0: 2c 20 56 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a  , VersionList>..
add0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ade0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
adf0: 72 73 69 6f 6e 4c 69 73 74 4d 61 70 28 29 0d 0a  rsionListMap()..
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ae20: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
ae30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
ae40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ae50: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ae60: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
aeb0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
aec0: 6e 20 50 61 63 6b 61 67 65 20 43 6c 61 73 73 0d  n Package Class.
aed0: 0a 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61  .        interna
aee0: 6c 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 50  l sealed class P
aef0: 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20  ackage..        
af00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
af10: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
af20: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
af30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 50          public P
af40: 61 63 6b 61 67 65 28 29 0d 0a 20 20 20 20 20 20  ackage()..      
af50: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
af60: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
af70: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
af80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
af90: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
afa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b000: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
b010: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
b020: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b030: 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b 0d  Guid packageId;.
b040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
b050: 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67 65  lic Guid Package
b060: 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Id..            
b070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b080: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
b090: 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20  packageId; }..  
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
b0b0: 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d 20  t { packageId = 
b0c0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
b0d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b0e0: 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b130: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b140: 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64  e Guid serviceId
b150: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
b160: 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76 69  ublic Guid Servi
b170: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
b180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b190: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
b1a0: 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a  n serviceId; }..
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1c0: 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64 20  set { serviceId 
b1d0: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
b1e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b1f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b210: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
b240: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b250: 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f 75  ate Guid dataSou
b260: 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  rceId;..        
b270: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
b280: 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20 20  DataSourceId..  
b290: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b2b0: 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53 6f   { return dataSo
b2c0: 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  urceId; }..     
b2d0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
b2e0: 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20   dataSourceId = 
b2f0: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
b300: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b310: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
b360: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b370: 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76 69  e Guid dataProvi
b380: 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  derId;..        
b390: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
b3a0: 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d 0a  DataProviderId..
b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
b3d0: 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61  et { return data
b3e0: 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20  ProviderId; }.. 
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b400: 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64 65  et { dataProvide
b410: 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  rId = value; }..
b420: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b440: 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b490: 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64 6f  private Guid ado
b4a0: 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b  NetTechnologyId;
b4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
b4c0: 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65 74  blic Guid AdoNet
b4d0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20  TechnologyId..  
b4e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b500: 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65 74   { return adoNet
b510: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d  TechnologyId; }.
b520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b530: 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65 63   set { adoNetTec
b540: 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75  hnologyId = valu
b550: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
b560: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b570: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
b580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b590: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b5a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b5f0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
b600: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 43   Configuration C
b610: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
b620: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
b630: 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ss Configuration
b640: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b650: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b660: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
b670: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
b680: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68  private const ch
b690: 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27 3b  ar Switch = '-';
b6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b6b0: 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72  ivate const char
b6c0: 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f 27   AltSwitch = '/'
b6d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b6e0: 20 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 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b730: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
b740: 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61 72  ic readonly char
b750: 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20 3d  [] SwitchChars =
b760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b770: 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74 53      Switch, AltS
b780: 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  witch..         
b790: 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20     };..         
b7a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b810: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
b820: 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20  Constructors..  
b830: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b840: 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  e Configuration(
b850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b860: 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
b870: 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
b880: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 67        string log
b890: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
b8a0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b8b0: 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
b8d0: 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
b8e0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b8f0: 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
b900: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
b910: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
b920: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
b930: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b940: 20 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67      string debug
b950: 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
b960: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
b970: 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  traceFormat,..  
b980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
b990: 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
b9a0: 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  llFlags,..      
b9b0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
b9c0: 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
b9d0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
b9e0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
b9f0: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
ba00: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
ba10: 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61        bool insta
ba20: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
ba30: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74       bool noRunt
ba40: 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ba60: 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20  l noDesktop,..  
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ba80: 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20  ol noCompact,.. 
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
baa0: 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a  ool noNetFx20,..
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bac0: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d  bool noNetFx40,.
bad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bae0: 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d   bool noVs2008,.
baf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb00: 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d   bool noVs2010,.
bb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb20: 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a   bool noTrace,..
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d  bool noConsole,.
bb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb60: 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20   bool noLog,..  
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bb80: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
bba0: 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
bbb0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
bbc0: 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20  confirm..       
bbd0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
bbe0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
bbf0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
bc00: 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65 6d  assembly = assem
bc10: 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
bc20: 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46 69        this.logFi
bc30: 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c 65  leName = logFile
bc40: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
bc50: 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 72 65         this.dire
bc60: 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72  ctory = director
bc70: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
bc80: 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69 6c      this.coreFil
bc90: 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c 65  eName = coreFile
bca0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
bcb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 71         this.linq
bcc0: 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71 46  FileName = linqF
bcd0: 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
bce0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
bcf0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
bd00: 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  = designerFileNa
bd10: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
bd20: 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 46       this.debugF
bd30: 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f 72  ormat = debugFor
bd40: 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
bd50: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
bd60: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
bd70: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
bd80: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
bd90: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
bda0: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
bdb0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64            this.d
bdc0: 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 64  ebugPriority = d
bdd0: 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bdf0: 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69 74  his.tracePriorit
be00: 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69 74  y = tracePriorit
be10: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
be20: 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c      this.install
be30: 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20   = install;..   
be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
be50: 73 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  s.noRuntimeVersi
be60: 6f 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65  on = noRuntimeVe
be70: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
be80: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44          this.noD
be90: 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74  esktop = noDeskt
bea0: 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op;..           
beb0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70       this.noComp
bec0: 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b  act = noCompact;
bed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bee0: 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30    this.noNetFx20
bef0: 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20   = noNetFx20;.. 
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bf10: 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  his.noNetFx40 = 
bf20: 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
bf40: 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
bf50: 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
bf60: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
bf70: 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
bf80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf90: 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d    this.noTrace =
bfa0: 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
bfb0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
bfc0: 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f  noConsole = noCo
bfd0: 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
bfe0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c          this.noL
bff0: 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  og = noLog;..   
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
c010: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
c020: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
c030: 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
c040: 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
c060: 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
c070: 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
c080: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c090: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
c0a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
c0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
c0f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
c100: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
c110: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
c120: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
c130: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
c140: 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
c150: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
c160: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
c170: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
c180: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
c190: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
c1a0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
c1b0: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
c1c0: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c1e0: 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  ef string design
c1f0: 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
c200: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c210: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c230: 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d   (thisAssembly =
c240: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c260: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
c270: 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
c280: 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65  y = Path.GetDire
c290: 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73  ctoryName(thisAs
c2a0: 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
c2b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c2c0: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
c2d0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
c2e0: 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c300: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
c310: 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
c320: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
c330: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c350: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
c360: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  CoreFileName);..
c370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c380: 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
c390: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
c3a0: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
c3c0: 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65  staller.LinqFile
c3d0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
c3e0: 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
c3f0: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
c400: 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
c410: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
c420: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
c430: 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ler.DesignerFile
c440: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
c450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c460: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c4b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
c4c0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
c4d0: 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  kOption(..      
c4e0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
c4f0: 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20  ring arg..      
c500: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
c510: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c520: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c530: 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b  ng result = arg;
c540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c550: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
c560: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65  IsNullOrEmpty(re
c570: 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
c580: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c5a0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c5b0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
c5c0: 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69  Remove all leadi
c5d0: 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e  ng switch chars.
c5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c610: 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72  sult = result.Tr
c620: 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68  imStart(SwitchCh
c630: 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ars);....       
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c660: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f       // NOTE: Ho
c670: 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72  w many chars wer
c680: 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20  e removed?..    
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6a0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c6b0: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e          int coun
c6c0: 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d  t = arg.Length -
c6d0: 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d   result.Length;.
c6e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c6f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c710: 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72  / NOTE: Was ther
c720: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d  e at least one?.
c730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c740: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c760: 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20  (count > 0)..   
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
c7c0: 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65   Ok, replace the
c7d0: 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  ir original..   
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7f0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72       //       ar
c800: 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  gument...       
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
c840: 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20   = result;....  
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c860: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20    // NOTE: Yes, 
c890: 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68  this is a switch
c8a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c8b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
c8e0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
c8f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
c900: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c920: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
c930: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c9a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
c9b0: 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28  ool MatchOption(
c9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9d0: 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20    string arg,.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c9f0: 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20  tring option..  
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
ca10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca30: 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c  if ((arg == null
ca40: 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20  ) || (option == 
ca50: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ca70: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ca90: 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61  urn String.Compa
caa0: 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f  re(arg, 0, optio
cab0: 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  n, 0,..         
cac0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c             arg.L
cad0: 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d  ength, StringCom
cae0: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
caf0: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b  gnoreCase) == 0;
cb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
cb10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
cb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
cb70: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
cb80: 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c   bool? ParseBool
cb90: 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ean(..          
cba0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
cbb0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
cbc0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
cbd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cbe0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
cbf0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
cc00: 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
cc10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
cc30: 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ol value;....   
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72   if (bool.TryPar
cc60: 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c  se(text, out val
cc70: 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
cc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cc90: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
ccb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccc0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
cce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
ccf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cd30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd40: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
cd50: 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28  bject ParseEnum(
cd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd70: 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c    Type enumType,
cd80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd90: 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a    string text,..
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20  bool noCase..   
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cdf0: 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20  f ((enumType == 
ce00: 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79  null) || !enumTy
ce10: 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20  pe.IsEnum)..    
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce30: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
ce60: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
ce70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ce90: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ced0: 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65  urn Enum.Parse(e
cee0: 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e  numType, text, n
cef0: 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  oCase);..       
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf20: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
cf40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf50: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
cf60: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
cf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cf90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
cfa0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
cfb0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
cfc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
cfd0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cfe0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
cff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d030: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
d040: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
d050: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
d060: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d070: 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
d080: 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
d090: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
d0a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d0b0: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
d0c0: 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d0e0: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
d0f0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
d100: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d110: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
d120: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
d130: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
d140: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
d150: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
d160: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65 66            GetDef
d170: 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d190: 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f 72      ref director
d1a0: 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e  y, ref coreFileN
d1b0: 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c  ame, ref linqFil
d1c0: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
d1e0: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
d1f0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
d210: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74   Configuration(t
d220: 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
d230: 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  l, directory,.. 
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d250: 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c     coreFileName,
d260: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64   linqFileName, d
d270: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
d280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d290: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d2a0: 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
d2b0: 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
d2c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d2d0: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
d2e0: 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ags.Default, Tra
d2f0: 63 65 50 72 69 6f 72 69 74 79 2e 44 65 62 75 67  cePriority.Debug
d300: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d310: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
d320: 72 69 74 79 2e 54 72 61 63 65 2c 20 74 72 75 65  rity.Trace, true
d330: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
d340: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d360: 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c     false, false,
d370: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
d380: 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 74 72 75  alse, false, tru
d390: 65 2c 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20  e, true,..      
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
d3b0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
d3c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d3d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d420: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
d430: 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72  atic bool FromAr
d440: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
d450: 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
d460: 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
d470: 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
d480: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d490: 20 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61     ref Configura
d4a0: 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
d4b0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
d4c0: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
d4d0: 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
d4e0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
d4f0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d500: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d530: 20 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d       if (args ==
d540: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d560: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
d590: 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d5c0: 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72  ation = Configur
d5d0: 61 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61  ation.CreateDefa
d5e0: 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ult();....      
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
d600: 74 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e  t length = args.
d610: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
d620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
d630: 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
d640: 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74  0; index < lengt
d650: 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  h; index++)..   
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d680: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
d690: 6e 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e  ng arg = args[in
d6a0: 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
d6d0: 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d  llOrEmpty(arg)).
d6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
d700: 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d720: 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20    string newArg 
d730: 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20  = arg;....      
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 20 20 69 66 20 28 43 68 65 63 6b 4f 70 74 69 6f    if (CheckOptio
d760: 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a  n(ref newArg))..
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7c0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
d7d0: 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65  All the supporte
d7e0: 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
d7f0: 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20  ptions must..   
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
d820: 20 20 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20    have a value; 
d830: 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d  therefore, attem
d840: 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20  pt to advance.. 
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
d870: 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20      to it now.  
d880: 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61  If we fail, we a
d890: 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  re done...      
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a        index++;..
d8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d900: 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74   (index >= lengt
d910: 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h)..            
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d950: 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
d960: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
d970: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
d9a0: 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
d9b0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
d9f0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
da00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61       "Missing va
da30: 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20  lue for option: 
da40: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
da70: 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61  splay(arg)), tra
da80: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
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 20 20 20 20 20 20 20 20 20                  
dab0: 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dae0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
daf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db70: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
db80: 47 72 61 62 20 74 68 65 20 74 65 78 74 75 61 6c  Grab the textual
db90: 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
dba0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20  ommand line..   
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbc0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
dbd0: 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20    option...     
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
dc20: 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d  xt = args[index]
dc30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65   // NOTE: Figure
dc80: 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61   out which comma
dc90: 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74  nd line option t
dca0: 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20  his is..        
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61      //       (ba
dcd0: 73 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c  sed on a partial
dce0: 20 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64   name match) and
dcf0: 20 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20   then try..     
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 2f 2f 20 20 20 20 20 20 20         //       
dd20: 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65  to interpret the
dd30: 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61   textual value a
dd40: 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20  s the correct.. 
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
dd70: 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20      type...     
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 2f 2f 0d 0a 20 20 20 20 20         //..     
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 20 20 20 20 69 66 20 28 4d 61 74 63 68         if (Match
ddc0: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
ddd0: 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20  strict"))..     
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
de20: 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
de30: 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
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 20 20 20 20 20 20 20 20 69                 i
de60: 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
de70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
dec0: 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
ded0: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
df10: 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
df20: 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
df60: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
dfa0: 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
dfb0: 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
dfc0: 20 20 20 20 20 20 20 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 20                  
dfe0: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
dff0: 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
e000: 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
e040: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e060: 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
e070: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
e0a0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
e150: 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  low the command 
e160: 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74  line arguments t
e170: 6f 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20  o override..    
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 20 20 20 2f 2f 20 20              //  
e1a0: 20 20 20 20 20 74 68 65 20 22 73 74 72 69 63 74       the "strict
e1b0: 6e 65 73 73 22 20 73 65 74 74 69 6e 67 20 70 72  ness" setting pr
e1c0: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
e1d0: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 63             stric
e220: 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  t = (bool)value;
e230: 0d 0a 20 20 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 20 20 7d 0d                }.
e250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
e270: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
e280: 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69  n(newArg, "logFi
e290: 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
e2e0: 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
e2f0: 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e330: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
e340: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
e350: 41 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22  Arg, "directory"
e360: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3a0: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
e3b0: 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78  .directory = tex
e3c0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
e410: 45 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73  E: *SPECIAL* Mus
e420: 74 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69  t refresh the fi
e430: 6c 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20  le names..      
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
e460: 20 20 20 68 65 72 65 20 62 65 63 61 75 73 65 20     here because 
e470: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
e480: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
e4b0: 20 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d     has changed..
e4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 20 2f 2f 0d 0a 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: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
e510: 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
e520: 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
e530: 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
e560: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
e570: 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65  pty(coreFileName
e580: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
e5b0: 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
e5c0: 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65  ileName(coreFile
e5d0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
e600: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
e610: 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
e620: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
e650: 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
e660: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  CoreFileName;...
e670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
e6a0: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
e6b0: 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6e0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
e6f0: 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69  irectory, coreFi
e700: 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e720: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
e730: 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
e740: 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
e750: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
e760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e780: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
e790: 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46  ullOrEmpty(linqF
e7a0: 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
e7d0: 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  inqFileName = Pa
e7e0: 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c  th.GetFileName(l
e7f0: 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
e800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e820: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
e830: 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
e840: 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
e870: 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
e880: 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
e890: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8b0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e8c0: 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61  ation.linqFileNa
e8d0: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
e8e0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e900: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e910: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
e920: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d   linqFileName);.
e930: 0a 0d 0a 20 20 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 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
e960: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  erFileName = con
e970: 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67  figuration.desig
e980: 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
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 20 20 20 20 20 20 20 20 20                  
e9b0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
e9c0: 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
e9d0: 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
ea10: 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
ea20: 65 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69  eName(designerFi
ea30: 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ea60: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
ea70: 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c  mpty(designerFil
ea80: 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
eab0: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
eac0: 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e  Installer.Design
ead0: 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
eb00: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
eb10: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
eb20: 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
eb30: 20 20 20 20 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
eb60: 2e 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69  .directory, desi
eb70: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebb0: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
ebc0: 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
ebd0: 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69 6c  newArg, "coreFil
ebe0: 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
ec30: 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
ec40: 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
ec90: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
eca0: 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61  Arg, "linqFileNa
ecb0: 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
ed00: 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
ed10: 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed50: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
ed60: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
ed70: 2c 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  , "designerFileN
ed80: 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ame"))..        
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
edd0: 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c  tion.designerFil
ede0: 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
ee30: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
ee40: 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72  ewArg, "debugFor
ee50: 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  mat"))..        
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee70: 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
eea0: 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74  tion.debugFormat
eeb0: 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
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 20 20 20 54 72 61 63 65 4f            TraceO
eee0: 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d  ps.DebugFormat =
eef0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
ef00: 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef40: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
ef50: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
ef60: 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72 6d 61  Arg, "traceForma
ef70: 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
efc0: 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d  on.traceFormat =
efd0: 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eff0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
f000: 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63  .TraceFormat = c
f010: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
f020: 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f060: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
f070: 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
f080: 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74  g, "debugPriorit
f090: 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y"))..          
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0d0: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
f0e0: 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f110: 20 20 20 20 74 79 70 65 6f 66 28 54 72 61 63 65      typeof(Trace
f120: 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78 74 2c  Priority), text,
f130: 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   true);....     
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
f160: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f190: 0d 0a 20 20 20 20 20 20 20 20 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 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
f1c0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
f1d0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
f1e0: 20 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 20 20 20 20 20 20 54                 T
f200: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
f210: 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
f220: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
f250: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
f260: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f290: 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
f2a0: 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
f2b0: 20 20 20 20 20 20 20 20 20 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 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
f2e0: 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
f2f0: 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
f330: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f350: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
f360: 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f390: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
f3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
f3d0: 20 20 20 20 20 20 20 20 20 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: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f410: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
f420: 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  on.debugPriority
f430: 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74   = (TracePriorit
f440: 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  y)value;..      
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f460: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
f470: 70 73 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79  ps.DebugPriority
f480: 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
f490: 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d  .debugPriority;.
f4a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
f4e0: 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
f4f0: 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 50  (newArg, "traceP
f500: 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20 20  riority"))..    
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
f550: 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
f560: 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
f590: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
f5a0: 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
f5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
f5e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f600: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f620: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
f630: 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
f640: 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
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 20 20 20 20                  
f670: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
f680: 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
f690: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6c0: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
f6d0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
f6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
f710: 69 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31  id {0} value: {1
f720: 7d 22 2c 0d 0a 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 20 20 20                  
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
f750: 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
f760: 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
f770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f790: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
f7a0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 20 20                  
f7d0: 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
f810: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f830: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
f840: 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f860: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f870: 20 20 20 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 63 6f 6e 66 69             confi
f890: 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
f8a0: 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50  iority = (TraceP
f8b0: 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a  riority)value;..
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8e0: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72  TraceOps.TracePr
f8f0: 69 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75  iority = configu
f900: 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
f910: 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f930: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
f960: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
f970: 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20  install"))..    
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f990: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9b0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
f9c0: 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
f9d0: 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa00: 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
fa10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
fa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa50: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
fa60: 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
fa70: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faa0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
fab0: 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
fac0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
fad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faf0: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
fb00: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
fb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb30: 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
fb40: 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
fb50: 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
fb90: 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
fba0: 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
fbe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
fc10: 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
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 20 20 20 20 72 65 74               ret
fc40: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
fc50: 20 20 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
fca0: 0d 0a 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 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
fcd0: 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29  install = (bool)
fce0: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
fd30: 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
fd40: 22 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29  "installFlags"))
fd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
fd70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd90: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
fda0: 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20  ParseEnum(..    
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c  typeof(InstallFl
fde0: 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ags), text, true
fdf0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe10: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
fe20: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
fe80: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
fe90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 54 72 61 63 65 50            TraceP
fec0: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
fed0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
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 20 20 20 20 20                  
ff00: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
ff10: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ff20: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
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 20 22                 "
ff50: 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20  Invalid install 
ff60: 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d  flags value: {0}
ff70: 22 2c 0d 0a 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 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
ffa0: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74  isplay(text)), t
ffb0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
ffc0: 0d 0a 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 20 20 20                  
ffe0: 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
fff0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72             retur
10020 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10050 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
100b0 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e  stallFlags = (In
100c0 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65  stallFlags)value
100d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
100f0 0d 0a 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 65 6c                el
10110 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
10120 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75  on(newArg, "noRu
10130 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d  ntimeVersion")).
10140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10180 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
10190 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
101a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101c0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
101d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
10230 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
10240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10260 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
10270 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
10280 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
102c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
102d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 20 20 20 20 20 22 49                "I
10300 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
10310 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
10320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
10350 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
10360 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
103a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
103d0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10410 0a 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 63 6f 6e 74 69 6e 75 65 3b         continue;
10440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10480 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
10490 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
104a0 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61  rsion = (bool)va
104b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104f0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
10500 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77  ption(newArg, "w
10510 68 61 74 49 66 22 29 29 0d 0a 20 20 20 20 20 20  hatIf"))..      
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
10560 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
10570 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
105a0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
105b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 7b 0d 0a 20 20 20 20 20 20 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 20 20 65 72 72 6f 72 20 3d           error =
10600 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
10610 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
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 20 20 20 20 20 20 20 20                  
10640 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
10650 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
10660 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
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 20 20 20 20 20                  
10690 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
106a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
106e0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
106f0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 20 20 20 20 20 20                  
10720 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
10730 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
10740 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10770 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
10780 0d 0a 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 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
107b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
107e0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10830 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10860 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
10870 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  atIf = (bool)val
10880 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
108d0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65  tion(newArg, "ve
108e0 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20  rbose"))..      
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10900 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
10930 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
10940 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
10950 20 20 20 20 20 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 20 69 66                if
10970 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
10980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
109b0 20 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 65 72 72 6f 72 20 3d           error =
109d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
109e0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a10 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
10a20 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
10a30 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
10a40 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
10a70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 22 49 6e 76 61 6c 69 64 20         "Invalid 
10ab0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
10ac0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
10b00 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
10b10 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 20 20 20 20 20 20 74                 t
10b40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
10b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
10b80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ba0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10bb0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10bc0 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65  configuration.ve
10c40 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61  rbose = (bool)va
10c50 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
10ca0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
10cb0 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20  onfirm"))..     
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10ce0 20 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 20 62 6f 6f 6c 3f 20            bool? 
10d00 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
10d10 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10d40 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
10d50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
10da0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
10db0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
10df0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
10e00 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
10e40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 22 49 6e 76 61 6c 69 64          "Invalid
10e80 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
10e90 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
10ea0 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
10ed0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
10ee0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
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 20 20                  
10f10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
10f20 0a 0d 0a 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 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
10f50 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10f80 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
11010 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76  onfirm = (bool)v
11020 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
11070 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
11080 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20  noDesktop"))..  
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
110d0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
110e0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
110f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11110 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
11120 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11170 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
11180 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
111c0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
111d0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11200 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11210 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11220 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 22 49 6e 76 61             "Inva
11250 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
11260 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
112a0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
112b0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
112f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
11320 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11350 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
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 20 20 20 20 20 20 20 20                  
11380 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
113b0 0d 0a 0d 0a 20 20 20 20 20 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 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
113e0 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62  n.noDesktop = (b
113f0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 20 20 20 20 7d 0d 0a 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 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
11440 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
11450 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29  rg, "noCompact")
11460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114a0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
114b0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
114c0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
114f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11540 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
11550 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
11560 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
11590 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
115a0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
115b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
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 74 72 61 63 65 43 61           traceCa
115e0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
115f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
11630 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
11640 2c 0d 0a 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 20 20 20                  
11660 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
11670 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
11680 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 74 72 61 63 65 43 61 74          traceCat
116c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
116f0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
11730 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11750 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
11760 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
117b0 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74  ration.noCompact
117c0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
117d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11800 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
11810 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
11820 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
11830 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x20"))..        
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11870 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
11880 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
11890 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
118a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
118c0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
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 20 20 20 20 20 20 20 20                  
118f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
11920 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
11930 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
11970 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
11980 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
119b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
119c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20                  
119f0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
11a00 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
11a10 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
11a50 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
11a60 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
11a90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
11ad0 0a 20 20 20 20 20 20 20 20 20 20 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 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11b00 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11b30 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11b80 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
11b90 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx20 = (bool)va
11ba0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
11bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bc0 20 20 7d 0d 0a 20 20 20 20 20 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
11bf0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
11c00 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20  oNetFx40"))..   
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 7b 0d 0a 20 20 20 20           {..    
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
11c50 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
11c60 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
11c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c90 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
11ca0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
11cf0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
11d00 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d30 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
11d40 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
11d50 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
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 20                  
11d80 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
11d90 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
11da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
11dd0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
11de0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
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 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
11e20 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
11e30 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
11e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e90 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
11ea0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 20 20 20 20 20 20 72 65                re
11ed0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
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 20 20 20 20 20 20 7d 0d                }.
11f30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
11f60 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f  .noNetFx40 = (bo
11f70 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
11fc0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
11fd0 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d  g, "noVs2008")).
11fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
12030 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12040 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
12070 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
120d0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
120e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
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 54 72 61 63 65 50 72           TracePr
12110 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
12120 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12160 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12170 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 20 20 20 20 20 22 49                "I
121a0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
121b0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
121c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
121f0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
12200 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12240 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12270 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
122b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
122c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122d0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
122e0 0d 0a 20 20 20 20 20 20 20 20 20 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 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12320 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12330 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20  tion.noVs2008 = 
12340 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12360 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12380 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
12390 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
123a0 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31 30 22  wArg, "noVs2010"
123b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
12400 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
12410 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12430 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
12440 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
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 7b 0d 0a 20              {.. 
12470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12490 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
124a0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
124b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
124e0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
124f0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
12500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
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 20 74 72 61 63 65 43            traceC
12530 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
12540 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
12550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
12580 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
12590 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125b0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
125c0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
125d0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
125e0 0a 20 20 20 20 20 20 20 20 20 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 20 20 20 74 72 61 63 65 43 61           traceCa
12610 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12640 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
12650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
12680 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
126b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126f0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12700 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30  uration.noVs2010
12710 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
12720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12760 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12770 28 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63  (newArg, "noTrac
12780 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
127b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127c0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
127d0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
127e0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
127f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12800 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
12810 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12840 0a 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 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
12870 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
12880 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
128b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
128c0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
128d0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12900 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
12910 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
12950 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
12960 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
12990 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
129a0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
129b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
129e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
12a50 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
12a80 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
12ad0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63  iguration.noTrac
12ae0 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
12af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12b30 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12b40 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e  n(newArg, "noCon
12b50 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20  sole"))..       
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
12ba0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
12bb0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12be0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
12c40 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
12c50 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
12c90 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
12ca0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12cd0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12ce0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12d20 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
12d30 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d60 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
12d70 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12d80 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12db0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
12dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
12df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12e20 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12e50 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12ea0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
12eb0 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76  onsole = (bool)v
12ec0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12f10 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12f20 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20  noLog"))..      
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
12f70 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
12f80 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 69 66                if
12fb0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
12fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13000 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13010 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
13020 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
13030 20 20 20 20 20 20 20 20 20 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 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
13060 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
13070 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
130b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130e0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
130f0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
13100 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
13110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
13140 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
13150 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13180 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
131c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
131f0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13280 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  Log = (bool)valu
13290 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
132d0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13310 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
13320 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
13330 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
13360 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
13370 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
133b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
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 20 20 20 20 20 20                  
133e0 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74        "Unsupport
133f0 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
13400 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20  option: {0}",.. 
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
13440 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  g)), traceCatego
13450 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
13480 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
134b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
134f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13500 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13550 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13560 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13580 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
13590 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
135a0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
135d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
135e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
13610 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
13620 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a  d line argument:
13630 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13660 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
13670 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
136a0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
136d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13720 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
13730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
13750 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
13760 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13770 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13780 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
13790 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
137a0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
137b0 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
137e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
137f0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
13800 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13810 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13820 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69   "Failed to modi
13830 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  fy configuration
13840 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
13850 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13860 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
13870 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
13880 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13890 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
138a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
138e0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
138f0 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
13900 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ess(..          
13910 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
13920 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs,..          
13930 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
13940 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
13950 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
13960 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
13970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13980 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
13990 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
139a0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
139b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
139c0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
139d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
13a00 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
13a40 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f  or = "Invalid co
13a50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
13a80 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
13a90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
13ac0 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72  embly = configur
13ad0 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d  ation.assembly;.
13ae0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13af0 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
13b00 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly == null)..  
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
13b40 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73  or = "Invalid as
13b50 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20  sembly.";..     
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
13b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13bb0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
13bc0 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20 20  n.noTrace)..    
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13bf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
13c00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13c10 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20  Log &&..        
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c      String.IsNul
13c40 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75  lOrEmpty(configu
13c50 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
13c60 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13ca0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
13cb0 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46  leName = GetLogF
13cc0 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20  ileName();..    
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
13d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
13d60 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
13d70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13d80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
13dd0 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f  E: In verbose mo
13de0 64 65 2c 20 41 4c 4c 20 6f 75 74 70 75 74 20 77  de, ALL output w
13df0 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 73      //       dis
13e20 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
13e30 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73 65  nsole; otherwise
13e40 2c 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  , only..        
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74      //       out
13e70 70 75 74 73 20 74 68 61 74 20 61 72 65 20 61 63  puts that are ac
13e80 74 75 61 6c 6c 79 20 6c 6f 67 67 65 64 20 28 69  tually logged (i
13e90 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .e...           
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 20 2f 2f 20 20 20 20 20 20 20 74 68 6f 73 65 20   //       those 
13ec0 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 70 72  that meet the pr
13ed0 69 6f 72 69 74 79 20 72 65 71 75 69 72 65 6d 65  iority requireme
13ee0 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nts)..          
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 2f 2f 20 20 20 20 20 20 20 77 69 6c 6c 20    //       will 
13f10 62 65 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20  be displayed to 
13f20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20  the console...  
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 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 20 20 20 20 20 69 66 20 28 21 63            if (!c
13f70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72  onfiguration.ver
13f80 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
13fd0 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f  eners.Add(new Co
13fe0 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e  nsoleTraceListen
13ff0 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  er());..        
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 20 20 20 20 7d 0d 0a 23 69 66 20 44 45 42 55 47      }..#if DEBUG
14020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14040 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
14090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140a0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
140b0 46 6f 72 20 61 20 62 75 69 6c 64 20 77 69 74 68  For a build with
140c0 20 22 44 45 42 55 47 22 20 64 65 66 69 6e 65 64   "DEBUG" defined
140d0 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20  , we..          
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
14100 61 6e 20 73 69 6d 70 6c 79 20 75 73 65 20 74 68  an simply use th
14110 65 20 44 65 62 75 67 20 63 6c 61 73 73 3b 0d 0a  e Debug class;..
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77 69  //       otherwi
14150 73 65 2c 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20  se, the console 
14160 77 69 6c 6c 20 62 65 20 75 73 65 64 0d 0a 20 20  will be used..  
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14190 20 20 20 20 20 20 20 64 69 72 65 63 74 6c 79 20         directly 
141a0 28 62 79 20 44 65 62 75 67 43 6f 72 65 29 2e 0d  (by DebugCore)..
141b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 20 44 65 62 75 67 2e 4c 69 73 74 65       Debug.Liste
14200 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
14210 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
14220 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20     }..#endif..  
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
14290 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a  ation.noLog &&..
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 20 20 20 20 20 20 20 21 53 74 72              !Str
142c0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
142d0 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
142e0 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
14330 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 54 65  eners.Add(new Te
14340 78 74 57 72 69 74 65 72 54 72 61 63 65 4c 69 73  xtWriterTraceLis
14350 74 65 6e 65 72 28 0d 0a 20 20 20 20 20 20 20 20  tener(..        
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14380 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
14390 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e));..          
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
143b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
143c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
143e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
143f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44        // NOTE: D
14400 75 6d 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ump the configur
14410 61 74 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73  ation now in cas
14420 65 20 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20  e we need to..  
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14440 20 20 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62    //       troub
14450 6c 65 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75  leshoot any issu
14460 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es...           
14470 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
144a0 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79  on.debugPriority
144b0 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   <= TracePriorit
144c0 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20  y.Medium)..     
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
144f0 2e 44 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62  .Dump(debugCallb
14500 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ack);....       
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14520 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74  (configuration.t
14530 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20  racePriority <= 
14540 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
14550 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  dium)..         
14560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14570 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d  onfiguration.Dum
14580 70 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29  p(traceCallback)
14590 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
145a0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77   // NOTE: Show w
145d0 68 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e  here we are runn
145e0 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77  ing from and how
145f0 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20   we were..      
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
14610 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d         invoked..
14620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14630 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
14650 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61  ing location = a
14660 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
14670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14680 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
14690 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
146a0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
146b0 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
146d0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
146e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
146f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65 78       "Running ex
14720 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30 7d  ecutable is: {0}
14730 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f  ", ForDisplay(lo
14740 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  cation)),..     
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14770 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14780 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
14790 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
147a0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
147b0 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
147e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
147f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 22 4f 72 69 67 69 6e 61 6c 20        "Original 
14820 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a  command line is:
14830 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d  Environment.Comm
14860 61 6e 64 4c 69 6e 65 29 2c 20 74 72 61 63 65 43  andLine), traceC
14870 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
148a0 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20 20 20  ion.whatIf)..   
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
148d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
14900 20 49 66 20 74 68 65 20 64 65 62 75 67 67 65 72   If the debugger
14910 20 69 73 20 61 74 74 61 63 68 65 64 20 61 6e 64   is attached and
14920 20 57 68 61 74 2d 49 66 20 6d 6f 64 65 0d 0a 20   What-If mode.. 
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 2f 2f 20 20 20 20 20 20 20         //       
14950 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65  is [now] disable
14960 64 2c 20 69 73 73 75 65 20 61 20 77 61 72 6e 69  d, issue a warni
14970 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
14980 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
14990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
149a0 20 20 20 20 20 20 20 20 20 69 66 20 28 44 65 62           if (Deb
149b0 75 67 67 65 72 2e 49 73 41 74 74 61 63 68 65 64  ugger.IsAttached
149c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
149e0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
149f0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
14a00 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
14a30 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
14a40 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
14a50 20 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 22 46 6f 72              "For
14a70 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
14a80 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
14a90 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
14ac0 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
14ad0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14af0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14b00 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
14b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14b20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b40 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
14b50 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
14b60 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20  ority.Higher,.. 
14b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b80 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
14b90 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
14ba0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c        "No actual
14bd0 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65   changes will be
14be0 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20 22 20   made to this " 
14bf0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14c10 73 79 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c  system because \
14c20 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
14c30 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20  is enabled.",.. 
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14c60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14c90 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
14cc0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61   command line ha
14cd0 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61  s not been manua
14ce0 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
14cf0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
14d00 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65    confirmed (i.e
14d10 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c 69 63  . via the explic
14d20 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  it command line.
14d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
14d50 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70  tion), then stop
14d60 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e   processing now.
14d70 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20    We enforce..  
14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d90 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20    //       this 
14da0 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d  rule so that sim
14db0 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b  ply double-click
14dc0 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
14de0 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65        executable
14df0 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74   will not result
14e00 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20   in any changes 
14e10 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  being..         
14e20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
14e30 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20      made to the 
14e40 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20  system...       
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
14e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e70 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
14e80 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29  uration.confirm)
14e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ea0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ec0 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74   error = "Cannot
14ed0 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c   continue, the \
14ee0 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f  "confirm\" optio
14ef0 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  n is " +..      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c        "not enabl
14f20 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed.";....       
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
14f80 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
14f90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
14fb0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
14fc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14fd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14fe0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
14ff0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
15000 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
15010 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
15040 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65  traceCallback, e
15050 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
15060 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15070 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
15080 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63   "Failed to proc
15090 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ess configuratio
150a0 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
150b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
150c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
150d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
150e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
150f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15140 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
15150 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65   static bool Che
15160 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  ckRuntimeVersion
15170 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15180 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
15190 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
151a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
151b0 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
151d0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
151e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
151f0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
15200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15210 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
15220 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15240 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
15250 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15280 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
15290 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
152a0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
152d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
152e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
15310 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
15320 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e 20 6f  : What version o
15330 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20 77 61  f the runtime wa
15340 73 20 74 68 65 20 63 6f 72 65 20 28 70 72 69 6d  s the core (prim
15350 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ary)..          
15360 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
15370 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70     assembly comp
15380 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28 65 2e  iled against (e.
15390 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37 22 20  g. "v2.0.50727" 
153a0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
153b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
153c0 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d   "v4.0.30319")..
153d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
153e0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
15400 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52 75 6e  ing coreImageRun
15410 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 47 65  timeVersion = Ge
15420 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  tImageRuntimeVer
15430 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
15440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15450 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72  onfiguration.cor
15460 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
15490 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
154a0 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20 74 68 65  TE: We allow the
154b0 20 61 63 74 75 61 6c 20 69 6d 61 67 65 20 72 75   actual image ru
154c0 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e 67 20 74  ntime checking t
154d0 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  o be..          
154e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
154f0 20 20 20 62 79 70 61 73 73 65 64 20 76 69 61 20     bypassed via 
15500 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56  the "-noRuntimeV
15510 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20  ersion" command 
15520 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
15530 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
15540 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20     option.  The 
15550 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
15560 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64 65 64 20  ion is intended 
15570 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  for..           
15580 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
15590 20 20 65 78 70 65 72 74 20 75 73 65 20 6f 6e 6c    expert use onl
155a0 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y...            
155b0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
155e0 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n.noRuntimeVersi
155f0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
15600 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
15630 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
15640 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
15650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
15670 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
15680 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
15690 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
156a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156b0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
156c0 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
156d0 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
156e0 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20  work {0}; " +.. 
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 20 20 20 20 20 20 20 20 20 20 20 22 68 6f 77 65             "howe
15710 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f  ver, installatio
15720 6e 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 62  n restrictions b
15730 61 73 65 64 20 6f 6e 20 74 68 69 73 20 22 20 2b  ased on this " +
15740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
15760 61 63 74 20 68 61 76 65 20 62 65 65 6e 20 64 69  act have been di
15770 73 61 62 6c 65 64 20 76 69 61 20 74 68 65 20 63  sabled via the c
15780 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a  ommand line.",..
15790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
157b0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
157c0 69 6f 6e 29 2c 20 74 72 61 63 65 43 61 74 65 67  ion), traceCateg
157d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73      // TODO: Res
15850 74 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67  trict the config
15860 75 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e  uration based on
15870 20 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20   which image..  
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69    //       runti
158a0 6d 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69  me versions (whi
158b0 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ch more-or-less 
158c0 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20  correspond..    
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e 45 54  //       to .NET
158f0 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   Framework versi
15900 6f 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72 74  ons) are support
15910 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
15920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15930 2f 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73  /       versions
15940 20 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64 69   of Visual Studi
15950 6f 20 74 68 61 74 20 61 72 65 20 69 6e 73 74 61  o that are insta
15960 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  lled...         
15970 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15990 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
159a0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
159b0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
159c0 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ion))..         
159d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
15a00 6e 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65  nvalid core file
15a10 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76   image runtime v
15a20 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
15a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15a70 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15a80 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61   if (String.Equa
15a90 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ls(..           
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ab0 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
15ac0 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49  eVersion, CLRv2I
15ad0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
15ae0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
15b10 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
15b20 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
15b30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
15b80 65 20 43 4c 52 20 76 32 2e 30 20 72 75 6e 74 69  e CLR v2.0 runti
15b90 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
15ba0 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
15bd0 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
15be0 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
15bf0 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
15c20 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
15c30 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30  for the CLR v4.0
15c40 2e 20 20 49 74 20 69 73 0d 0a 20 20 20 20 20 20  .  It is..      
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 2f 2f 20 20 20 20 20 20 20 75 6e 63 65 72    //       uncer
15c70 74 61 69 6e 20 69 66 20 74 68 69 73 20 69 73 20  tain if this is 
15c80 61 63 74 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c  actually a probl
15c90 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  em in..         
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15cb0 2f 20 20 20 20 20 20 20 70 72 61 63 74 69 63 65  /       practice
15cc0 20 61 73 20 74 68 65 20 43 4c 52 20 76 34 2e 30   as the CLR v4.0
15cd0 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73   can load and us
15ce0 65 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  e an..          
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15d00 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly 
15d10 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68  compiled with th
15d20 65 20 43 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65  e CLR v2.0; howe
15d30 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ver,..          
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15d50 20 20 20 20 20 20 20 73 69 6e 63 65 20 74 68 69         since thi
15d60 73 20 70 72 6f 6a 65 63 74 20 6f 66 66 65 72 73  s project offers
15d70 20 62 6f 74 68 20 63 6f 6e 66 69 67 75 72 61 74   both configurat
15d80 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ions,..         
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15da0 2f 20 20 20 20 20 20 20 77 65 20 63 75 72 72 65  /       we curre
15db0 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77 20 74 68  ntly disallow th
15dc0 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20  is mismatch...  
15dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15de0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15e10 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74 72 75 65  noNetFx40 = true
15e20 3b 0d 0a 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 63 6f 6e 66 69             confi
15e40 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
15e50 30 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  0 = true;....   
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
15e80 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
15e90 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
15ea0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
15ec0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
15ed0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
15ee0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
15f10 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
15f20 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
15f30 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
15f60 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20 46 72  port for .NET Fr
15f70 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e  amework {1} is n
15f80 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a  ow disabled.",..
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 43 4c 52 76              CLRv
15fb0 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  2ImageRuntimeVer
15fc0 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65  sion, CLRv4Image
15fd0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
15fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16000 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16030 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
16040 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73  f (String.Equals
16050 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16070 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
16080 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61  ersion, CLRv4Ima
16090 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
160a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
160c0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
160d0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
160e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
160f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16130 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20  / NOTE: For the 
16140 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69 6d 65  CLR v4.0 runtime
16150 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64  , make sure we d
16160 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  isable..        
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74  //       any att
16190 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66  empt to use it f
161a0 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72  or things that r
161b0 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20  equire..        
161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161d0 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65  //       an asse
161e0 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f  mbly compiled fo
161f0 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d  r the CLR v2.0..
16200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16210 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16240 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 74  on.noNetFx20 = t
16250 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16270 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
16280 32 30 30 38 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  2008 = true;....
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
162b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
162c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
162d0 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ium,..          
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162f0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
16300 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
16310 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16330 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
16340 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65  embly is compile
16350 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  d for the .NET F
16360 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20  ramework {0}, " 
16370 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16390 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54  support for .NET
163a0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
163b0 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
163c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
163e0 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49  orDisplay(CLRv4I
163f0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
16400 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
16430 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
16440 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
16470 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
16480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
164b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
164e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 20 20 20 20 20 20 22 75 6e 73 75             "unsu
16510 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c  pported core fil
16520 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime 
16530 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20  version " +..   
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d           "{0}, m
16560 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32  ust be {1} or {2
16570 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
165a0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
165b0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
165e0 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
165f0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16620 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69  (CLRv4ImageRunti
16630 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a  meVersion));....
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
16660 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
16670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
166a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
166c0 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
166d0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
166e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
16710 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
16720 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
16750 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
16760 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
16770 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
167a0 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72  to check image r
167b0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22  untime version."
167c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
167d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
167e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
167f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
16800 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16810 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
16820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
16830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
16870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
16880 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
16890 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
168a0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48     public bool H
168b0 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
168c0 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
168d0 6c 46 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c  lFlags hasFlags,
168e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
168f0 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20    bool all..    
16900 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
16910 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16930 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   (all)..        
16940 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
16950 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67  rn ((installFlag
16960 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d  s & hasFlags) ==
16970 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20   hasFlags);..   
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
16990 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
169a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
169b0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68  installFlags & h
169c0 61 73 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74  asFlags) != Inst
169d0 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d  allFlags.None);.
169e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
169f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
16a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16a50 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 75 6d   public void Dum
16a60 70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p(..            
16a70 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
16a80 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 0d  k traceCallback.
16a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16aa0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
16ab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16ac0 20 20 20 69 66 20 28 74 72 61 63 65 43 61 6c 6c     if (traceCall
16ad0 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  back != null).. 
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16b00 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16b10 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
16b20 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
16b30 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
16b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16b50 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69  Assembly", ForDi
16b60 73 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29 29  splay(assembly))
16b70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16b80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16b90 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bb0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
16bc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
16bd0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
16be0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16bf0 20 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67 46             "LogF
16c00 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
16c10 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65  play(logFileName
16c20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16c30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16c40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16c70 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
16c80 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
16c90 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 69               "Di
16cb0 72 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73  rectory", ForDis
16cc0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
16cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16ce0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16cf0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
16d20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
16d30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
16d40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16d50 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 72 65             "Core
16d60 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
16d70 73 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61  splay(coreFileNa
16d80 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16da0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16dc0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16dd0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
16de0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
16df0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16e10 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46  LinqFileName", F
16e20 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69  orDisplay(linqFi
16e30 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
16e60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16e70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
16e80 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
16e90 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
16ea0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65     "DesignerFile
16ed0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
16ee0 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  y(designerFileNa
16ef0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16f10 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f30 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
16f40 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
16f50 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
16f60 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16f80 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f  DebugFormat", Fo
16f90 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f  rDisplay(debugFo
16fa0 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  rmat)),..       
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16fe0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16ff0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
17000 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
17010 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20   "TraceFormat", 
17040 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65  ForDisplay(trace
17050 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17080 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17090 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
170a0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
170b0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
170c0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73     "InstallFlags
170f0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e  ", ForDisplay(in
17100 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20  stallFlags)),.. 
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17130 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17150 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
17160 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
17170 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17190 20 20 20 20 20 20 20 22 44 65 62 75 67 50 72 69         "DebugPri
171a0 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c  ority", ForDispl
171b0 61 79 28 64 65 62 75 67 50 72 69 6f 72 69 74 79  ay(debugPriority
171c0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
171e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17210 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
17220 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
17230 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
17250 61 63 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f  acePriority", Fo
17260 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 50 72  rDisplay(tracePr
17270 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20  iority)),..     
17280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17290 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
172a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
172b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
172c0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
172d0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
172e0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f     "Install", Fo
17310 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c  rDisplay(install
17320 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17340 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17370 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
17380 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
17390 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
173a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
173b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c  RuntimeVersion",
173c0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75   ForDisplay(noRu
173d0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d  ntimeVersion)),.
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 74 72 61 63 65 43 61           traceCa
17400 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
17430 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
17440 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
17450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17460 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b           "NoDesk
17470 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  top", ForDisplay
17480 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20  (noDesktop)),.. 
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 74 72 61 63 65 43 61 74 65         traceCate
174b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
174d0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
174e0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
174f0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63         "NoCompac
17520 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  t", ForDisplay(n
17530 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20  oCompact)),..   
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
17560 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
17570 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17580 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
17590 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
175a0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22       "NoNetFx20"
175d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
175e0 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20  etFx20)),..     
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17610 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17630 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
17640 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
17650 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
17680 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
17690 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
176c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
176d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
176e0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
176f0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
17700 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72   "NoVs2008", For
17730 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38  Display(noVs2008
17740 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17760 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17790 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
177a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
177b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
177d0 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70  Vs2010", ForDisp
177e0 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d  lay(noVs2010)),.
177f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17800 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17810 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
17840 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
17850 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
17860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17870 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63           "NoTrac
17880 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  e", ForDisplay(n
17890 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20  oTrace)),..     
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
178c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
178d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
178e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
178f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
17900 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20     "NoConsole", 
17930 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e  ForDisplay(noCon
17940 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  sole)),..       
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17980 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17990 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
179a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
179b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73   "NoLog", ForDis
179e0 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20  play(noLog)),.. 
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17a10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17a30 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
17a40 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
17a50 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c         "WhatIf",
17a80 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74   ForDisplay(what
17a90 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  If)),..         
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17ab0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ad0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
17ae0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
17af0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
17b00 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17b20 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
17b30 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
17b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17b60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
17b90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
17ba0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
17bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17bc0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
17bd0 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
17be0 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17c10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
17c20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
17c30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17c40 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
17c50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
17c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
17ca0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
17cb0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
17cc0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
17cd0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73        private As
17ce0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b  sembly assembly;
17cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
17d00 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73  blic Assembly As
17d10 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
17d20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17d30 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
17d40 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d  urn assembly; }.
17d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d60 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20   set { assembly 
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 6c 6f 67 46 69  ate string logFi
17e00 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
17e10 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
17e20 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a  ng LogFileName..
17e30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
17e50 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46  et { return logF
17e60 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
17e70 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
17e80 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  { logFileName = 
17e90 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
17ea0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17eb0 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
17f00 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
17f10 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  e string directo
17f20 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
17f30 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
17f40 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
17f50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17f60 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17f70 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b  eturn directory;
17f80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17f90 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74      set { direct
17fa0 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ory = value; }..
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
17fd0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18020 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
18030 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
18040 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
18050 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
18060 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
18070 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18080 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
18090 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20  n coreFileName; 
180a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
180b0 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c     set { coreFil
180c0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
180d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
180e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
180f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18140 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
18150 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
18160 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
18170 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  ic string LinqFi
18180 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
18190 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
181a0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
181b0 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  urn linqFileName
181c0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
181d0 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46       set { linqF
181e0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
181f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18200 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18210 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18220 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18260 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
18270 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
18280 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
18290 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
182a0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
182b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
182c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
182d0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
182e0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
182f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
18300 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
18310 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = 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 64 65 62 75 67 46 6f 72 6d 61 74  ring debugFormat
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 44 65 62  ublic string Deb
183d0 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ugFormat..      
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 64 65 62 75 67 46 6f 72 6d 61  eturn debugForma
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 64 65 62 75        set { debu
18430 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  gFormat = 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 73 74 72 69      private stri
184c0 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ng traceFormat;.
184d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
184e0 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65  lic string Trace
184f0 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
18500 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18510 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
18520 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
18530 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18540 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 46      set { traceF
18550 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
18560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
185d0 20 20 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c    private Instal
185e0 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c  lFlags installFl
185f0 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
18600 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c    public Install
18610 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61  Flags InstallFla
18620 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gs..            
18630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18640 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
18650 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d  installFlags; }.
18660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18670 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c   set { installFl
18680 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ags = value; }..
18690 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
186a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
186b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186c0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18700 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69  private TracePri
18710 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72  ority debugPrior
18720 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
18730 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72    public TracePr
18740 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f  iority DebugPrio
18750 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
18760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18770 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
18780 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  n debugPriority;
18790 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
187a0 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 50      set { debugP
187b0 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
187c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
187d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
187e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
187f0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18830 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63      private Trac
18840 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
18850 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
18860 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61        public Tra
18870 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65  cePriority Trace
18880 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
18890 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
188a0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
188b0 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72  eturn tracePrior
188c0 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ity; }..        
188d0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72          set { tr
188e0 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
188f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
18900 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18910 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18950 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18960 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18970 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20  bool install;.. 
18980 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
18990 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a  c bool Install..
189a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
189c0 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
189d0 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  all; }..        
189e0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
189f0 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d  stall = value; }
18a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18a10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18a70 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
18a80 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
18a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18aa0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74  blic bool NoRunt
18ab0 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  imeVersion..    
18ac0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18ad0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
18ae0 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d   return noRuntim
18af0 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  eVersion; }..   
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
18b10 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   { noRuntimeVers
18b20 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
18b30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18ba0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
18bb0 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
18bc0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
18bd0 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
18be0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18bf0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
18c00 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
18c10 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
18c20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
18c30 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
18c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18cb0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
18cc0 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
18cd0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
18ce0 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
18cf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
18d10 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
18d20 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
18d30 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
18d40 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
18d50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18d60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18d70 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18db0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
18dc0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
18dd0 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
18de0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
18df0 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
18e20 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
18e30 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
18e40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
18e50 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
18e60 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
18e70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18e80 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
18ec0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18ed0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
18ee0 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
18ef0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
18f00 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
18f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
18f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f30 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
18f40 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
18f50 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
18f60 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
18f70 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
18f80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18f90 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fd0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18fe0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18ff0 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
19000 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
19010 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
19020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19040 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
19050 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
19060 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
19070 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
19080 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
19090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
190a0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
190f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
19100 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
19110 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
19120 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
19130 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
19150 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
19160 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
19170 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
19180 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
19190 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
191a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
191b0 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
191f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19200 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
19210 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
19220 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
19230 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20  ol NoTrace..    
19240 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19250 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
19260 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b   return noTrace;
19270 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19280 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63      set { noTrac
19290 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
192a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
192b0 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
19310 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e  ivate bool noCon
19320 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sole;..         
19330 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
19340 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20  oConsole..      
19350 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19360 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
19370 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  eturn noConsole;
19380 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19390 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73      set { noCons
193a0 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ole = value; }..
193b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
193c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19420 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c  private bool noL
19430 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
19440 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c   public bool NoL
19450 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  og..            
19460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19470 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
19480 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20  noLog; }..      
19490 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
194a0 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d  noLog = value; }
194b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
194c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
19500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19510 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19520 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
19530 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
19540 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
19550 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
19560 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19570 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
19580 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
195a0 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61  et { whatIf = va
195b0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
195c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
195d0 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19610 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19620 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
19630 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
19640 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
19650 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
19660 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
19680 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
19690 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
196a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
196b0 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
196c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
196d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
196e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
196f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19730 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
19740 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
19750 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
19760 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
19770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19780 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
19790 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
197a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
197b0 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
197c0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
197d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
197e0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
197f0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
19800 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
19810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
19820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19860 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
19870 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
19880 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
19890 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
198a0 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
198b0 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
198c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
198d0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
198e0 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
198f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
19900 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
19910 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19930 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
19940 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19950 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
19960 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
19970 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
19980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19990 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
199c0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
199d0 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
199e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
199f0 74 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 72  te RegistryKey r
19a00 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
19a10 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69       public Regi
19a20 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
19a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
19a60 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
19a70 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
19a80 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
19a90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
19aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19af0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
19b00 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
19b10 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20  gList names;..  
19b20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
19b30 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65   StringList Name
19b40 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
19b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b60 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
19b70 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
19b80 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
19b90 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
19ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
19c00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
19c10 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
19c20 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  Map versions;.. 
19c30 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
19c40 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72  c VersionMap Ver
19c50 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  sions..         
19c60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19c70 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
19c80 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a  rn versions; }..
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d  set { versions =
19cb0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
19cc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19cd0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19d20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
19d30 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c  te StringList pl
19d40 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20  atformNames;..  
19d50 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
19d60 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74   StringList Plat
19d70 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20  formNames..     
19d80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19d90 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
19da0 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e  return platformN
19db0 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
19dc0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
19dd0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76  latformNames = v
19de0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
19df0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19e00 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
19e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19e20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
19e30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
19e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
19e90 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73  ion VsList Class
19ea0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
19eb0 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
19ec0 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  sList..        {
19ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
19ee0 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
19ef0 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
19f00 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 73         public Vs
19f10 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
19f20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19f30 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
19f40 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
19f50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
19f60 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
19f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
19f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
19fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
19fd0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
19fe0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
19ff0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65        private Re
1a000 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
1a010 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1a020 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b  public RegistryK
1a030 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
1a040 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a050 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1a060 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
1a070 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a080 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
1a090 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
1a0a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a0b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1a0c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1a110 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
1a120 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
1a130 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1a140 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
1a150 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
1a160 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a170 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1a180 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a1a0 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
1a1b0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1a1c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a1d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a220 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1a230 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  e VersionListMap
1a240 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1a250 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
1a260 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
1a270 69 73 74 4d 61 70 20 46 72 61 6d 65 77 6f 72 6b  istMap Framework
1a280 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
1a290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a2a0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1a2b0 65 74 75 72 6e 20 66 72 61 6d 65 77 6f 72 6b 56  eturn frameworkV
1a2c0 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1a2e0 7b 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  { frameworkVersi
1a2f0 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
1a300 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a310 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1a320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a360 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a370 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c  private VersionL
1a380 69 73 74 20 69 6e 73 74 61 6c 6c 65 64 56 65 72  ist installedVer
1a390 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
1a3a0 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
1a3b0 6f 6e 4c 69 73 74 20 49 6e 73 74 61 6c 6c 65 64  onList Installed
1a3c0 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
1a3d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a3e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1a3f0 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 65 64 56  eturn installedV
1a400 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
1a410 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1a420 7b 20 69 6e 73 74 61 6c 6c 65 64 56 65 72 73 69  { installedVersi
1a430 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
1a440 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a450 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1a460 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1a470 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1a480 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
1a490 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1a4a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1a4f0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1a500 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20  rivate Constant 
1a510 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72  Data..        pr
1a520 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1a530 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng CoreFileName 
1a540 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
1a550 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20  QLite.dll";..   
1a560 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1a570 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  st string LinqFi
1a580 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
1a590 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
1a5a0 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  q.dll";..       
1a5b0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1a5c0 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
1a5d0 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  leName = "SQLite
1a5e0 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d  .Designer.dll";.
1a5f0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1a600 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
1a610 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51  oviderName = "SQ
1a620 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64  Lite Data Provid
1a630 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  er";..        pr
1a640 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1a650 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  ng ProjectName =
1a660 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1a670 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
1a680 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1a690 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65  ring LegacyProje
1a6a0 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  ctName = "SQLite
1a6b0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1a6c0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1a6d0 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d   InvariantName =
1a6e0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1a6f0 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
1a700 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1a710 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
1a720 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
1a730 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
1a740 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20  eFactory";..    
1a750 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1a760 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70  t string Descrip
1a770 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61  tion = ".NET Fra
1a780 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76  mework Data Prov
1a790 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22  ider for SQLite"
1a7a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1a7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a7f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a800 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1a810 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65 52  ring CLRv2ImageR
1a820 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
1a830 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20  "v2.0.50727";.. 
1a840 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1a850 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76  onst string CLRv
1a860 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1a870 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33  sion = "v4.0.303
1a880 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  19";....        
1a890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1a8e0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1a8f0 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56   string NameAndV
1a900 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30  alueFormat = "{0
1a910 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20  }: {1}";..      
1a920 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1a930 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75  string LogFileSu
1a940 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a  ffix = ".log";..
1a950 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1a960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1a9b0 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
1a9c0 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64  only string VsId
1a9d0 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d  Format = "B";...
1a9e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1a9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1aa40 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
1aa50 6e 6c 79 20 73 74 72 69 6e 67 20 46 72 61 6d 65  nly string Frame
1aa60 77 6f 72 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20  workKeyName =.. 
1aa70 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74             "Soft
1aa80 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
1aa90 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b  \.NETFramework";
1aaa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aaf0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1ab00 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
1ab10 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 46 72  adonly string Fr
1ab20 61 6d 65 77 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d  ameworkSdkKeyNam
1ab30 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
1ab40 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72   "Software\\Micr
1ab50 6f 73 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74  osoft\\Microsoft
1ab60 20 53 44 4b 73 5c 5c 2e 4e 45 54 46 72 61 6d 65   SDKs\\.NETFrame
1ab70 77 6f 72 6b 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  work";....      
1ab80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ab90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1abd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1abe0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
1abf0 69 6e 67 20 57 69 6e 64 6f 77 73 53 64 6b 4b 65  ing WindowsSdkKe
1ac00 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20  yName =..       
1ac10 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c       "Software\\
1ac20 4d 69 63 72 6f 73 6f 66 74 5c 5c 4d 69 63 72 6f  Microsoft\\Micro
1ac30 73 6f 66 74 20 53 44 4b 73 5c 5c 57 69 6e 64 6f  soft SDKs\\Windo
1ac40 77 73 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ws";....        
1ac50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1aca0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1acb0 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
1acc0 67 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65  g XPathForAddEle
1acd0 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
1ace0 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
1acf0 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
1ad00 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
1ad10 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e  es/add[@invarian
1ad20 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a  t=\"{0}\"]";....
1ad30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ad40 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
1ad50 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52  string XPathForR
1ad60 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a  emoveElement =..
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
1ad80 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
1ad90 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
1ada0 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76  rFactories/remov
1adb0 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  e[@invariant=\"{
1adc0 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20  0}\"]";..       
1add0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1ade0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1adf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ae30 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1ae40 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
1ae50 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
1ae60 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
1ae70 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
1ae80 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
1ae90 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
1aea0 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
1aeb0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1aec0 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74   string traceCat
1aed0 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  egory = Path.Get
1aee0 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
1aef0 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
1af00 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f  bly.Location); /
1af10 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72  * NOTE: Same for
1af20 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65   debug and trace
1af30 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
1af40 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
1af50 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
1af60 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ugCallback = App
1af70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  Debug;..        
1af80 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
1af90 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
1afa0 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ceCallback = App
1afb0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
1afc0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1afd0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1afe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b020 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1b030 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d   Trace Handling.
1b040 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1b050 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
1b060 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 29 0d  etLogFileName().
1b070 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1b080 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
1b090 65 73 75 6c 74 20 3d 20 50 61 74 68 2e 47 65 74  esult = Path.Get
1b0a0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 20  TempFileName(); 
1b0b0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
1b0c0 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 2e             File.
1b0d0 4d 6f 76 65 28 72 65 73 75 6c 74 2c 20 72 65 73  Move(result, res
1b0e0 75 6c 74 20 2b 20 4c 6f 67 46 69 6c 65 53 75 66  ult + LogFileSuf
1b0f0 66 69 78 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  fix); /* throw *
1b100 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
1b110 65 73 75 6c 74 20 2b 3d 20 4c 6f 67 46 69 6c 65  esult += LogFile
1b120 53 75 66 66 69 78 3b 0d 0a 0d 0a 20 20 20 20 20  Suffix;....     
1b130 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
1b140 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
1b150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1b160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1b1b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
1b1c0 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20  id AppDebug(..  
1b1d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1b1e0 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
1b1f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
1b200 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
1b210 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1b220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
1b230 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65  aceOps.DebugCore
1b240 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
1b250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b260 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
1b270 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
1b280 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a  NextDebugId(),..
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2a0 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61  TraceOps.TimeSta
1b2b0 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e  mp(DateTime.UtcN
1b2c0 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63  ow), message), c
1b2d0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1b2e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1b2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b330 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1b340 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1b350 63 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28  c void AppTrace(
1b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1b370 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
1b380 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1b390 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
1b3a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1b3b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b3c0 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1b3d0 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Core(String.Form
1b3e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b3f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1b400 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  aceFormat, Trace
1b410 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28  Ops.NextTraceId(
1b420 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b430 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d      TraceOps.Tim
1b440 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e  eStamp(DateTime.
1b450 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65  UtcNow), message
1b460 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  ), category);.. 
1b470 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b480 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1b490 20 20 20 20 20 20 20 20 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 2f  ////////////////
1b4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b4e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1b4f0 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e  on Generic Strin
1b500 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  g Handling..    
1b510 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1b520 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73  ic string ForDis
1b530 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
1b540 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
1b550 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1b560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b570 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1b580 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1b590 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b5a0 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20  n "<null>";.... 
1b5b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1b5c0 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  g result;..     
1b5d0 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
1b5e0 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65   = value.GetType
1b5f0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1b600 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74     if (type == t
1b610 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74  ypeof(XmlElement
1b620 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1b630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b640 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
1b650 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d  ement = (XmlElem
1b660 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ent)value;....  
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b680 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f  sult = element.O
1b690 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20  uterXml;..      
1b6a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1b6b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
1b6c0 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72  pe == typeof(Ver
1b6d0 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  sion))..        
1b6e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b6f0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
1b700 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f  ersion = (Versio
1b710 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  n)value;....    
1b720 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1b730 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
1b740 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69  at("v{0}", versi
1b750 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
1b760 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b770 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1b780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b790 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76        result = v
1b7a0 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b  alue.ToString();
1b7b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b7c0 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
1b7d0 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20  ength == 0)..   
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e   return "<empty>
1b800 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1b810 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
1b820 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b840 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61     type.IsSubcla
1b850 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75  ssOf(typeof(Valu
1b860 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20  eType)) ? "{0}" 
1b870 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20  : "\"{0}\"",..  
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20    result);..    
1b8a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b8b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b8c0 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
1b8d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1b8e0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1b8f0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b940 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
1b950 54 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64  T Framework Hand
1b960 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
1b970 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
1b980 69 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74  ing GetImageRunt
1b990 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
1b9a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b9b0 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..      
1b9c0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1b9d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b9e0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1b9f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ba00 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
1ba10 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20  embly =..       
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
1ba30 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e  embly.Reflection
1ba40 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c  OnlyLoadFrom(fil
1ba50 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
1ba60 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
1ba70 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
1ba80 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c    return assembl
1bab0 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  y.ImageRuntimeVe
1bac0 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
1bad0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1bae0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
1baf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bb00 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
1bb10 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
1bb20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1bb30 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
1bb40 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  l;..        }...
1bb50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1bb60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1bbb0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
1bbc0 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  g GetFrameworkDi
1bbd0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
1bbe0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
1bbf0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
1bc00 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
1bc10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1bc20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1bc30 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1bc40 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1bc50 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
1bc60 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1bc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
1bc80 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1bc90 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
1bca0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
1bcb0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
1bcc0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1bcd0 79 2c 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e  y, FrameworkKeyN
1bce0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
1bcf0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
1bd00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1bd20 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
1bd50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bd60 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
1bd70 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1bd80 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.GetValue(..   
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bda0 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f   key, "InstallRo
1bdb0 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49  ot", null, whatI
1bdc0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bde0 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73  if (!(value is s
1bdf0 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  tring))..       
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1be10 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1be30 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  urn Path.Combine
1be40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1be50 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76         (string)v
1be60 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72  alue, String.For
1be70 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d  mat("v{0}", fram
1be80 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d  eworkVersion));.
1be90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1bea0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1beb0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1bf00 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1bf10 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
1bf20 74 53 64 6b 42 69 6e 61 72 79 46 69 6c 65 4e 61  tSdkBinaryFileNa
1bf30 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1bf40 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
1bf50 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
1bf60 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
1bf70 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1bf80 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
1bf90 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1bfa0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
1bfb0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1bfc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  {..            S
1bfd0 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20  tringDictionary 
1bfe0 72 65 73 75 6c 74 73 20 3d 20 6e 65 77 20 53 74  results = new St
1bff0 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29  ringDictionary()
1c000 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c010 20 73 74 72 69 6e 67 5b 5d 20 6b 65 79 4e 61 6d   string[] keyNam
1c020 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es = {..        
1c030 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
1c040 6b 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  kKeyName,..     
1c050 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
1c060 77 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d 65 2c 0d  workSdkKeyName,.
1c070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c080 20 57 69 6e 64 6f 77 73 53 64 6b 4b 65 79 4e 61   WindowsSdkKeyNa
1c090 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1c0a0 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
1c0b0 20 20 73 74 72 69 6e 67 5b 5d 20 76 61 6c 75 65    string[] value
1c0c0 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20  Names = {..     
1c0d0 20 20 20 20 20 20 20 20 20 20 20 22 73 64 6b 49             "sdkI
1c0e0 6e 73 74 61 6c 6c 52 6f 6f 74 76 32 2e 30 22 2c  nstallRootv2.0",
1c0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c100 20 20 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 46    "InstallationF
1c110 6f 6c 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20  older",..       
1c120 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
1c130 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22 0d 0a 20  lationFolder".. 
1c140 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
1c150 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1c160 6c 5b 5d 20 75 73 65 53 75 62 4b 65 79 73 20 3d  l[] useSubKeys =
1c170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c180 20 20 20 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20      false,..    
1c190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65              true
1c1a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c1b0 20 20 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20     true..       
1c1c0 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20       };....     
1c1d0 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
1c1e0 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
1c1f0 20 3c 20 6b 65 79 4e 61 6d 65 73 2e 4c 65 6e 67   < keyNames.Leng
1c200 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  th; index++)..  
1c210 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1c230 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1c240 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
1c250 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
1c260 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1c280 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 73 5b  otKey, keyNames[
1c290 69 6e 64 65 78 5d 2c 20 66 61 6c 73 65 2c 20 77  index], false, w
1c2a0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
1c2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c2c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c2d0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
1c2e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c320 20 20 20 20 69 66 20 28 75 73 65 53 75 62 4b 65      if (useSubKe
1c330 79 73 5b 69 6e 64 65 78 5d 29 0d 0a 20 20 20 20  ys[index])..    
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c350 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c360 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1c370 63 68 20 28 73 74 72 69 6e 67 20 73 75 62 4b 65  ch (string subKe
1c380 79 4e 61 6d 65 20 69 6e 20 52 65 67 69 73 74 72  yName in Registr
1c390 79 48 65 6c 70 65 72 2e 47 65 74 53 75 62 4b 65  yHelper.GetSubKe
1c3a0 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  yNames(..       
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 77 68           key, wh
1c3d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
1c3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
1c420 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
1c430 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
1c440 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
1c450 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
1c480 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  KeyName, false, 
1c490 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
1c4a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4e0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
1c4f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1c520 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
1c550 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
1c560 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
1c570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 20 20 20 20 20 73 75 62 4b 65 79 2c 20 76 61 6c       subKey, val
1c5a0 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20  ueNames[index], 
1c5b0 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 0d 0a 20  null, whatIf,.. 
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73  if (!(value is s
1c620 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  tring))..       
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c650 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1c680 20 70 61 74 68 20 3d 20 28 73 74 72 69 6e 67 29   path = (string)
1c690 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
1c6c0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
1c6d0 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20  path))..        
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1c700 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20           path = 
1c730 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74  Path.Combine(pat
1c740 68 2c 20 22 62 69 6e 22 29 3b 0d 0a 0d 0a 20 20  h, "bin");....  
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c770 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
1c780 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20  sts(path))..    
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c7e0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
1c7f0 45 6d 70 74 79 28 66 69 6c 65 4e 61 6d 65 29 29  Empty(fileName))
1c800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1c850 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e 61 6d 65  .Add(subKey.Name
1c860 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20  , path);..      
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1c890 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
1c8e0 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  th = Path.Combin
1c8f0 65 28 70 61 74 68 2c 20 66 69 6c 65 4e 61 6d 65  e(path, fileName
1c900 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 20 69 66 20 28 46 69 6c 65 2e 45        if (File.E
1c930 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20  xists(path))..  
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c960 20 20 72 65 73 75 6c 74 73 2e 41 64 64 28 73 75    results.Add(su
1c970 62 4b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29  bKey.Name, path)
1c980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c9e0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
1ca20 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69  ect value = Regi
1ca30 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61  stryHelper.GetVa
1ca40 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 6b 65 79 2c 20 76 61 6c 75 65 4e 61 6d 65    key, valueName
1ca70 73 5b 69 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20  s[index], null, 
1ca80 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
1ca90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1cab0 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
1cac0 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 61         string pa
1cb10 74 68 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c  th = (string)val
1cb20 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1cb40 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78  f (!Directory.Ex
1cb50 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20  ists(path))..   
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1cb80 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
1cba0 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  th = Path.Combin
1cbb0 65 28 70 61 74 68 2c 20 22 62 69 6e 22 29 3b 0d  e(path, "bin");.
1cbc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cbd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1cbe0 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
1cbf0 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20  (path))..       
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1cc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
1cc40 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1cc50 74 79 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  ty(fileName)).. 
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc90 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 41 64        results.Ad
1cca0 64 28 6b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68  d(key.Name, path
1ccb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccd0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd10 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62  path = Path.Comb
1cd20 69 6e 65 28 70 61 74 68 2c 20 66 69 6c 65 4e 61  ine(path, fileNa
1cd30 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 69 66 20 28 46 69 6c 65 2e 45 78 69 73 74 73 28  if (File.Exists(
1cd60 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20  path))..        
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64 28      results.Add(
1cd90 6b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29 3b  key.Name, path);
1cda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cdc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cdd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1cde0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1cdf0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1ce00 3a 20 49 66 20 77 65 20 66 6f 75 6e 64 20 73 6f  : If we found so
1ce10 6d 65 20 72 65 73 75 6c 74 73 2c 20 72 65 74 75  me results, retu
1ce20 72 6e 20 74 68 65 20 6c 61 73 74 20 28 6c 61 74  rn the last (lat
1ce30 65 73 74 29 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  est) one...     
1ce40 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1ce50 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
1ce60 74 73 2e 43 6f 75 6e 74 20 3e 20 30 29 0d 0a 20  ts.Count > 0).. 
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ce80 65 74 75 72 6e 20 72 65 73 75 6c 74 73 5b 6e 65  eturn results[ne
1ce90 77 20 53 74 72 69 6e 67 4c 69 73 74 28 72 65 73  w StringList(res
1cea0 75 6c 74 73 2e 4b 65 79 73 29 5b 72 65 73 75 6c  ults.Keys)[resul
1ceb0 74 73 2e 43 6f 75 6e 74 20 2d 20 31 5d 5d 3b 0d  ts.Count - 1]];.
1cec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1ced0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
1cee0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1cef0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1cf00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1cf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1cf50 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1cf60 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50   Per-Framework/P
1cf70 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67  latform Handling
1cf80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1cf90 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
1cfa0 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
1cfb0 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  kList(..        
1cfc0 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
1cfd0 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
1cfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1cff0 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20  f FrameworkList 
1d000 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20  frameworkList.. 
1d010 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1d020 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d030 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
1d040 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
1d050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d060 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d   frameworkList =
1d070 20 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69   new FrameworkLi
1d080 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
1d090 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
1d0a0 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  rkList.RootKey =
1d0b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1d0c0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
1d0d0 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  rkList.RootKey =
1d0e0 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
1d0f0 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20  achine;....     
1d100 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1d150 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
1d160 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1d170 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
1d180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d190 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1d1a0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
1d1b0 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
1d1c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d1d0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
1d1e0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
1d1f0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
1d200 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d220 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
1d230 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
1d240 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d  TFramework");...
1d250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d260 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1d270 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1d280 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1d290 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
1d2a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2c0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1d2d0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
1d2e0 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
1d2f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1d300 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1d310 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
1d320 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
1d330 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
1d340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1d350 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1d360 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
1d370 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d390 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1d3a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1d400 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1d410 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
1d420 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1d430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d440 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1d450 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
1d460 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  new VersionMap()
1d470 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d480 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
1d490 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
1d4a0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
1d4b0 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1d4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d4e0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
1d4f0 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e  t desktopVersion
1d500 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
1d510 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d530 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1d540 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1d550 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1d560 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20  oNetFx20)..     
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d580 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
1d590 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
1d5a0 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
1d5b0 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  7));....        
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d5d0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1d5e0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
1d5f0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
1d600 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1d620 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
1d630 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
1d640 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d  (4, 0, 30319));.
1d650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d660 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1d670 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
1d680 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
1d690 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
1d6b0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b  topVersionList);
1d6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d6e0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
1d6f0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
1d700 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
1d710 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
1d720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d730 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d740 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1d750 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
1d760 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
1d770 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c      new VersionL
1d7a0 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b  ist(new Version[
1d7b0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
1d7d0 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30   Version(2, 0, 0
1d7e0 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69 6f  , 0), new Versio
1d7f0 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20  n(3, 5, 0, 0).. 
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d810 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20     }));..       
1d820 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1d830 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d840 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1d890 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d8a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1d8b0 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
1d8c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1d8d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d8e0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
1d8f0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
1d900 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73   = new StringLis
1d910 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
1d920 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
1d930 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1d940 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
1d950 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
1d960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d970 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1d980 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
1d990 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a  s.Add(null);....
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9b0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1d9c0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1d9d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1d9e0 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20  Compact)..      
1d9f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
1da20 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
1da30 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20  ("PocketPC");.. 
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
1da60 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
1da70 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29  dd("Smartphone")
1da80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1da90 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1daa0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
1dab0 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73 43  es.Add("WindowsC
1dac0 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  E");..          
1dad0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1dae0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1daf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1db00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1db50 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1db60 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f 72  ool HaveFramewor
1db70 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
1db80 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
1db90 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
1dba0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
1dbb0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
1dbc0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
1dbd0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1dbf0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
1dc00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1dc10 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
1dc20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
1dc30 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
1dc40 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1dc60 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72  ng format = !Str
1dc70 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1dc80 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20  y(platformName) 
1dc90 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1dca0 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69     "Software\\Mi
1dcb0 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b  crosoft\\{0}\\v{
1dcc0 31 7d 5c 5c 7b 32 7d 22 20 3a 0d 0a 20 20 20 20  1}\\{2}" :..    
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66              "Sof
1dce0 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
1dcf0 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 22 3b 0d 0a 0d  \\{0}\\v{1}";...
1dd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1dd10 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 53 74  ing keyName = St
1dd20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1dd40 72 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  rmat, frameworkN
1dd50 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
1dd60 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
1dd70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1dd80 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
1dd90 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
1dda0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
1ddb0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddd0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
1dde0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
1ddf0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
1de00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1de20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1de50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1de60 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
1de70 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f  Name != null) //
1de80 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d   NOTE: Skip non-
1de90 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20  desktop...      
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1deb0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1ded0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
1dee0 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
1def0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1df10 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
1df20 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20  ersion, whatIf, 
1df30 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1df50 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
1df60 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
1df70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1df80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1df90 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1dfa0 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
1dfb0 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
1dfc0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1dfe0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e000 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1e010 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1e020 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e030 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e070 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e080 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1e090 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
1e0a0 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
1e0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
1e0c0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d  ameworkList fram
1e0d0 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20  eworkList,..    
1e0e0 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
1e0f0 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20  kConfigCallback 
1e100 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  callback,..     
1e110 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
1e120 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
1e130 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
1e140 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1e150 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
1e160 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1e170 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
1e180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
1e190 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
1e1a0 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
1e1b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
1e1c0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
1e1d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
1e1e0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
1e1f0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
1e200 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1e210 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
1e220 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1e230 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
1e240 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1e250 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e260 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1e270 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
1e280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e290 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1e2a0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
1e2b0 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20  mework list";.. 
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e2d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1e2e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e2f0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
1e300 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
1e310 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
1e320 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
1e330 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
1e340 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
1e350 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e360 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1e370 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
1e380 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
1e390 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e3a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1e3b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e3c0 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74       if (!Object
1e3d0 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
1e3e0 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74  (rootKey, Regist
1e3f0 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20  ry.CurrentUser) 
1e400 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
1e410 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65      !Object.Refe
1e420 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
1e430 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f  Key, Registry.Lo
1e440 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20  calMachine))..  
1e450 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1e470 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
1e480 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
1e490 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
1e4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1e4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1e4e0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
1e4f0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
1e500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e520 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
1e530 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
1e540 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1e550 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e560 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1e570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e580 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1e590 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
1e5a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1e5b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e5c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
1e5d0 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
1e5e0 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1e600 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1e610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e620 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1e630 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
1e640 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
1e650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e670 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
1e680 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
1e690 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
1e6a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1e6b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1e6c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e6d0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1e6e0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
1e6f0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
1e700 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
1e710 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
1e720 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e730 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
1e740 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
1e750 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
1e760 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
1e770 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1e780 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
1e790 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
1e7a0 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
1e7b0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
1e7c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e7d0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1e7e0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1e7f0 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e810 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1e820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e830 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
1e840 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
1e850 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
1e860 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
1e870 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
1e880 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e890 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e8b0 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
1e8c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
1e8d0 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
1e8e0 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e900 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
1e910 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
1e920 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
1e930 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
1e940 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1e960 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
1e970 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
1e980 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
1e990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e9a0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
1e9b0 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
1e9c0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1e9d0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e9f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1ea00 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
1ea10 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70   all non-desktop
1ea20 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65   frameworks (i.e
1ea30 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72  . if the platfor
1ea40 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
1ea50 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65     //       name
1ea60 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a   is not null)...
1ea70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea80 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1ea90 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
1eaa0 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  Name != null).. 
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eae0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1eaf0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
1eb00 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  b the supported 
1eb10 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73  versions of this
1eb20 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20   particular..   
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1eb40 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e        framework.
1eb50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eb60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1eb70 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
1eb80 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
1eb90 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
1eba0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1ebb0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
1ebc0 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c  rsions.TryGetVal
1ebd0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
1ebf0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20  meworkName, out 
1ec00 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1ec10 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20  List) ||..      
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66                (f
1ec30 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
1ec40 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ist == null)).. 
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ec60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec70 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1ec80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ec90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1eca0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
1ecb0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
1ecc0 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65  Version in frame
1ecd0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
1ece0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ecf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ed00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1ed10 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1ed20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1ed30 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
1ed40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1ed50 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1ed60 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1ed70 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61      "frameworkNa
1eda0 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77  me = {0}, framew
1edb0 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d  orkVersion = {1}
1edc0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ede0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b  platformName = {
1edf0 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  2}", ForDisplay(
1ee00 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d  frameworkName),.
1ee10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1ee30 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
1ee40 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66  ForDisplay(platf
1ee70 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ormName)), trace
1ee80 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eea0 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
1eeb0 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  work(..         
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
1eee0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
1eef0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef10 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
1ef20 72 6d 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  rmName, whatIf, 
1ef30 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1ef50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1ef70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1ef80 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
1ef90 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efb0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1efc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
1eff0 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20  T Framework not 
1f000 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
1f010 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
1f020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f030 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f040 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1f060 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1f070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f090 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
1f0a0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
1f0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f0e0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
1f0f0 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65  ctory = GetFrame
1f100 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f120 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
1f130 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1f140 6e 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  n, whatIf, verbo
1f150 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
1f160 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f170 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1f180 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
1f190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f1a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1f1d0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1f1e0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f200 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1f210 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1f220 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1f230 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f250 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
1f260 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20  k {0} directory 
1f270 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d  is invalid, " +.
1f280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b               "sk
1f2a0 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44  ipping...", ForD
1f2b0 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
1f2c0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1f2f0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f310 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f330 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f340 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
1f350 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62  tory = Path.Comb
1f360 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
1f370 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20  Config");....   
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f390 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
1f3a0 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
1f3b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1f3c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1f3f0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1f400 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f420 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1f430 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1f440 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1f450 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1f460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f470 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
1f480 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
1f490 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65  y {1} does not e
1f4a0 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20  xist, " +..     
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4c0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
1f4d0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
1f4e0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
1f4f0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
1f520 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61  ctory)), traceCa
1f530 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f570 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f580 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1f590 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
1f5a0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
1f5b0 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63  tory, "machine.c
1f5c0 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
1f5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5e0 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73  if (!File.Exists
1f5f0 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  (fileName))..   
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f620 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1f630 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1f640 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1f650 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
1f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f670 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1f680 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1f690 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1f6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
1f6c0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1f6d0 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e   file {1} does n
1f6e0 6f 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20  ot exist, " +.. 
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f700 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70             "skip
1f710 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73  ping...", ForDis
1f720 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
1f730 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f750 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1f760 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63  fileName)), trac
1f770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f790 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1f7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f7b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1f7d0 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d  ool localSaved =
1f7e0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f800 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
1f830 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20  ame, invariant, 
1f840 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f  name, descriptio
1f850 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  n, typeName,..  
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f870 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
1f880 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61  lyName, clientDa
1f890 74 61 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ta, whatIf, verb
1f8a0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64    ref localSaved
1f8d0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f910 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f940 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f960 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f980 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21  (localSaved && !
1f990 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20  saved)..        
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
1f9c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f9e0 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1fa10 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1fa20 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
1fa30 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
1fa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa50 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1fa60 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1fa70 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1fa80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d     "localSaved =
1fab0 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31   {0}, saved = {1
1fac0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fae0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1faf0 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72  localSaved), For
1fb00 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c  Display(saved)),
1fb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1fb40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1fb50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fb60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1fb70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1fb80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1fb90 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1fba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fc00 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1fc10 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65  ool ForEachFrame
1fc20 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
1fc30 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
1fc40 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
1fc50 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  rkList,..       
1fc60 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65       FrameworkRe
1fc70 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
1fc80 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1fc90 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
1fca0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
1fcb0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1fcc0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1fcd0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1fce0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1fcf0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1fd00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1fd10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fd20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1fd30 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
1fd40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1fd60 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
1fd70 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d  ramework list";.
1fd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
1fdc0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1fdd0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
1fde0 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
1fdf0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
1fe00 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
1fe10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1fe30 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
1fe40 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
1fe50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1fe60 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1fe70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fe80 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65         if (!Obje
1fe90 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
1fea0 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69  ls(rootKey, Regi
1feb0 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
1fec0 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
1fed0 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65        !Object.Re
1fee0 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
1fef0 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e  otKey, Registry.
1ff00 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a  LocalMachine))..
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ff30 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
1ff40 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
1ff50 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
1ff60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1ff70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1ff80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1ff90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ffa0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1ffb0 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
1ffc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ffd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffe0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
1fff0 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
20000 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
20010 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
20020 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20030 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20040 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
20050 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
20060 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20080 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
20090 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
200a0 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
200c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
200d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
200e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
200f0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
20100 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
20110 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20130 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
20140 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
20150 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
20160 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
20170 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
20180 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20190 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
201a0 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
201b0 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
201c0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
201d0 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
201e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
201f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
20200 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
20210 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
20220 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
20230 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
20240 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
20250 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
20260 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
20270 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
20280 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
20290 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
202a0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
202b0 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
202c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
202d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
202e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
202f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
20300 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
20310 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
20320 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
20330 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
20340 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20370 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
20380 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
20390 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
203a0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
203b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
203c0 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
203d0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
203e0 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
203f0 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
20400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20420 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
20430 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
20440 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
20450 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
20460 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
20470 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
20480 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
20490 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
204a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
204b0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
204c0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
204d0 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ab the supported
204e0 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69   versions of thi
204f0 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  s particular..  
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20510 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20520 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20530 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20540 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
20550 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  st frameworkVers
20560 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
20570 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20580 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
20590 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
205a0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
205c0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74  ameworkName, out
205d0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
205e0 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20  nList) ||..     
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
20600 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
20610 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
20620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20640 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
20650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20660 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20670 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
20680 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
20690 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
206a0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
206b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
206c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
206d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
206e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
206f0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
20700 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
20720 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
20730 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
20740 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20760 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e       "frameworkN
20770 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65  ame = {0}, frame
20780 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31  workVersion = {1
20790 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207b0 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20  "platformName = 
207c0 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {2}", ForDisplay
207d0 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c  (frameworkName),
207e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
20800 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
20810 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20830 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74   ForDisplay(plat
20840 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63  formName)), trac
20850 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20870 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d     if (!HaveFram
20880 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20 20  ework(..        
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208a0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
208b0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
208c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208e0 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
208f0 6f 72 6d 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ormName, whatIf,
20900 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20920 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20930 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
20940 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
20950 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
20960 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
20990 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
209a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
209b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
209c0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74  ET Framework not
209d0 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
209e0 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
20a10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
20a30 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a60 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
20a70 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
20aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ab0 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
20ac0 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
20af0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
20b00 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
20b30 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74  mName, clientDat
20b40 61 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  a, whatIf, verbo
20b50 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b70 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
20bb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
20be0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20bf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20c00 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
20c10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
20c20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
20c30 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c80 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
20c90 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20  gion Per-Visual 
20ca0 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48  Studio Version H
20cb0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
20cc0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
20cd0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56  void InitializeV
20ce0 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  sList(..        
20cf0 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
20d00 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
20d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
20d20 66 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 0d  f VsList vsList.
20d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
20d40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20d50 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
20d60 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
20d70 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
20d80 73 74 20 3d 20 6e 65 77 20 56 73 4c 69 73 74 28  st = new VsList(
20d90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20da0 20 20 69 66 20 28 76 73 4c 69 73 74 2e 52 6f 6f    if (vsList.Roo
20db0 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
20dd0 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20  sList.RootKey = 
20de0 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
20df0 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  chine;....      
20e00 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
20e10 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
20e20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20e30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20e40 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
20e50 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  ns = new Version
20e60 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
20e70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 76 73             // vs
20e80 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
20e90 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c  d(new Version(8,
20ea0 20 30 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20   0)); // Visual 
20eb0 53 74 75 64 69 6f 20 32 30 30 35 0d 0a 0d 0a 20  Studio 2005.... 
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20ed0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
20ee0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
20ef0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56  onfiguration.NoV
20f00 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20 20  s2008)..        
20f10 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
20f20 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
20f30 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20 30  new Version(9, 0
20f40 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53 74  )); // Visual St
20f50 75 64 69 6f 20 32 30 30 38 0d 0a 0d 0a 20 20 20  udio 2008....   
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20f70 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
20f80 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
20f90 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32  figuration.NoVs2
20fa0 30 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  010)..          
20fb0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
20fc0 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65  .Versions.Add(ne
20fd0 77 20 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29  w Version(10, 0)
20fe0 29 3b 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64  );// Visual Stud
20ff0 69 6f 20 32 30 31 30 0d 0a 20 20 20 20 20 20 20  io 2010..       
21000 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21010 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
21020 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  .FrameworkVersio
21030 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
21040 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21050 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
21060 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72 73  st.FrameworkVers
21070 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69  ions = new Versi
21080 6f 6e 4c 69 73 74 4d 61 70 28 29 3b 0d 0a 0d 0a  onListMap();....
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 2f 2f 20 76 73 4c 69 73 74 2e 46 72 61 6d 65 77  // vsList.Framew
210b0 6f 72 6b 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  orkVersions.Add(
210c0 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20 30  new Version(8, 0
210d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
210e0 20 20 20 20 2f 2f 20 20 20 20 20 6e 65 77 20 56      //     new V
210f0 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56  ersionList(new V
21100 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20  ersion[] {..    
21110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
21120 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
21130 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29 20  on(2, 0, 50727) 
21140 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  }));....        
21150 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
21160 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
21170 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
21180 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d  ation.NoVs2008).
21190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
211a0 20 20 20 20 20 76 73 4c 69 73 74 2e 46 72 61 6d       vsList.Fram
211b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 2e 41 64  eworkVersions.Ad
211c0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c  d(new Version(9,
211d0 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   0),..          
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
211f0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
21200 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
21230 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
21240 32 37 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  27) }));....    
21250 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21260 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
21270 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
21280 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
21290 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10)..           
212a0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
212b0 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  FrameworkVersion
212c0 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  s.Add(new Versio
212d0 6e 28 31 30 2c 20 30 29 2c 0d 0a 20 20 20 20 20  n(10, 0),..     
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69     new VersionLi
21300 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d  st(new Version[]
21310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21330 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
21340 2c 20 35 30 37 32 37 29 2c 0d 0a 20 20 20 20 20  , 50727),..     
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
21370 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33  ersion(4, 0, 303
21380 31 39 29 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20  19) }));..      
21390 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
213a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21400 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21410 62 6f 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69  bool HaveVsVersi
21420 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
21430 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
21440 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
21450 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
21460 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
21470 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
21480 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21490 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
214a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
214b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
214c0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
214d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
214e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
214f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
21500 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
21510 6d 61 74 20 3d 20 22 53 6f 66 74 77 61 72 65 5c  mat = "Software\
21520 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75  \Microsoft\\Visu
21530 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d 22 3b 0d  alStudio\\{0}";.
21540 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
21550 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 53 74  ing keyName = St
21560 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d  ring.Format(form
21570 61 74 2c 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d  at, vsVersion);.
21580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
21590 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
215a0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
215b0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
215c0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
215d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
215e0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
215f0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
21600 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
21610 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21620 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
21630 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21650 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
21670 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67  ject value = Reg
21680 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56  istryHelper.GetV
21690 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
216a0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
216b0 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c 20 6e 75  "InstallDir", nu
216c0 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ll, whatIf, verb
216d0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
216e0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76           if (!(v
216f0 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29  alue is string))
21700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21710 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21720 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
21730 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
21740 72 65 63 74 6f 72 79 20 3d 20 28 73 74 72 69 6e  rectory = (strin
21750 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  g)value;....    
21760 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21770 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
21780 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
21790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
217a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
217b0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
217c0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
217d0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
217e0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21800 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21820 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
21830 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
21840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21850 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
21860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21890 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
218a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
218b0 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 56  ic bool ForEachV
218c0 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79  sVersionRegistry
218d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  (..            V
218e0 73 4c 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20  sList vsList,.. 
218f0 20 20 20 20 20 20 20 20 20 20 20 56 69 73 75 61             Visua
21900 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
21910 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
21920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
21930 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
21940 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
21950 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
21960 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21970 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
21980 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
21990 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
219a0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
219b0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
219c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
219d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
219e0 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
219f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
21a10 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
21a20 53 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20  S list";..      
21a30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21a40 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
21a50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21a60 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
21a70 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69  y rootKey = vsLi
21a80 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20  st.RootKey;.... 
21a90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
21aa0 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
21ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ad0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
21ae0 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20   root key";..   
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21b00 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
21b10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21b20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 4f 62           if (!Ob
21b30 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
21b40 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65  uals(rootKey, Re
21b50 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
21b60 65 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  er) &&..        
21b70 20 20 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e          !Object.
21b80 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
21b90 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72  rootKey, Registr
21ba0 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29  y.LocalMachine))
21bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21bd0 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
21be0 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
21bf0 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
21c00 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
21c10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21c20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
21c30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21c40 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72    if (vsList.Ver
21c50 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
21c60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21c80 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65  rror = "no VS ve
21c90 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
21cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21cd0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
21ce0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56  ach (Version vsV
21cf0 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74  ersion in vsList
21d00 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20  .Versions)..    
21d10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21d20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
21d30 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
21d40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
21d50 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
21d60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
21d70 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
21d80 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
21d90 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
21da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
21db0 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
21dc0 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
21dd0 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21df0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
21e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21e10 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73   if (!HaveVsVers
21e20 69 6f 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56  ion(rootKey, vsV
21e30 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20  ersion, whatIf, 
21e40 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
21e50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
21e80 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
21e90 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21eb0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
21ec0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
21ed0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73              "Vis
21ef0 75 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69  ual Studio versi
21f00 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  on not found, sk
21f10 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21f40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21f50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
21f60 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
21f70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21f80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21f90 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
21fa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21fb0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
21fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21fd0 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
21fe0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
22000 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
22010 70 61 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74 44  package, clientD
22020 61 74 61 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ata, whatIf,..  
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22040 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
22050 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
22060 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22080 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
22090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
220a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
220b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
220c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
220d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
220e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
220f0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22150 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion Configuratio
22160 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d  n File Handling.
22170 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
22180 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
22190 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
221a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
221b0 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
221c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
221d0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
221e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
221f0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
22200 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
22210 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
22220 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
22230 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
22240 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
22250 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
22260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
22270 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
22280 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
22290 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
222a0 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
222b0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
222c0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
222d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
222e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
222f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72          bool dir
22300 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ty = false;..   
22310 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75           XmlDocu
22320 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20  ment document = 
22330 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28  new XmlDocument(
22340 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22350 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65    document.Prese
22360 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20  rveWhitespace = 
22370 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
22380 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64     document.Load
22390 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
223a0 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
223b0 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20  ement element = 
223c0 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
223d0 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67  ingleNode(String
223e0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
223f0 20 20 20 20 20 20 20 20 20 20 58 50 61 74 68 46            XPathF
22400 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
22410 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
22420 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
22430 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
22440 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
22450 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
22470 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d  ing[] elementNam
22480 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es = {..        
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22  "system.data", "
224b0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
224c0 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ies"..          
224d0 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69  XmlElement previ
22500 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  ousElement =..  
22510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22520 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d    document.Docum
22530 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63  entElement; /* c
22540 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d  onfiguration */.
22550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22560 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
22570 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69  ng elementName i
22580 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d  n elementNames).
22590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
225a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
225b0 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20          element 
225c0 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e  = previousElemen
225d0 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
225e0 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
22600 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c  mentName) as Xml
22610 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
22640 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22650 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22670 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64       element = d
22680 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c  ocument.CreateEl
22690 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  ement(..        
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c      elementName,
226c0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
226d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
226e0 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
226f0 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e  ousElement.Appen
22700 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b  dChild(element);
22710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22720 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
22740 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
22750 20 65 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20   element;..     
22760 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22780 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
22790 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
227a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
227b0 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53 74         "add", St
227c0 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
227d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227e0 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
227f0 41 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d  AppendChild(elem
22800 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
22810 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
22820 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
22830 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22840 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
22850 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e  .Equals(element.
22860 47 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  GetAttribute("na
22870 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me"),..         
22880 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
22890 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
228a0 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
228b0 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
228c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
228d0 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74       element.Set
228e0 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22  Attribute("name"
228f0 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
22900 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
22910 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
22920 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22930 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
22940 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74  g.Equals(element
22950 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 69  .GetAttribute("i
22960 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20  nvariant"),..   
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 69 6e 76 61 72 69 61 6e 74 2c 20 53 74 72 69   invariant, Stri
22990 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76  ngComparison.Inv
229a0 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d  ariantCulture)).
229b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229d0 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  element.SetAttri
229e0 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
229f0 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20  , invariant);.. 
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22a10 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
22a20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22a30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
22a40 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
22a50 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
22a60 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
22a70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
22a80 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74          descript
22a90 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ion, StringCompa
22aa0 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43  rison.InvariantC
22ab0 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20  ulture))..      
22ac0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22ad0 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
22ae0 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 64  .SetAttribute("d
22af0 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73  escription", des
22b00 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  cription);..    
22b10 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
22b20 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
22b30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22b40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
22b50 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ullTypeName = St
22b60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
22b70 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {1}",..       
22b80 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d           typeNam
22b90 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29  e, assemblyName)
22ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22bb0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
22bc0 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41  als(element.GetA
22bd0 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29  ttribute("type")
22be0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22bf0 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e         fullTypeN
22c00 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
22c10 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43  rison.InvariantC
22c20 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20  ulture))..      
22c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22c40 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
22c50 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .SetAttribute("t
22c60 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61  ype", fullTypeNa
22c70 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
22c80 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
22c90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
22ca0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22cb0 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77    if (dirty || w
22cc0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
22cd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22ce0 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
22cf0 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
22d00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
22d10 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
22d20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
22d30 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d50 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
22d60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
22d70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d90 20 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d        "element =
22da0 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
22db0 79 28 65 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  y(element)),..  
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
22de0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
22df0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
22e00 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
22e10 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
22e20 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
22e30 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
22e40 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
22e50 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
22e60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22e70 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
22e80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
22e90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22ee0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
22ef0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
22f00 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63  oveDbProviderFac
22f10 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
22f20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
22f30 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
22f40 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
22f50 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
22f60 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
22f70 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
22f80 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
22f90 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
22fa0 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
22fb0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
22fc0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
22fd0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
22fe0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
22ff0 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
23000 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
23010 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
23020 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
23030 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
23040 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
23050 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
23060 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
23070 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
23080 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
23090 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
230a0 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20  Element element 
230b0 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
230c0 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69  tSingleNode(Stri
230d0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
230e0 20 20 20 20 20 20 20 20 20 20 20 20 58 50 61 74              XPat
230f0 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20  hForAddElement, 
23100 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58  invariant)) as X
23110 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
23120 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
23130 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ement != null)..
23140 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23160 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
23170 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c  e.RemoveChild(el
23180 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
23190 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
231a0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
231b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
231c0 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64       element = d
231d0 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69  ocument.SelectSi
231e0 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e  ngleNode(String.
231f0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
23200 20 20 20 20 20 20 20 20 20 58 50 61 74 68 46 6f           XPathFo
23210 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20  rRemoveElement, 
23220 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58  invariant)) as X
23230 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
23240 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
23250 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ement != null)..
23260 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23280 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
23290 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c  e.RemoveChild(el
232a0 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  ement);..       
232b0 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
232c0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
232d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
232e0 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c       if (dirty |
232f0 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  | whatIf)..     
23300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23310 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
23320 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
23330 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
23340 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
23350 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
23360 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23380 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
23390 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
233a0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
233b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
233c0 20 20 20 20 20 20 20 20 20 22 65 6c 65 6d 65 6e           "elemen
233d0 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  t = {0}", ForDis
233e0 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29 29 2c 0d  play(element)),.
233f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23400 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23410 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23420 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23430 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
23450 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
23460 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
23470 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
23480 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
23490 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
234a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
234b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
234c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
234d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
23520 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
23530 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
23540 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
23550 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
23560 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
23570 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
23580 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  riant,..        
23590 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
235a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
235b0 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e  ring description
235c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
235d0 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d  tring typeName,.
235e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
235f0 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62  emblyName assemb
23600 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lyName,..       
23610 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
23620 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
23630 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
23640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
23650 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
23660 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
23670 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
23680 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
23690 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
236a0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
236b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
236c0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
236d0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
236e0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
236f0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
23700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23710 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
23720 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
23730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23740 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
23750 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e  id framework con
23760 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  fig callback dat
23770 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
23780 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
23790 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
237a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
237b0 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
237c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
237e0 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
237f0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23810 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
23820 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
23830 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
23840 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
23850 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
23860 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
23870 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
23880 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
238b0 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
238c0 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
238d0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
238e0 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
238f0 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
23900 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
23910 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  d, ref error);..
23920 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
23930 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
23940 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
23970 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
23980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23990 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
239a0 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
239b0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
239c0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
239d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
239e0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
239f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
23a00 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
23a10 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
23a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a60 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23a70 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
23a80 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64  bly Folders Hand
23a90 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
23aa0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
23ab0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46  ing GetAssemblyF
23ac0 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
23ae0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
23af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
23b00 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
23b10 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
23b20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
23b30 74 66 6f 72 6d 4e 61 6d 65 0d 0a 20 20 20 20 20  tformName..     
23b40 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
23b50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23b60 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
23b70 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
23b80 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
23b90 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
23ba0 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72          "Softwar
23bb0 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30  e\\Microsoft\\{0
23bc0 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 5c 5c 41 73  }\\v{1}\\{2}\\As
23bd0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22  semblyFoldersEx"
23be0 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
23bf0 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d      "Software\\M
23c00 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76  icrosoft\\{0}\\v
23c10 7b 31 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {1}\\AssemblyFol
23c20 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
23c30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
23c40 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
23c50 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  mat, frameworkNa
23c60 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
23c70 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
23c80 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
23c90 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
23ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cf0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23d00 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
23d10 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
23d20 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
23d30 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
23d40 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
23d50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
23d60 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
23d70 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
23d80 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
23d90 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
23da0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
23db0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
23dc0 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
23dd0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
23de0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
23df0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
23e00 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
23e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23e20 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
23e30 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
23e40 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
23e50 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23e60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23e70 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
23e80 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
23e90 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
23eb0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
23ec0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
23ed0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a  atformName);....
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
23ef0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
23f00 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
23f10 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
23f20 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
23f30 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
23f40 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c  , keyName, true,
23f50 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23f60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23f70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23f80 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
23f90 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23fa0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23fc0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
23fd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
23ff0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
24000 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
24010 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
24030 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
24040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24050 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24060 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
24070 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24080 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
24090 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
240a0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
240b0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
240c0 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240e0 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
240f0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24100 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
24110 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24130 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
24140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24150 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24170 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
24180 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241a0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
241b0 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
241c0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
241d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
241f0 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  , subKeyName);..
24200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24210 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24220 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24250 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
24260 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
24290 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
242a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
242b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
242c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
242d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
242e0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
242f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
24300 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24350 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24360 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
24370 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
24380 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
24390 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
243a0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
243b0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
243c0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
243d0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
243e0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
243f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
24400 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
24410 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
24420 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
24430 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
24440 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
24450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24460 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
24470 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
24480 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
24490 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
244a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
244b0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
244c0 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  = GetAssemblyFol
244d0 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
244f0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
24500 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
24510 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d  latformName);...
24520 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
24530 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
24540 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
24550 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
24560 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
24570 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
24580 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
24590 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
245a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
245b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
245c0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
245d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
245e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
24600 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
24610 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
24630 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
24640 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
24650 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
24680 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24690 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
246a0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
246b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
246d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
246e0 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24700 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
24710 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
24720 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24730 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24740 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
24750 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24760 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
247b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
247c0 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
247d0 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ssAssemblyFolder
247e0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
247f0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
24800 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
24810 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
24820 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
24830 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
24840 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
24850 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24860 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
24870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
24880 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
24890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
248a0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
248b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
248c0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
248d0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
248e0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
248f0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
24900 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
24910 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
24920 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
24930 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
24940 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
24950 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24960 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
24970 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
24990 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
249a0 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63  ramework callbac
249b0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
249c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
249d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
249e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
249f0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
24a00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
24a30 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
24a40 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
24a50 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
24a60 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
24a70 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
24a80 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
24a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24aa0 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a        LegacyProj
24ab0 65 63 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ectName, whatIf,
24ac0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
24ad0 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
24ae0 20 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73           AddToAs
24af0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
24b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b10 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
24b20 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
24b30 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
24b40 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61   ProjectName, pa
24b70 69 72 2e 58 2c 20 77 68 61 74 49 66 2c 20 76 65  ir.X, whatIf, ve
24b80 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
24b90 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24ba0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
24bb0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
24bc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24bd0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
24be0 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
24bf0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
24c00 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
24c10 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
24c20 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
24c30 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
24c40 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
24c50 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
24c60 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
24c70 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
24c80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24c90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
24ca0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
24cb0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d00 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
24d10 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
24d20 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  dio Handling..  
24d30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
24d40 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56  atic string GetV
24d50 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
24d60 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
24d70 73 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  sVersion..      
24d80 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24da0 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
24db0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24dc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
24dd0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
24de0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
24df0 67 2e 46 6f 72 6d 61 74 28 22 53 6f 66 74 77 61  g.Format("Softwa
24e00 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  re\\Microsoft\\V
24e10 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d  isualStudio\\{0}
24e20 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24e30 20 20 20 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d      vsVersion);.
24e40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
24e50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24ea0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
24eb0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56   Visual Studio V
24ec0 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d  ersion Handling.
24ed0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
24ee0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
24ef0 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
24f00 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
24f10 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
24f20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
24f30 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
24f40 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
24f50 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
24f60 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
24f70 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
24f80 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
24f90 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
24fa0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
24fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
24fc0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
24fd0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
24fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24ff0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
25000 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
25010 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25020 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69              VsLi
25030 73 74 20 76 73 4c 69 73 74 20 3d 20 63 6c 69 65  st vsList = clie
25040 6e 74 44 61 74 61 20 61 73 20 56 73 4c 69 73 74  ntData as VsList
25050 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25060 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20       if (vsList 
25070 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
25080 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250a0 20 69 66 20 28 76 73 4c 69 73 74 2e 49 6e 73 74   if (vsList.Inst
250b0 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20 3d 3d  alledVersions ==
250c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65 64  vsList.Installed
250f0 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56  Versions = new V
25100 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d  ersionList();...
25110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25120 20 20 20 20 20 69 66 20 28 21 76 73 4c 69 73 74       if (!vsList
25130 2e 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f  .InstalledVersio
25140 6e 73 2e 43 6f 6e 74 61 69 6e 73 28 76 73 56 65  ns.Contains(vsVe
25150 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 20 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65   vsList.Installe
25180 64 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 76 73  dVersions.Add(vs
25190 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  Version);..     
251a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
251b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
251c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
251d0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
251e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
251f0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
25200 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25240 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
25250 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
25260 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20  ual Studio Data 
25270 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d  Source Handling.
25280 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25290 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
252a0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
252b0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
252c0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
252d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
252e0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
252f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
25300 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
25310 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25320 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
25330 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
25340 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25350 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
25360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25370 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25380 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
25390 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
253a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
253b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
253c0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
253d0 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
253f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25400 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25410 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
25420 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
25430 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
25450 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
25460 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
25470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25480 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25490 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
254a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
254b0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
254c0 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
254d0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
254e0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
254f0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
25500 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
25510 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
25540 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
25550 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
25560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25570 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
25580 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255b0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
255c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255e0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
255f0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
25600 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
25630 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
25670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25680 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
25690 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
256a0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
256b0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
256e0 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
256f0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
25700 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
25710 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25720 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25730 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
25740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25750 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25770 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
25780 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
257b0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
257c0 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
257d0 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25810 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
25850 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
25860 72 79 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65  ryKey dataSource
25870 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25890 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
258a0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
258b0 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258d0 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
258e0 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
258f0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
25920 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25960 20 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20   (dataSourceKey 
25970 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
259a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259b0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
259c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
259f0 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
25a00 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
25a10 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  }", key,..      
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a30 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
25a40 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
25a50 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
25a60 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a80 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25a90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25aa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ac0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
25ad0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
25ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
25b00 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75  ataSourceKey, nu
25b10 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ll, String.Forma
25b20 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b40 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20 46 69  "{0} Database Fi
25b50 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  le", ProjectName
25b60 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b80 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
25b90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
25bb0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
25bc0 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75  teSubKey(dataSou
25bd0 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  rceKey,..       
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bf0 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
25c00 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72  at("SupportingPr
25c10 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a  oviders\\{0}",..
25c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c30 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
25c40 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
25c50 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
25c60 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
25c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c80 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
25c90 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25cc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25cd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25ce0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
25cf0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25d00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25d50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
25d60 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
25d70 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  eVsDataSource(..
25d80 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
25d90 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
25da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
25db0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
25dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
25dd0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
25de0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25df0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25e00 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
25e10 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
25e20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
25e30 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
25e40 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25e50 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
25e60 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
25e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e90 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
25ea0 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25ec0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25ed0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25ee0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
25ef0 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
25f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
25f30 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25f50 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25f60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25f70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25f80 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
25f90 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
25fa0 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
25fb0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
25fc0 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
25fd0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
25fe0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26000 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
26010 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
26020 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
26030 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26040 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26050 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26080 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
26090 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
260a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260b0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
260c0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
260d0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260f0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
26100 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26150 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
26160 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
26170 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
26180 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
26190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
261a0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
261b0 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75  ataSources", tru
261c0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
261d0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
261e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
261f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26200 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
26210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26220 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26240 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
26250 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
26280 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
26290 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72  y: {0}\\DataSour
262a0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
262d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
262f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26300 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
26330 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
26340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26350 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
26360 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f  , package.DataSo
26370 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
26380 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
263b0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
263c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
263d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
263e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
263f0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
26400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26450 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
26460 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
26470 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
26480 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
26490 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
264a0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
264b0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
264c0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
264d0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
264e0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
264f0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
26500 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
26510 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
26520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26530 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
26540 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
26550 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
26560 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
26570 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26580 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
26590 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
265a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
265b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
265c0 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
265d0 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
265e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
265f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
26600 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26610 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
26620 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
26630 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
26640 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
26650 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
26660 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
26670 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26680 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26690 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
266a0 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
266b0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
266c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
266d0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
266e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
266f0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
26700 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26720 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
26730 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
26740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
26750 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
26760 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 68 61 74  n, package, what
26770 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
26780 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
26790 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
267a0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
267b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
267c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
267d0 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75   RemoveVsDataSou
267e0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
267f0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
26800 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
26810 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20 76  ckage, whatIf, v
26820 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
26830 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
26840 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
26850 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
26860 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
26870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
268c0 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
268d0 74 75 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69  tudio Data Provi
268e0 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  der Handling..  
268f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
26900 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
26910 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
26920 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
26930 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
26940 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
26950 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
26960 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
26970 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
26980 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
26990 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
269a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
269b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
269c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
269d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
269e0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
269f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
26a00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26a10 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
26a20 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
26a30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26a40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
26a50 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
26a60 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
26a70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26a80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26a90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26aa0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
26ab0 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
26ac0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
26ae0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
26af0 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
26b00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26b10 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26b30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
26b40 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
26b50 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b  Name(vsVersion);
26b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26b70 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
26b80 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
26b90 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
26ba0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
26bc0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
26bd0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
26be0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
26bf0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26c00 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
26c10 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26c20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c40 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
26c50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
26c80 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
26c90 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cb0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
26cc0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26ce0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d10 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
26d20 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
26d30 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
26d40 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d60 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
26d70 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
26d80 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26d90 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26da0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26db0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
26dc0 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26de0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
26e00 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
26e10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e30 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
26e40 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
26e50 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
26e60 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e80 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
26e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ea0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26eb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26ec0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ee0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
26ef0 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69  tryKey dataProvi
26f00 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  derKey =..      
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
26f30 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
26f40 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
26f70 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
26f80 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
26f90 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26fc0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26fd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ff0 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76 69     if (dataProvi
27000 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  derKey == null).
27010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27020 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
27050 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27080 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
27090 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
270a0 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
270b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270d0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
270e0 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
270f0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
27100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27120 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27160 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
27170 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
27180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27190 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
271a0 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44  iderKey, null, D
271b0 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74  escription, what
271c0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
271d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271e0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27200 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
27210 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
27240 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 49 6e  ProviderKey, "In
27250 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 49 6e  variantName", In
27260 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20  variantName,..  
27270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27280 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
27290 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272b0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
272c0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
272d0 0a 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 20 64 61 74               dat
272f0 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 54  aProviderKey, "T
27300 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20  echnology",..   
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
27330 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67  .AdoNetTechnolog
27340 79 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  yId.ToString(VsI
27350 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
27380 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
27390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273a0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
273b0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273d0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
273e0 6f 76 69 64 65 72 4b 65 79 2c 20 22 43 6f 64 65  oviderKey, "Code
273f0 42 61 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c  Base", fileName,
27400 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
27410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27420 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
27430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27440 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
27450 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
27460 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27480 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
27490 2c 20 22 46 61 63 74 6f 72 79 53 65 72 76 69 63  , "FactoryServic
274a0 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
274d0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
274e0 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
274f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
27510 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
27540 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
27550 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
27560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
27580 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
27590 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49  DataConnectionUI
275a0 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20  Control",..     
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275c0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
275d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
275e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275f0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
27600 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
27610 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
27620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
27640 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
27650 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50  \DataConnectionP
27660 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20  roperties",..   
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
27690 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276b0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
276c0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
276d0 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
276e0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
276f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27700 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
27710 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f  s\\DataConnectio
27720 6e 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49  nSupport", whatI
27730 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
27740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27750 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
27780 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
27790 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
277a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
277c0 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
277d0 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70  \\DataObjectSupp
277e0 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
27810 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27830 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
27840 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
27850 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27870 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
27880 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
27890 61 56 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77  aViewSupport", w
278a0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278c0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
278f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27900 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27910 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
27920 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
27930 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
27990 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
279a0 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76  RemoveVsDataProv
279b0 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
279c0 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
279d0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
279e0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
279f0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
27a00 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
27a10 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
27a20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
27a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27a40 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
27a50 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
27a60 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
27a70 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
27a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27a90 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
27aa0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27ab0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27ac0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
27ad0 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
27ae0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
27af0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
27b00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
27b10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27b20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
27b30 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
27b40 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  vsVersion);.... 
27b50 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
27b60 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
27b70 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
27b80 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
27b90 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
27ba0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
27bb0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
27bc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
27bd0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
27be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27bf0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
27c00 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27c10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27c20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
27c30 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
27c40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27c50 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
27c60 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
27c70 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
27c80 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
27ca0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
27cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27cc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27cd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
27d00 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
27d10 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
27d20 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
27d30 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
27d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d50 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64  key, "DataProvid
27d60 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ers", true, what
27d70 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27da0 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
27db0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27de0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
27df0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
27e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
27e20 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
27e30 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
27e40 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  \DataProviders",
27e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
27e70 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27e90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27eb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27ec0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
27ed0 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
27ee0 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
27ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f00 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
27f10 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
27f20 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
27f30 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f50 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
27f60 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
27f70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27f90 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
27fa0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
27fb0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
27fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28010 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
28020 50 72 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f  ProcessVsDataPro
28030 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
28040 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
28050 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
28060 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
28070 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
28080 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
28090 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
280a0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
280b0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
280c0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
280d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
280e0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
280f0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
28100 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
28110 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28130 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
28140 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
28150 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
28160 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
28170 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
28180 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
28190 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
281a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
281b0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
281c0 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
281d0 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
281e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
281f0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28200 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28210 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
28220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28240 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74   return AddVsDat
28250 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
28260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28270 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
28280 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  on, package, pai
28290 72 2e 58 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.X,..          
282a0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
282b0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
282c0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
282d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
282e0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
282f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28300 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
28310 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
28320 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
28330 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
28340 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
28350 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 0d 0a  ckage, whatIf,..
28360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28370 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
28380 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
28390 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
283a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
283b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
283c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
283d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28400 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28410 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
28420 75 61 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61  ual Studio Packa
28430 67 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ge Handling..   
28440 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28450 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
28460 69 7a 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  izeVsPackage(.. 
28470 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 50             ref P
28480 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 0d 0a  ackage package..
28490 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
284a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
284b0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
284c0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
284d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
284e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
284f0 67 65 20 3d 20 6e 65 77 20 50 61 63 6b 61 67 65  ge = new Package
28500 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
28510 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
28520 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
28530 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28550 20 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42     "77AB9A9D-78B
28560 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46  9-4BA7-91AC-873F
28570 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20  5338F1D2");.... 
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
28590 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
285a0 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285c0 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37    "DCBE6C8D-0E57
285d0 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37  -4099-A183-98FF7
285e0 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20  4C64D9C");....  
285f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
28600 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 20  ckage.ServiceId 
28610 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
28640 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
28650 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9D");....   
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
28670 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
28680 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286a0 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
286b0 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
286c0 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20  BF058C71");.... 
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
286e0 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
286f0 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64  derId = new Guid
28700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28710 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45         "0EBAAB6E
28720 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d  -CA80-4B4A-8DDF-
28730 43 42 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d  CBE6BF058C70");.
28740 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28750 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28760 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
287b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
287c0 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
287d0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
287e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
287f0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
28800 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
28810 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
28820 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
28830 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
28840 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
28850 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
28860 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
28870 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
28880 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
28890 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
288a0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
288b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
288c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
288d0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
288e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
288f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28900 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
28910 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
28920 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
28930 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28940 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28950 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28960 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
28970 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
28980 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28990 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
289a0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
289b0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
289c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
289d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
289e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
289f0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
28a00 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
28a10 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  e(vsVersion);...
28a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
28a30 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
28a40 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
28a50 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
28a60 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
28a70 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
28a80 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
28a90 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
28aa0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
28ab0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28ac0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
28ad0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28ae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
28b00 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
28b10 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
28b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
28b30 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
28b40 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
28b50 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
28b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b70 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
28b80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
28b90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28ba0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
28bb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
28bd0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
28be0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
28bf0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
28c00 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73    key, "Packages
28c30 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
28c40 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
28c50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c70 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
28c80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28c90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
28cc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
28cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ce0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
28cf0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
28d00 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61  try key: {0}\\Pa
28d10 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20  ckages",..      
28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d30 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
28d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
28d60 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
28d70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d90 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
28da0 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67  gistryKey packag
28db0 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  eKey = RegistryH
28dc0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
28dd0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28df0 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
28e00 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
28e10 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
28e20 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e40 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d        verbose)).
28e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28e60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 69 66 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d  if (packageKey =
28e90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28eb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ed0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
28ee0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
28f10 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
28f20 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
28f30 22 2c 0d 0a 20 20 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 20 20                  
28f50 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
28f60 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
28f70 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
28f80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fe0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
28ff0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
29000 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53  kageKey, null, S
29010 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
29020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29030 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20             "{0} 
29040 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65  Designer Package
29050 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
29060 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
29070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29080 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
29090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
290a0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
290b0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
290c0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
290d0 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20 20 20  Class",..       
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44 65 73       "SQLite.Des
29100 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61 63 6b  igner.SQLitePack
29110 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20 76 65  age", whatIf, ve
29120 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29140 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
29150 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
29160 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65  geKey, "CodeBase
29170 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
29180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29190 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66  fileName, whatIf
291a0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
291d0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
291e0 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44 22 2c  ackageKey, "ID",
291f0 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20   400, whatIf,.. 
29200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29210 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
29220 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
29230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29240 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
29250 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
29260 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65  ey, "InprocServe
29270 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  r32",..         
29280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29290 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28     Path.Combine(
292a0 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
292b0 65 6d 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  emDirectory,..  
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
292e0 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 20 77 68  scoree.dll"), wh
292f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
29300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29310 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
29320 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
29330 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
29340 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20  CompanyName",.. 
29350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29360 20 20 20 20 20 20 20 20 20 20 20 22 68 74 74 70             "http
29370 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73  ://system.data.s
29380 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61  qlite.org/", wha
29390 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
293a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
293b0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
293c0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
293d0 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d  e(packageKey, "M
293e0 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20  inEdition",..   
293f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29400 20 20 20 20 20 20 20 20 20 22 73 74 61 6e 64 61           "standa
29410 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rd", whatIf, ver
29420 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
29450 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
29460 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61  eKey, "ProductNa
29470 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
29480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29490 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
294a0 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
294b0 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
294c0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294e0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
294f0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29510 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
29520 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
29530 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73  ey, "ProductVers
29540 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion",..         
29550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29560 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66     "1.0", whatIf
29570 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
29580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29590 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
295a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f  ckRegistryKey to
295b0 6f 6c 62 6f 78 4b 65 79 20 3d 20 52 65 67 69 73  olboxKey = Regis
295c0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
295d0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
295e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295f0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
29600 4b 65 79 2c 20 22 54 6f 6f 6c 62 6f 78 22 2c 20  Key, "Toolbox", 
29610 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
29620 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29630 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6f            if (to
29660 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c  olboxKey == null
29670 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296b0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
296c0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
296f0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
29700 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
29710 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 0d 0a 20 20  }\\Toolbox",..  
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29740 20 20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a    packageKey);..
29750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29770 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
297a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
297b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
297c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
297d0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297f0 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b          toolboxK
29800 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65  ey, "Default Ite
29810 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d  ms", 3, whatIf,.
29820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29840 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29860 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
298a0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
298b0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
298c0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
298d0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
298e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298f0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e         key, "Men
29900 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  us", true, whatI
29910 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29940 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
29950 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29980 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
29990 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
299a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
299c0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
299d0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
299e0 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20  Menus",..       
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a00 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29a30 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29a40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
29a70 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
29aa0 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
29ab0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
29ac0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
29ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20               ", 
29ae0 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66  1000, 3", whatIf
29af0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
29b30 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
29b40 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
29b50 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
29b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b70 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76        key, "Serv
29b80 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ices", true, wha
29b90 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29bc0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
29bd0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
29be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29c00 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29c10 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
29c20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29c40 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
29c50 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
29c60 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20  \\Services",..  
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c80 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
29c90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29ca0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29cb0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29ce0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
29cf0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 65  ckRegistryKey se
29d00 72 76 69 63 65 4b 65 79 20 3d 20 52 65 67 69 73  rviceKey = Regis
29d10 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
29d20 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d40 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
29d50 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
29d60 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
29d70 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
29d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d90 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
29da0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
29db0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dd0 20 20 20 20 69 66 20 28 73 65 72 76 69 63 65 4b      if (serviceK
29de0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
29df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
29e30 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e50 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
29e60 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
29e70 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
29e80 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
29e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ea0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
29eb0 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
29ec0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
29ed0 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ef0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29f00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29f10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29f30 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
29f40 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
29f50 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c  (serviceKey, nul
29f60 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f80 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
29f90 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
29fa0 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
29fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
29fd0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
29fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ff0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2a000 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69 63  .SetValue(servic
2a010 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20  eKey, "Name",.. 
2a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a030 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
2a040 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65  g.Format("{0} De
2a050 73 69 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c  signer Service",
2a060 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a   ProjectName),..
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a080 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2a090 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a0c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a0d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a0e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2a0f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
2a100 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2a110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2a160 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2a170 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28  RemoveVsPackage(
2a180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
2a190 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2a1a0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2a1b0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
2a1c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2a1d0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
2a1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2a1f0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2a200 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2a210 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2a220 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2a230 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2a240 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2a250 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2a260 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
2a270 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a290 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2a2a0 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
2a2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2a2f0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
2a300 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a320 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2a330 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
2a340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a350 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a370 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2a380 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
2a390 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
2a3a0 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sion);....      
2a3b0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
2a3c0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
2a3d0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2a3e0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2a410 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
2a420 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2a430 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2a450 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
2a460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a480 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2a490 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4b0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2a4c0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2a4d0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
2a4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a4f0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2a500 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
2a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a520 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2a530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a540 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2a550 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2a560 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
2a570 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
2a580 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2a590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2a5a0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2a5b0 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65  "Packages", true
2a5c0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2a5d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2a5e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a600 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2a610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a640 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2a650 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a670 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2a680 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2a690 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22  : {0}\\Packages"
2a6a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2a6c0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a700 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a710 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2a720 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
2a730 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
2a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a750 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
2a760 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
2a770 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
2a780 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
2a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7a0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
2a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a7c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a7d0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2a7e0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2a7f0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2a800 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65          key, "Me
2a830 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  nus", true, what
2a840 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a870 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2a880 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2a8c0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2a8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2a8f0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2a900 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2a910 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20  \Menus",..      
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a930 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2a940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a950 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2a960 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2a970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2a9a0 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a  r.DeleteValue(..
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9c0 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
2a9d0 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
2a9e0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2a9f0 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
2aa00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aa10 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2aa20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2aa30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2aa40 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2aa50 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2aa60 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2aa70 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2aa80 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2aaa0 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
2aab0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2aac0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2aad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2aaf0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
2ab00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ab10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab30 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2ab40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2ab50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab60 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2ab70 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
2ab80 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
2ab90 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abb0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2abc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abd0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2abe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2abf0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ac10 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
2ac20 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
2ac50 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
2ac60 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2ac70 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
2ac80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac90 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2aca0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2acb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2acc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2acd0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2ace0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2acf0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ad00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ad40 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2ad50 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
2ad60 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d  ocessVsPackage(.
2ad70 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
2ad80 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2ad90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2ada0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2adb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2adc0 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2add0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2ade0 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2adf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2ae00 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2ae10 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2ae20 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
2ae30 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
2ae40 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
2ae50 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2ae60 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
2ae70 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
2ae80 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
2ae90 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
2aea0 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
2aeb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2aec0 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
2aed0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2aef0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2af00 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
2af10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2af40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2af50 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
2af60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2af70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2af80 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a   AddVsPackage(..
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afa0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
2afb0 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
2afc0 20 70 61 69 72 2e 58 2c 20 77 68 61 74 49 66 2c   pair.X, whatIf,
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2afe0 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
2aff0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2b000 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2b010 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2b020 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b030 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b040 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61  rn RemoveVsPacka
2b050 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
2b060 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2b070 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63  , vsVersion, pac
2b080 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20 76 65  kage, whatIf, ve
2b090 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2b0b0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2b0c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b0d0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2b0e0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
2b0f0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2b100 20 20 20 20 20 2f 2f 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 2f 2f 0d 0a 0d 0a  ////////////....
2b150 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2b160 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72  Application Entr
2b170 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  y Point..       
2b180 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2b190 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20  int Main(..     
2b1a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
2b1b0 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
2b1c0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
2b1e0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
2b1f0 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d  uration = null;.
2b200 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2b210 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c  ing error = null
2b220 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b230 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b270 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2b280 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d      #region Comm
2b290 61 6e 64 20 4c 69 6e 65 20 50 72 6f 63 65 73 73  and Line Process
2b2a0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
2b2b0 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74   if (!Configurat
2b2c0 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20  ion.FromArgs(.. 
2b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2e0 20 20 20 61 72 67 73 2c 20 74 72 75 65 2c 20 72     args, true, r
2b2f0 65 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ef configuration
2b300 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d  , ref error) ||.
2b310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b320 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !Configuration.
2b330 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20  Process(..      
2b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
2b350 67 73 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  gs, configuratio
2b360 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72  n, true, ref err
2b370 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  or) ||..        
2b380 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
2b390 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74  ration.CheckRunt
2b3a0 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
2b3d0 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
2b3e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b400 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
2b410 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
2b420 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2b430 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
2b440 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
2b450 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2b460 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b470 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
2b480 62 6c 79 2c 20 65 72 72 6f 72 2c 20 74 72 61 63  bly, error, trac
2b490 65 43 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20  eCategory,..    
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4b0 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
2b4c0 73 2e 4f 4b 2c 20 4d 65 73 73 61 67 65 42 6f 78  s.OK, MessageBox
2b4d0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4f0 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
2b500 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
2b510 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b520 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2b530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b580 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2b590 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72   #region .NET Fr
2b5a0 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75 61 6c  amework / Visual
2b5b0 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a 20 20   Studio Data..  
2b5c0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2b5d0 65 20 70 61 63 6b 61 67 65 20 3d 20 6e 75 6c 6c  e package = null
2b5e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ;..            F
2b5f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
2b600 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 75 6c  meworkList = nul
2b610 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
2b620 56 73 4c 69 73 74 20 76 73 4c 69 73 74 20 3d 20  VsList vsList = 
2b630 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
2b640 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2b650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b680 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b690 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
2b6a0 7a 65 56 73 50 61 63 6b 61 67 65 28 72 65 66 20  zeVsPackage(ref 
2b6b0 70 61 63 6b 61 67 65 29 3b 0d 0a 20 20 20 20 20  package);..     
2b6c0 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
2b6d0 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 63  eFrameworkList(c
2b6e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65  onfiguration, re
2b6f0 66 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29  f frameworkList)
2b700 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
2b710 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28  nitializeVsList(
2b720 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72  configuration, r
2b730 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20  ef vsList);..   
2b740 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2b750 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2b760 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b7b0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
2b7c0 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20  me assemblyName 
2b7d0 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47  = AssemblyName.G
2b7e0 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
2b7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b800 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43   configuration.C
2b810 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  oreFileName); /*
2b820 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20   throw */....   
2b830 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2b840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2b880 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
2b890 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2b8a0 3e 20 64 69 72 65 63 74 6f 72 79 50 61 69 72 20  > directoryPair 
2b8b0 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74  = new AnyPair<st
2b8c0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20  ring, bool>(..  
2b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2b8e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65  nfiguration.Dire
2b8f0 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61  ctory, configura
2b900 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a  tion.Install);..
2b910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
2b920 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2b930 6f 6c 3e 20 66 69 6c 65 4e 61 6d 65 50 61 69 72  ol> fileNamePair
2b940 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73   = new AnyPair<s
2b950 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20  tring, bool>(.. 
2b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2b970 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73  onfiguration.Des
2b980 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63  ignerFileName, c
2b990 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73  onfiguration.Ins
2b9a0 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tall);....      
2b9b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2b9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ba00 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2ba10 20 2e 4e 45 54 20 47 41 43 20 49 6e 73 74 61 6c   .NET GAC Instal
2ba20 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20 20 20 20  l/Remove..      
2ba30 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
2ba40 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
2ba50 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 41  (InstallFlags.GA
2ba60 43 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  C, true))..     
2ba70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ba80 20 20 20 20 20 20 20 20 20 20 50 75 62 6c 69 73            Publis
2ba90 68 20 70 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c  h publish = null
2baa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2bab0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
2bac0 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
2bad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bae0 20 20 20 20 20 70 75 62 6c 69 73 68 20 3d 20 6e       publish = n
2baf0 65 77 20 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d  ew Publish();...
2bb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bb10 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
2bb20 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a 20 20 20  on.Install)..   
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb50 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
2bb60 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb80 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
2bb90 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
2bba0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
2bbb0 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
2bbc0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
2bbd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2bbe0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2bbf0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2bc00 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2bc30 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2bc40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc60 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74          "GacInst
2bc70 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74  all: assemblyPat
2bc80 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  h = {0}",..     
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bca0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
2bcb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
2bcc0 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
2bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bce0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2bcf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2bd10 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
2bd20 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd40 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
2bd50 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
2bd60 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20  .LinqFileName); 
2bd70 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd90 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2bda0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2bdb0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2bdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bdd0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2bde0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2bdf0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2be00 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73  "GacInstall: ass
2be30 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
2be40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2be50 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2be60 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
2be70 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
2be80 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2be90 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2bea0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
2beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2bec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bed0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2bee0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2bf00 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
2bf10 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf30 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d    publish.GacRem
2bf40 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  ove(configuratio
2bf50 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  n.LinqFileName);
2bf60 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf80 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2bf90 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2bfa0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2bfb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bfc0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2bfd0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2bfe0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2bff0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2c000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c010 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73   "GacRemove: ass
2c020 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
2c030 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c040 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2c050 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
2c060 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.LinqFileName
2c070 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
2c080 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2c090 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0b0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
2c0c0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
2c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
2c0f0 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67  GacRemove(config
2c100 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
2c110 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
2c120 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
2c130 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2c140 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2c150 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
2c160 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2c190 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2c1a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1c0 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76         "GacRemov
2c1d0 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20  e: assemblyPath 
2c1e0 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {0}",..       
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c200 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
2c210 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
2c220 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
2c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c240 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2c250 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c260 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2c270 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2c280 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2c290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c2e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2c2f0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73 65  region .NET Asse
2c300 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20 20  mblyFolders..   
2c310 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
2c320 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
2c330 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags(InstallFlags
2c340 2e 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  .AssemblyFolders
2c350 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
2c360 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c370 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
2c380 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65  rEachFrameworkRe
2c390 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3b0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20   frameworkList, 
2c3c0 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46  ProcessAssemblyF
2c3d0 6f 6c 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20  olders,..       
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3f0 20 64 69 72 65 63 74 6f 72 79 50 61 69 72 2c 20   directoryPair, 
2c400 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
2c410 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2c430 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72  onfiguration.Ver
2c440 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
2c450 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2c460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c470 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2c480 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54  ps.ShowMessage(T
2c490 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
2c4a0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
2c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2c4c0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2c4d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69  aceCallback, thi
2c4e0 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20  sAssembly,..    
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c500 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
2c510 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
2c520 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
2c530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c540 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
2c550 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
2c560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c570 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
2c580 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2c5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2c5c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2c5d0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2c5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2c620 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2c630 6f 6e 20 2e 4e 45 54 20 44 62 50 72 6f 76 69 64  on .NET DbProvid
2c640 65 72 46 61 63 74 6f 72 79 0d 0a 20 20 20 20 20  erFactory..     
2c650 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
2c660 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
2c670 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44  s(InstallFlags.D
2c680 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2c690 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
2c6a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c6b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
2c6c0 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6e0 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d  if (!ForEachFram
2c6f0 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20  eworkConfig(..  
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c710 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2c720 69 73 74 2c 20 50 72 6f 63 65 73 73 44 62 50 72  ist, ProcessDbPr
2c730 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a  oviderFactory,..
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c750 20 20 20 20 20 20 20 20 49 6e 76 61 72 69 61 6e          Invarian
2c760 74 4e 61 6d 65 2c 20 50 72 6f 76 69 64 65 72 4e  tName, ProviderN
2c770 61 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f 6e  ame, Description
2c780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c790 20 20 20 20 20 20 20 20 20 20 20 46 61 63 74 6f             Facto
2c7a0 72 79 54 79 70 65 4e 61 6d 65 2c 20 61 73 73 65  ryTypeName, asse
2c7b0 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72 65 63 74  mblyName, direct
2c7c0 6f 72 79 50 61 69 72 2c 0d 0a 20 20 20 20 20 20  oryPair,..      
2c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7e0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
2c7f0 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72  WhatIf, configur
2c800 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a  ation.Verbose,..
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c820 20 20 20 20 20 20 20 20 72 65 66 20 73 61 76 65          ref save
2c830 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  d, ref error))..
2c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c850 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c860 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2c870 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
2c880 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
2c890 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2c8a0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2c8b0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2c8c0 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
2c8d0 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8f0 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
2c900 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
2c910 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
2c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c930 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
2c940 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
2c970 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
2c980 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c990 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2c9a0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2c9b0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2c9c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ca10 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2ca20 56 53 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20  VS Package..    
2ca30 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
2ca40 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
2ca50 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  gs(InstallFlags.
2ca60 56 73 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29  VsPackage, true)
2ca70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ca80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca90 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73    if (!ForEachVs
2caa0 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
2cab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cac0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
2cad0 2c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61  , ProcessVsPacka
2cae0 67 65 2c 20 70 61 63 6b 61 67 65 2c 20 66 69 6c  ge, package, fil
2caf0 65 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20 20  eNamePair,..    
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
2cb20 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
2cb30 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
2cb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
2cb60 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
2cb70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2cb90 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
2cba0 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
2cbb0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbd0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2cbe0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2cbf0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc10 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
2cc20 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
2cc30 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
2cc40 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
2cc60 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
2cc70 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2cc80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2cc90 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
2cca0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2ccb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2ccc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2ccd0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2cd30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2cd40 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 53 6f  region VS DataSo
2cd50 75 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  urce..          
2cd60 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
2cd70 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73  ion.HasFlags(Ins
2cd80 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61  tallFlags.VsData
2cd90 53 6f 75 72 63 65 2c 20 74 72 75 65 29 29 0d 0a  Source, true))..
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2cdc0 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
2cdd0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdf0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50         vsList, P
2ce00 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72  rocessVsDataSour
2ce10 63 65 2c 20 70 61 63 6b 61 67 65 2c 20 66 69 6c  ce, package, fil
2ce20 65 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20 20  eNamePair,..    
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
2ce50 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
2ce60 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
2ce70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ce80 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
2ce90 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
2cea0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2cec0 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
2ced0 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
2cee0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf00 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2cf10 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2cf20 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a   thisAssembly,..
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf40 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
2cf50 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
2cf60 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
2cf70 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
2cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
2cf90 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
2cfa0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
2cfb0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2cfc0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
2cfd0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
2cfe0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2cff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d000 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2d010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2d060 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2d070 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 50 72  region VS DataPr
2d080 6f 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20  ovider..        
2d090 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
2d0a0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49  ation.HasFlags(I
2d0b0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61  nstallFlags.VsDa
2d0c0 74 61 50 72 6f 76 69 64 65 72 2c 20 74 72 75 65  taProvider, true
2d0d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2d0e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2d0f0 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56     if (!ForEachV
2d100 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79  sVersionRegistry
2d110 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d120 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
2d130 74 2c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  t, ProcessVsData
2d140 50 72 6f 76 69 64 65 72 2c 20 70 61 63 6b 61 67  Provider, packag
2d150 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 2c  e, fileNamePair,
2d160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d170 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2d180 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20  uration.WhatIf, 
2d190 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65  configuration.Ve
2d1a0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1c0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
2d200 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
2d210 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
2d220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d230 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2d240 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2d250 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d  lback, thisAssem
2d260 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
2d270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2d280 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
2d290 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
2d2a0 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2c0 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
2d2d0 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  n.Error);....   
2d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2f0 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
2d300 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
2d310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d320 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d330 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2d340 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2d350 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d390 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2d3a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67       #region Log
2d3b0 20 53 75 6d 6d 61 72 79 0d 0a 20 20 20 20 20 20   Summary..      
2d3c0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2d3d0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2d3e0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
2d3f0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2d400 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2d410 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2d420 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2d430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d440 20 20 22 73 75 62 4b 65 79 73 43 72 65 61 74 65    "subKeysCreate
2d450 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 73  d = {0}, subKeys
2d460 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20 22  Deleted = {1}, "
2d470 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2d480 20 20 20 20 22 6b 65 79 56 61 6c 75 65 73 53 65      "keyValuesSe
2d490 74 20 3d 20 7b 32 7d 2c 20 6b 65 79 56 61 6c 75  t = {2}, keyValu
2d4a0 65 73 44 65 6c 65 74 65 64 20 3d 20 7b 33 7d 22  esDeleted = {3}"
2d4b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d4c0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65     ForDisplay(Re
2d4d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 75 62  gistryHelper.Sub
2d4e0 4b 65 79 73 43 72 65 61 74 65 64 29 2c 0d 0a 20  KeysCreated),.. 
2d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2d500 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74  orDisplay(Regist
2d510 72 79 48 65 6c 70 65 72 2e 53 75 62 4b 65 79 73  ryHelper.SubKeys
2d520 44 65 6c 65 74 65 64 29 2c 0d 0a 20 20 20 20 20  Deleted),..     
2d530 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2d540 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65  splay(RegistryHe
2d550 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 53 65  lper.KeyValuesSe
2d560 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2d570 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
2d580 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b  RegistryHelper.K
2d590 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 29  eyValuesDeleted)
2d5a0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d5b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2d5c0 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
2d5d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2d5e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2d5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2d640 74 75 72 6e 20 30 3b 20 2f 2a 20 53 55 43 43 45  turn 0; /* SUCCE
2d650 53 53 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7d  SS */..        }
2d660 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2d670 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  gion..    }..   
2d680 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a   #endregion..}..