System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5f37def4f8bc592393f9513b4a2594b0c501120a:


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 3b 0d 0a 75 73 69 6e 67 20   System;..using 
0090: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
00a0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73 69  ns.Generic;..usi
00b0: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
00c0: 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53 79  stics;..using Sy
00d0: 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65 53  stem.EnterpriseS
00e0: 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61 6c  ervices.Internal
00f0: 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  ;..using System.
0100: 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  IO;..using Syste
0110: 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a 75  m.Reflection;..u
0120: 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74  sing System.Runt
0130: 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72 76  ime.CompilerServ
0140: 69 63 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79 73  ices;..using Sys
0150: 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a  tem.Threading;..
0160: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e  using System.Win
0170: 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69  dows.Forms;..usi
0180: 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a  ng System.Xml;..
0190: 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e  using Microsoft.
01a0: 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70  Win32;....namesp
01b0: 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ace System.Data.
01c0: 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23  SQLite..{..    #
01d0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65  region Public De
01e0: 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74  legates..    int
01f0: 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76  ernal delegate v
0200: 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63  oid TraceCallbac
0210: 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  k(..        stri
0220: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
0230: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
0240: 67 6f 72 79 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  gory..    );....
0250: 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
02a0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
02b0: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
02c0: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
02d0: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
02e0: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
02f0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
0300: 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
0310: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
0320: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
0330: 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
0340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
0350: 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
0360: 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
0370: 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
0380: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
0390: 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
03a0: 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
03b0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
03c0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
03d0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
03e0: 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ,..        bool 
03f0: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
0400: 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
0410: 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
0420: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
0430: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0480: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0490: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
04a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
04b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
04c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
04d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
04e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
04f0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
0500: 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
0510: 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
0520: 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
0530: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
0540: 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
0550: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0560: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
0570: 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
0580: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
0590: 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
05a0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
05b0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76  ..        bool v
05c0: 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
05d0: 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
05e0: 72 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20  r..    );....   
05f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0640: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c      internal del
0650: 65 67 61 74 65 20 62 6f 6f 6c 20 56 69 73 75 61  egate bool Visua
0660: 6c 53 74 75 64 69 6f 52 65 67 69 73 74 72 79 43  lStudioRegistryC
0670: 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
0680: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b    Installer.Mock
0690: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
06a0: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 65  Key,..        Ve
06b0: 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
06c0: 0d 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c  ..        Instal
06d0: 6c 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b  ler.Package pack
06e0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62  age,..        ob
06f0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
0700: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0710: 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 62  ow64,..        b
0720: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0730: 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f  ng,..        boo
0740: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
0750: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
0760: 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
0770: 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
0780: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0790: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
07a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
07e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
07f0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0800: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0810: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0820: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0830: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0840: 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30        None = 0x0
0850: 2c 0d 0a 20 20 20 20 20 20 20 20 47 41 43 20 3d  ,..        GAC =
0860: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41   0x1,..        A
0870: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d  ssemblyFolders =
0880: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x2,..        D
0890: 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
08a0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
08b0: 20 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38   VsPackage = 0x8
08c0: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
08d0: 61 53 6f 75 72 63 65 20 3d 20 30 78 31 30 2c 0d  aSource = 0x10,.
08e0: 0a 20 20 20 20 20 20 20 20 56 73 44 61 74 61 50  .        VsDataP
08f0: 72 6f 76 69 64 65 72 20 3d 20 30 78 32 30 2c 0d  rovider = 0x20,.
0900: 0a 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f  .        Framewo
0910: 72 6b 20 3d 20 47 41 43 20 7c 20 41 73 73 65 6d  rk = GAC | Assem
0920: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 20 44 62 50  blyFolders | DbP
0930: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d  roviderFactory,.
0940: 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73  .        Vs = Vs
0950: 50 61 63 6b 61 67 65 20 7c 20 56 73 44 61 74 61  Package | VsData
0960: 53 6f 75 72 63 65 20 7c 20 56 73 44 61 74 61 50  Source | VsDataP
0970: 72 6f 76 69 64 65 72 2c 0d 0a 20 20 20 20 20 20  rovider,..      
0980: 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f 72    All = Framewor
0990: 6b 20 7c 20 56 73 2c 0d 0a 20 20 20 20 20 20 20  k | Vs,..       
09a0: 20 41 6c 6c 45 78 63 65 70 74 47 41 43 20 3d 20   AllExceptGAC = 
09b0: 41 6c 6c 20 26 20 7e 47 41 43 2c 0d 0a 20 20 20  All & ~GAC,..   
09c0: 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 41       Default = A
09d0: 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ll..    }....   
09e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
09f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0a30: 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20      [Flags()].. 
0a40: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54     public enum T
0a50: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
0a60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e    {..        Non
0a70: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0a80: 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d    Lowest = 0x1,.
0a90: 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20 3d  .        Lower =
0aa0: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c   0x2,..        L
0ab0: 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20  ow = 0x4,..     
0ac0: 20 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d 20 30     MediumLow = 0
0ad0: 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  x8,..        Med
0ae0: 69 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20  ium = 0x10,..   
0af0: 20 20 20 20 20 4d 65 64 69 75 6d 48 69 67 68 20       MediumHigh 
0b00: 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x20,..       
0b10: 20 48 69 67 68 20 3d 20 30 78 34 30 2c 0d 0a 20   High = 0x40,.. 
0b20: 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d 20         Higher = 
0b30: 30 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x80,..        H
0b40: 69 67 68 65 73 74 20 3d 20 30 78 31 30 30 2c 0d  ighest = 0x100,.
0b50: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
0b60: 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 7d   = Medium..    }
0b70: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
0b80: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0bd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0be0: 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61  on Installer Cla
0bf0: 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ss..    internal
0c00: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e   static class In
0c10: 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a  staller..    {..
0c20: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0c30: 50 72 69 76 61 74 65 20 48 65 6c 70 65 72 20 43  Private Helper C
0c40: 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20  lasses..        
0c50: 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20  #region AnyPair 
0c60: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
0c70: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
0c80: 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20  ass AnyPair<T1, 
0c90: 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  T2>..        {..
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
0cb0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
0cc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
0cd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
0ce0: 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a       // WARNING:
0cf0: 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f   This constructo
0d00: 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d  r produces an im
0d10: 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20  mutable "empty" 
0d20: 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20  pair..          
0d30: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62    //          ob
0d40: 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ject...         
0d50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
0d60: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
0d70: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r()..           
0d80: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
0d90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0db0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
0dc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0dd0: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
0e30: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
0e40: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
0e50: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
0e60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0e80: 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20  s.x = x;..      
0e90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0ea0: 20 20 20 20 20 20 20 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
0ef0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
0f00: 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54   AnyPair(T1 x, T
0f10: 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2 y)..          
0f20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d        : this(x).
0f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f50: 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20  this.y = y;..   
0f60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0f70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
0f80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
0f90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0fe0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
0ff0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1000: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1010: 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20  ate T1 x;..     
1020: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 31         public T1
1030: 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   X..            
1040: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1050: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1060: 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
1070: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1080: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1090: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
10d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 32        private T2
10e0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
10f0: 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20   public T2 Y..  
1100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1120: 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a   { return y; }..
1130: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1140: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1150: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1160: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1170: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11d0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
11e0: 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Ops Class..     
11f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1200: 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73  c class TraceOps
1210: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1220: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1230: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1240: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1250: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1260: 72 69 6e 67 20 44 65 66 61 75 6c 74 44 65 62 75  ring DefaultDebu
1270: 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20  gFormat = "#{0} 
1280: 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20  @ {1}: {2}";..  
1290: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
12a0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  e const string D
12b0: 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61  efaultTraceForma
12c0: 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a  t = "#{0} @ {1}:
12d0: 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20   {2}";....      
12e0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
12f0: 6e 73 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36  nst string Iso86
1300: 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74  01DateTimeOutput
1310: 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20  Format =..      
1320: 20 20 20 20 20 20 20 20 20 20 22 79 79 79 79 2e            "yyyy.
1330: 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66  MM.ddTHH:mm:ss.f
1340: 66 66 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20  ffffff";..      
1350: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
13c0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
13d0: 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a  te Static Data..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
13f0: 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63  ate static objec
1400: 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77  t syncRoot = new
1410: 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20   object();..    
1420: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1430: 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74  static long next
1440: 44 65 62 75 67 49 64 3b 0d 0a 20 20 20 20 20 20  DebugId;..      
1450: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1460: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 54 72  atic long nextTr
1470: 61 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  aceId;..        
1480: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1490: 69 63 20 49 4c 69 73 74 3c 54 72 61 63 65 4c 69  ic IList<TraceLi
14a0: 73 74 65 6e 65 72 3e 20 64 65 62 75 67 4c 69 73  stener> debugLis
14b0: 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20 20 20  teners;..       
14c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
14d0: 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  tic TracePriorit
14e0: 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  y debugPriority 
14f0: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1500: 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20  Default;..      
1510: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1520: 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  atic TracePriori
1530: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1540: 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79   = TracePriority
1550: 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 20  .Default;..     
1560: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1570: 74 61 74 69 63 20 73 74 72 69 6e 67 20 64 65 62  tatic string deb
1580: 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75  ugFormat = Defau
1590: 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  ltDebugFormat;..
15a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15b0: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
15c0: 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  g traceFormat = 
15d0: 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72 6d  DefaultTraceForm
15e0: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
15f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1600: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1660: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
1670: 74 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  tic Properties..
1680: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1690: 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65 50  ic static TraceP
16a0: 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69  riority DebugPri
16b0: 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
16c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16d0: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
16e0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
16f0: 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69  turn debugPriori
1700: 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ty; } }..       
1710: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
1720: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
1730: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d   debugPriority =
1740: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
1750: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1760: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 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 0d 0a 0d  /////////////...
17b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
17c0: 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63 65  lic static Trace
17d0: 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
17e0: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
17f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1800: 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63         get { loc
1810: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72  k (syncRoot) { r
1820: 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72  eturn tracePrior
1830: 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  ity; } }..      
1840: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1850: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
1860: 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
1870: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
1880: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1890: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18f0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
1900: 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a  ng DebugFormat..
1910: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1930: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
1940: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65  oot) { return de
1950: 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  bugFormat; } }..
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1970: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
1980: 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46 6f 72  Root) { debugFor
1990: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
19a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1a10: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1a20: 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d  string TraceForm
1a30: 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
1a40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a50: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
1a60: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
1a70: 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
1a80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a90: 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28      set { lock (
1aa0: 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63  syncRoot) { trac
1ab0: 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
1ac0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
1ad0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ae0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1af0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1b50: 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76  egion Interactiv
1b60: 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64  e Support Method
1b70: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  s..            [
1b80: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1b90: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1ba0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1bb0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1bc0: 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73 75 6c  atic DialogResul
1bd0: 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a  t ShowMessage(..
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
1c00: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c20: 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75  aceCallback debu
1c30: 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c50: 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
1c60: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1c70: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1c80: 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  ly assembly,..  
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1ca0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
1cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1cc0: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 2c 0d  tring category,.
1cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce0: 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
1cf0: 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20 20 20  ns buttons,..   
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
1d10: 73 61 67 65 42 6f 78 49 63 6f 6e 20 69 63 6f 6e  sageBoxIcon icon
1d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d30: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
1d40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d50: 20 20 20 20 44 69 61 6c 6f 67 52 65 73 75 6c 74      DialogResult
1d60: 20 72 65 73 75 6c 74 20 3d 20 44 69 61 6c 6f 67   result = Dialog
1d70: 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20  Result.OK;....  
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
1d90: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
1da0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1dd0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65  raceCallback, me
1de0: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
1df0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e00: 20 20 20 20 20 69 66 20 28 53 79 73 74 65 6d 49       if (SystemI
1e10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49  nformation.UserI
1e20: 6e 74 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20  nteractive)..   
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e50: 20 20 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65      string title
1e60: 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69   = GetAssemblyTi
1e70: 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a  tle(assembly);..
1e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e90: 20 20 20 20 20 20 69 66 20 28 74 69 74 6c 65 20        if (title 
1ea0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63    title = Applic
1ed0: 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d  ation.ProductNam
1ee0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1ef0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1f00: 20 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68   = MessageBox.Sh
1f10: 6f 77 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c  ow(message, titl
1f20: 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e  e, buttons, icon
1f30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f40: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
1f50: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
1f60: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f80: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1f90: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1fa0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc0: 20 20 20 20 20 20 22 55 73 65 72 20 63 68 6f 69        "User choi
1fd0: 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72  ce of {0}.", For
1fe0: 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29  Display(result))
1ff0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2000: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67             categ
2010: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2030: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
2040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2060: 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28    DebugAndTrace(
2070: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2090: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
20a0: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
20b0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d0: 20 20 20 20 20 20 22 44 65 66 61 75 6c 74 20 63        "Default c
20e0: 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20  hoice of {0}.", 
20f0: 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c  ForDisplay(resul
2100: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
2110: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f            catego
2120: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
2140: 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
2150: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2160: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21d0: 23 72 65 67 69 6f 6e 20 54 72 61 63 69 6e 67 20  #region Tracing 
21e0: 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d  Support Methods.
21f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2200: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
2210: 53 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e  SetupDebugListen
2220: 65 72 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ers()..         
2230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2240: 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c        if (debugL
2250: 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c  isteners == null
2260: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2270: 20 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74         debugList
2280: 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69 73 74  eners = new List
2290: 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72 3e 28  <TraceListener>(
22a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22b0: 20 20 20 20 20 20 64 65 62 75 67 4c 69 73 74 65        debugListe
22c0: 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
22d0: 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
22e0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
22f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2340: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2350: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2360: 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 44 65  atic long NextDe
2370: 62 75 67 49 64 28 29 0d 0a 20 20 20 20 20 20 20  bugId()..       
2380: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2390: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49          return I
23a0: 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65  nterlocked.Incre
23b0: 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 44 65 62  ment(ref nextDeb
23c0: 75 67 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20  ugId);..        
23d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2400: 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
2430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2440: 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 54  tatic long NextT
2450: 72 61 63 65 49 64 28 29 0d 0a 20 20 20 20 20 20  raceId()..      
2460: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2470: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2480: 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72  Interlocked.Incr
2490: 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 54 72  ement(ref nextTr
24a0: 61 63 65 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  aceId);..       
24b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2510: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2520: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 69  static string Ti
2530: 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
2540: 20 64 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20   dateTime)..    
2550: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2560: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2570: 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72  n dateTime.ToStr
2580: 69 6e 67 28 49 73 6f 38 36 30 31 44 61 74 65 54  ing(Iso8601DateT
2590: 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29  imeOutputFormat)
25a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2610: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
2620: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
2630: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
2640: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
2650: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2660: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d   GetMethodName(.
2670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2680: 20 53 74 61 63 6b 54 72 61 63 65 20 73 74 61 63   StackTrace stac
2690: 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20  kTrace,..       
26a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76           int lev
26b0: 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  el..            
26c0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
26d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26e0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
26f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2710: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2720: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2730: 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20 73 74  E: If a valid st
2740: 61 63 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f  ack trace was no
2750: 74 20 73 75 70 70 6c 69 65 64 20 62 79 20 74 68  t supplied by th
2760: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2770: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2780: 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f  caller, create o
2790: 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20  ne now based on 
27a0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..   
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75 74   //       execut
27d0: 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20  ion stack...    
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2800: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63          if (stac
2810: 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d  kTrace == null).
2820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2830: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2870: 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 63 75  OTE: Grab the cu
2880: 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20  rrent execution 
2890: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 63              stac
28d0: 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61  kTrace = new Sta
28e0: 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20  ckTrace();....  
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2900: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79    // NOTE: Alway
2930: 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c  s skip this call
2940: 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63   frame when we c
2950: 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  apture..        
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73 74 61  //       the sta
2980: 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20  ck trace...     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
29c0: 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  evel++;..       
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a10: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73   NOTE: Get the s
2a20: 70 65 63 69 66 69 65 64 20 73 74 61 63 6b 20 66  pecified stack f
2a30: 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64  rame (always add
2a40: 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20   one to..       
2a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a60: 20 20 20 20 20 20 73 6b 69 70 20 74 68 69 73 20        skip this 
2a70: 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20  method)...      
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa0: 20 20 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65        StackFrame
2ab0: 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74   stackFrame = st
2ac0: 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d  ackTrace.GetFram
2ad0: 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20  e(level);....   
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b00: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2b10: 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64  : Get the method
2b20: 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66   for the stack f
2b30: 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  rame...         
2b40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b60: 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65     MethodBase me
2b70: 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b  thodBase = stack
2b80: 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28  Frame.GetMethod(
2b90: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ba0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
2bd0: 68 65 20 74 79 70 65 20 66 6f 72 20 74 68 65 20  he type for the 
2be0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c10: 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d       Type type =
2c20: 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c   methodBase.Decl
2c30: 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20  aringType;....  
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c50: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2c60: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2c70: 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20  E: Get the name 
2c80: 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a  of the method...
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2cc0: 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64  ng name = method
2cd0: 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  Base.Name;....  
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2d00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2d10: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 70 72  E: Return the pr
2d20: 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64  operly formatted
2d30: 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20   result...      
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2d70: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22       "{0}{1}{2}"
2da0: 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70  , type.Name, Typ
2db0: 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d  e.Delimiter, nam
2dc0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2dd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2de0: 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
2e20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
2e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e40: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e50: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
2e60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e70: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2ec0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2ed0: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 62 75  static void Debu
2ee0: 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20  gCore(..        
2ef0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
2f00: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
2f10: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2f20: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
2f30: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2f40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
2f60: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 20 20 20 69 66 20 28 64 65 62 75 67 4c 69 73      if (debugLis
2fa0: 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d  teners != null).
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 66 6f 72 65 61 63 68 20 28 54 72 61 63 65 4c 69  foreach (TraceLi
2ff0: 73 74 65 6e 65 72 20 6c 69 73 74 65 6e 65 72 20  stener listener 
3000: 69 6e 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72  in debugListener
3010: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
3020: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3040: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
3050: 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65  ner.WriteLine(me
3060: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
3070: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
3090: 69 73 74 65 6e 65 72 2e 46 6c 75 73 68 28 29 3b  istener.Flush();
30a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
30f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3100: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3140: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3150: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3160: 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65 43  atic void TraceC
3170: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
3180: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
3190: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
31a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
31b0: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
31c0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
31d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31e0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
31f0: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
3200: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3220: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3230: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3240: 45 3a 20 57 72 69 74 65 20 74 68 65 20 6d 65 73  E: Write the mes
3250: 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68 65 20  sage to all the 
3260: 61 63 74 69 76 65 20 74 72 61 63 65 0d 0a 20 20  active trace..  
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 65    //       liste
3290: 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ners...         
32a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
32d0: 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61 74 65  ne(message, cate
32e0: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3300: 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20  e.Flush();..    
3310: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
3320: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3380: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3390: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
33a0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
33b0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
33c0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
33d0: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
33e0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
33f0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
3400: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
3410: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
3420: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
3430: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
3440: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3450: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3460: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3470: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3480: 20 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20        Exception 
3490: 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  exception,..    
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34b0: 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20  ng category..   
34c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
34f0: 66 20 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20  f (exception != 
3500: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3520: 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  n DebugAndTrace(
3530: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 64  tracePriority, d
3540: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3560: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
3570: 62 61 63 6b 2c 20 6e 65 77 20 53 74 61 63 6b 54  back, new StackT
3580: 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20  race(exception, 
3590: 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20  true), 0,..     
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53     exception.ToS
35c0: 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72  tring(), categor
35d0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
35e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
35f0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
3600: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3610: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3660: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
3670: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
3680: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
3690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
36a0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
36b0: 67 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  g DebugAndTrace(
36c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36d0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
36e0: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
3710: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
3730: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
3740: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
3750: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3760: 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
3780: 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20  ing category..  
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
37a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c0: 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e 64 54  return DebugAndT
37d0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
37e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
37f0: 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43  Priority, debugC
3800: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
3810: 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c  llback, null, 1,
3820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3830: 20 20 20 20 20 20 6d 65 73 73 61 67 65 2c 20 63        message, c
3840: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
3850: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3860: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
38b0: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
38c0: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
38d0: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
38e0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
38f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
3900: 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e  c string DebugAn
3910: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
3920: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
3930: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
3940: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
3950: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
3960: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
3970: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
3980: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
3990: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
39a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
39b0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
39c0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
39d0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
39e0: 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  evel,..         
39f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3a00: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
3a10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3a20: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
3a30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3a40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3a50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3a70: 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73  / NOTE: Always s
3a80: 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72  kip this call fr
3a90: 61 6d 65 20 69 66 20 74 68 65 20 73 74 61 63 6b  ame if the stack
3aa0: 20 74 72 61 63 65 20 69 73 0d 0a 20 20 20 20 20   trace is..     
3ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
3ac0: 20 20 20 20 67 6f 69 6e 67 20 74 6f 20 62 65 20      going to be 
3ad0: 63 61 70 74 75 72 65 64 20 62 79 20 47 65 74 4d  captured by GetM
3ae0: 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20  ethodName...    
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d  if (stackTrace =
3b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
3b40: 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  el++;....       
3b50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3b70: 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74 68 65  NOTE: Format the
3b80: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 64 69 73   message for dis
3b90: 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a 20 20  play (once)...  
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bc0: 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 74    string formatt
3bd0: 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ed = String.Form
3be0: 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a  at("{0}: {1}",..
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d      GetMethodNam
3c10: 65 28 73 74 61 63 6b 54 72 61 63 65 2c 20 6c 65  e(stackTrace, le
3c20: 76 65 6c 29 2c 20 6d 65 73 73 61 67 65 29 3b 0d  vel), message);.
3c30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3c40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3c50: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3c60: 49 66 20 74 68 65 20 64 65 62 75 67 20 63 61 6c  If the debug cal
3c70: 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64  lback is invalid
3c80: 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70 72   or the trace pr
3c90: 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
3ca0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3cb0: 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65   of this message
3cc0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68   is less than wh
3cd0: 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20  at we currently 
3ce0: 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20  want to..       
3cf0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3d00: 20 20 64 65 62 75 67 2c 20 73 6b 69 70 20 69 74    debug, skip it
3d10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3d20: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d30: 20 20 20 20 20 20 20 69 66 20 28 28 64 65 62 75         if ((debu
3d40: 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c  gCallback != nul
3d50: 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  l) &&..         
3d60: 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61 63             (trac
3d70: 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 44 65 62  ePriority >= Deb
3d80: 75 67 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20  ugPriority))..  
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
3da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3db0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3dd0: 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65  NOTE: Invoke the
3de0: 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback 
3df0: 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74  with the formatt
3e00: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
3e10: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3e20: 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65   message and the
3e30: 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66   category specif
3e40: 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ied by the..    
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e60: 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e  //       caller.
3e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
3ea0: 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d  bugCallback(form
3eb0: 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29  atted, category)
3ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3ee0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3f00: 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61 63  OTE: If the trac
3f10: 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e  e callback is in
3f20: 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74 72 61  valid or the tra
3f30: 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20  ce priority..   
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3f50: 20 20 20 20 20 20 6f 66 20 74 68 69 73 20 6d 65        of this me
3f60: 73 73 61 67 65 20 69 73 20 6c 65 73 73 20 74 68  ssage is less th
3f70: 61 6e 20 77 68 61 74 20 77 65 20 63 75 72 72 65  an what we curre
3f80: 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20  ntly want to..  
3f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3fa0: 20 20 20 20 20 20 20 74 72 61 63 65 2c 20 73 6b         trace, sk
3fb0: 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  ip it...        
3fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3fe0: 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
3ff0: 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
4000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4010: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3e  (tracePriority >
4020: 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 29  = TracePriority)
4030: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4040: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
4050: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4070: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b    // NOTE: Invok
4080: 65 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  e the trace call
4090: 62 61 63 6b 20 77 69 74 68 20 74 68 65 20 66 6f  back with the fo
40a0: 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20 20 20  rmatted..       
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
40c0: 20 20 20 20 20 20 6d 65 73 73 61 67 65 20 61 6e        message an
40d0: 64 20 74 68 65 20 63 61 74 65 67 6f 72 79 20 73  d the category s
40e0: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 0d  pecified by the.
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4100: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
4110: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
4120: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4140: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4150: 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61 74 65  (formatted, cate
4160: 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
4170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4180: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4190: 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20  urn message;..  
41a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
41b0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
41c0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
41d0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
41e0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4230: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4240: 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67   #region MockReg
4250: 69 73 74 72 79 20 43 6c 61 73 73 0d 0a 20 20 20  istry Class..   
4260: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
4270: 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65  led class MockRe
4280: 67 69 73 74 72 79 20 3a 20 49 44 69 73 70 6f 73  gistry : IDispos
4290: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
42a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
42b0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
42c0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
42d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
42e0: 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20  kRegistry()..   
42f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4300: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
4310: 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  If = true;..    
4320: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64              read
4330: 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Only = true;..  
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
4350: 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  fe = true;..    
4360: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4370: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
43b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
43d0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28  ic MockRegistry(
43e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43f0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4420: 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20    : this()..    
4430: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4440: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
4450: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b  whatIf = whatIf;
4460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4470: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
44d0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
44e0: 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
44f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
4500: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
4510: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
4520: 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
4530: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4540: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 77          : this(w
4550: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
4560: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4570: 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64         this.read
4580: 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b  Only = readOnly;
4590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
45a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
45b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4600: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
4610: 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
4620: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
4630: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
4640: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
4650: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
4660: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
4670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4680: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4690: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
46a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
46b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
46d0: 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a  s.safe = safe;..
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
46f0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
4700: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
4710: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4750: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4760: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
4770: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
4780: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
4790: 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74  rivate bool what
47a0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
47b0: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61   public bool Wha
47c0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
47d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
47e0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
47f0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
4800: 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4820: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
4830: 28 29 3b 20 77 68 61 74 49 66 20 3d 20 76 61 6c  (); whatIf = val
4840: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4850: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4860: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
48b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
48c0: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  ool readOnly;.. 
48d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
48e0: 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d  c bool ReadOnly.
48f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
4920: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 72 65  sed(); return re
4930: 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  adOnly; }..     
4940: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
4950: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4960: 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76 61 6c  ; readOnly = val
4970: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4990: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
49e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
49f0: 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20  ool safe;..     
4a00: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
4a10: 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20  ol Safe..       
4a20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4a30: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
4a40: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
4a50: 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20  eturn safe; }.. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4a70: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
4a80: 65 64 28 29 3b 20 73 61 66 65 20 3d 20 76 61 6c  ed(); safe = val
4a90: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
4aa0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4ab0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
4b10: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
4b20: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
4b30: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b40: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
4b50: 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20 20 20  ClassesRoot..   
4b60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4ba0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4bb0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
4bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bd0: 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20  if (classesRoot 
4be0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c00: 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20    classesRoot = 
4c10: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
4c20: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c40: 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61 73 73    Registry.Class
4c50: 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66 2c 20  esRoot, whatIf, 
4c60: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
4c70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
4c90: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4cb0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4d20: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
4d30: 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74 43  stryKey currentC
4d40: 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20  onfig;..        
4d50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
4d60: 65 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65  egistryKey Curre
4d70: 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20  ntConfig..      
4d80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4d90: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4dc0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
4dd0: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
4de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4df0: 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d  (currentConfig =
4e00: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e20: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 3d   currentConfig =
4e30: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
4e40: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e60: 20 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72     Registry.Curr
4e70: 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61 74 49  entConfig, whatI
4e80: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
4e90: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
4ea0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4eb0: 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b  n currentConfig;
4ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4ed0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
4ee0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4ef0: 20 20 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4f40: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
4f50: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63 75 72  kRegistryKey cur
4f60: 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20  rentUser;..     
4f70: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
4f80: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75  ckRegistryKey Cu
4f90: 72 72 65 6e 74 55 73 65 72 0d 0a 20 20 20 20 20  rrentUser..     
4fa0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4fb0: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
4fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fe0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
4ff0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5010: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 3d 3d   (currentUser ==
5020: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e 65  currentUser = ne
5050: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
5060: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5080: 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  Registry.Current
5090: 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20 72 65  User, whatIf, re
50a0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a  adOnly, safe);..
50b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
50c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75 72        return cur
50d0: 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20 20 20  rentUser;..     
50e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
50f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5160: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
5170: 72 79 4b 65 79 20 64 79 6e 44 61 74 61 3b 0d 0a  ryKey dynData;..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5190: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
51a0: 65 79 20 44 79 6e 44 61 74 61 0d 0a 20 20 20 20  ey DynData..    
51b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
51c0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
51f0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5200: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5220: 66 20 28 64 79 6e 44 61 74 61 20 3d 3d 20 6e 75  f (dynData == nu
5230: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e               dyn
5250: 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  Data = new MockR
5260: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5280: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
5290: 79 2e 44 79 6e 44 61 74 61 2c 20 77 68 61 74 49  y.DynData, whatI
52a0: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
52b0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
52c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
52d0: 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  n dynData;..    
52e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
52f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5300: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5360: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
5370: 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61 63 68  tryKey localMach
5380: 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ine;..          
5390: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
53a0: 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c 4d 61  istryKey LocalMa
53b0: 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20  chine..         
53c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
53d0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
53e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5400: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
5410: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5420: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
5430: 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20 6e 75  calMachine == nu
5440: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63               loc
5460: 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65 77 20  alMachine = new 
5470: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
54a0: 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
54b0: 69 6e 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ine, whatIf, rea
54c0: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
54d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f 63 61       return loca
54f0: 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20  lMachine;..     
5500: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5520: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5580: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
5590: 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61 6e 63  ryKey performanc
55a0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
55b0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
55c0: 65 67 69 73 74 72 79 4b 65 79 20 50 65 72 66 6f  egistryKey Perfo
55d0: 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20 20 20  rmanceData..    
55e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5620: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
5630: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5650: 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  f (performanceDa
5660: 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ta == null)..   
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
5690: 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  Data = new MockR
56a0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
56c0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
56d0: 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y.PerformanceDat
56e0: 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  a, whatIf, readO
56f0: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20  nly, safe);.... 
5700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5710: 20 20 20 72 65 74 75 72 6e 20 70 65 72 66 6f 72     return perfor
5720: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
5730: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5750: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
57a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
57b0: 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73  rivate MockRegis
57c0: 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d 0a 20  tryKey users;.. 
57d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
57e0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
57f0: 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20 20 20  y Users..       
5800: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5810: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5840: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
5850: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
5860: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5870: 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  users == null)..
5880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5890: 20 20 20 20 20 20 20 20 75 73 65 72 73 20 3d 20          users = 
58a0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
58b0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58d0: 20 20 52 65 67 69 73 74 72 79 2e 55 73 65 72 73    Registry.Users
58e0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
58f0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5910: 20 20 72 65 74 75 72 6e 20 75 73 65 72 73 3b 0d    return users;.
5920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5930: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5940: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
5950: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
5960: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
59b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
59c0: 69 6f 6e 20 50 75 62 6c 69 63 20 22 52 65 67 69  ion Public "Regi
59d0: 73 74 72 79 22 20 4d 65 74 68 6f 64 73 0d 0a 20  stry" Methods.. 
59e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
59f0: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
5a00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5a10: 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
5a20: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
5a30: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
5a40: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
5a50: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64          object d
5a60: 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20  efaultValue..   
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
5aa0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
5ab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5ac0: 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74     return Regist
5ad0: 72 79 2e 47 65 74 56 61 6c 75 65 28 6b 65 79 4e  ry.GetValue(keyN
5ae0: 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20  ame, valueName, 
5af0: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
5b00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5b70: 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56  public void SetV
5b80: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
5b90: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
5ba0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
5bb0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
5bc0: 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  alueName,..     
5bd0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
5be0: 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
5bf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5c10: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5c20: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5c40: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
5c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c60: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c80: 20 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56     Registry.SetV
5c90: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
5ca0: 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  lueName, value);
5cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
5d20: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
5d30: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
5d40: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
5d50: 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  keyName,..      
5d60: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5d70: 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20   valueName,..   
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
5d90: 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20  ect value,..    
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
5db0: 73 74 72 79 56 61 6c 75 65 4b 69 6e 64 20 76 61  stryValueKind va
5dc0: 6c 75 65 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20  lueKind..       
5dd0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5de0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5df0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5e00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5e20: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
5e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e40: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e60: 20 20 20 52 65 67 69 73 74 72 79 2e 53 65 74 56     Registry.SetV
5e70: 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61  alue(keyName, va
5e80: 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20  lueName, value, 
5e90: 76 61 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  valueKind);..   
5ea0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5eb0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5ec0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
5ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5ee0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
5f30: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
5f40: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5f50: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
5f60: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
5f70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5f80: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5fa0: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
5fb0: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
5fc0: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
5fd0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
5fe0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6000: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6020: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
6030: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6040: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
6050: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
6060: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6080: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6090: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
60a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
60e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
60f0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
6100: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
6110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6120: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
6130: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
6140: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
6150: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
6160: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
6170: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6180: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
6190: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
61b0: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
61c0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
61d0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
61e0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6200: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
6210: 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  istry).Name);.. 
6220: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
6230: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
6290: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
62a0: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
62b0: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
62d0: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
62f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6310: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6340: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
6350: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
6360: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6380: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
63d0: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
63e0: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6440: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
6450: 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
6460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6490: 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 2e 43     classesRoot.C
64a0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64c0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
64d0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6510: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
6520: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 2e    currentConfig.
6570: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6590: 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e        currentCon
65a0: 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  fig = null;..   
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65e0: 20 20 69 66 20 28 63 75 72 72 65 6e 74 55 73 65    if (currentUse
65f0: 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r != null)..    
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6610: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 20 20 20 63 75 72 72 65 6e 74 55 73 65 72 2e 43     currentUser.C
6640: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
6670: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6690: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
66b0: 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20 6e 75  f (dynData != nu
66c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
6700: 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ata.Close();..  
6710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6720: 20 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74            dynDat
6730: 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  a = null;..     
6740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6750: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6770: 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69 6e 65  if (localMachine
6780: 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 2e 43    localMachine.C
67d0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
67e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67f0: 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e       localMachin
6800: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
6810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6840: 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65 44  if (performanceD
6850: 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata != null)..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6890: 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e 63 65       performance
68a0: 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  Data.Close();.. 
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68c0: 20 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f             perfo
68d0: 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e 75 6c  rmanceData = nul
68e0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6910: 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
6920: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6940: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6960: 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73 65 28      users.Close(
6970: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6990: 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  users = null;.. 
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
69d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
69e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20  /////////////.. 
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a20: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
6a30: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
6a40: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a80: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
6aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ab0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
6ac0: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77  is object is now
6ad0: 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20   disposed...    
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6af0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
6b00: 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64          disposed
6b10: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
6b20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6b40: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6b50: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
6b60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
6bb0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69       #region IDi
6bc0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
6bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6be0: 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73  blic void Dispos
6bf0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
6c00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6c10: 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65      Dispose(true
6c20: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6c30: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
6c40: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
6c50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6c60: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6c70: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6c80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6cd0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6ce0: 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  Destructor..    
6cf0: 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67          ~MockReg
6d00: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
6d10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6d20: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
6d30: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
6d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6d50: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
6d60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6d70: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6d80: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
6de0: 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ion MockRegistry
6df0: 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Key Class..     
6e00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c     internal seal
6e10: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
6e20: 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70  istryKey : IDisp
6e30: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
6e40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
6e50: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
6e60: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
6e70: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6e80: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6e90: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
6ea0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6eb0: 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65     whatIf = true
6ec0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6ed0: 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72     readOnly = tr
6ee0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
6ef0: 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65       safe = true
6f00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6f20: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6f30: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6f80: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
6f90: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
6fa0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
6fb0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6fc0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6fe0: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
6ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7010: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
7020: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7030: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b            this.k
7040: 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20  ey = key;..     
7050: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7060: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
70b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
70c0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
70d0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
70e0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
70f0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
7100: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7110: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
7120: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7130: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
7140: 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  is(key)..       
7150: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7160: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
7170: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
7180: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
7190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
71a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
71f0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7200: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7220: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
7230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7240: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
7250: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7260: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7270: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
7280: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7290: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
72a0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20  , subKeyName).. 
72b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
72d0: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
72e0: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
72f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7300: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7340: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7350: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
7360: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
7380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
73a0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
73b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
73c0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
73d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
73e0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
73f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7400: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
7410: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
7420: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
7430: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
7440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7450: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
7460: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
7470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
74c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
74d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
74e0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
74f0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7500: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7510: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
7520: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
7530: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7550: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
7560: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7570: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
7580: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
7590: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
75a0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
75b0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
75c0: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
75d0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
75e0: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
75f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7600: 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20      this.safe = 
7610: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
7620: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7630: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7680: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
7690: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
76c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
76f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7700: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
7710: 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  ll, whatIf)..   
7720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7740: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7750: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7760: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
77c0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
77d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
77e0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
77f0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
7800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
7810: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
7820: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
7830: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
7840: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
7850: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
7860: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
7870: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
7880: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7890: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
78a0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
78b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
78c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7910: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7920: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
7930: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7940: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
7950: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
7960: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
7970: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
7980: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
7990: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
79a0: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
79c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
79d0: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
79e0: 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ll, whatIf, read
79f0: 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20  Only, safe)..   
7a00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
7a20: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7a30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
7a40: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
7a50: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
7a60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7aa0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7ab0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
7ac0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
7ad0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
7ae0: 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20  oid Close()..   
7af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70  // NOTE: No disp
7b30: 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20  osed check here 
7b40: 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20  because calling 
7b50: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7b70: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be 
7b80: 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e  just like callin
7b90: 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20  g Dispose...    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bc0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c40: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
7c50: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
7c60: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
7c70: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7c80: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
7c90: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
7ca0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7cb0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
7cc0: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
7ce0: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
7cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d00: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
7d10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7d20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
7d30: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
7d40: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
7d50: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
7d60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7d70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d90: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
7da0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
7db0: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
7dc0: 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  y.  If this..   
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c   //       fails,
7df0: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
7e00: 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70  return the wrapp
7e10: 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20  ed root key..   
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
7e40: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
7e50: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20   are allowed in 
7e60: 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20  'what-if'..     
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7e80: 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79  /       mode any
7e90: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
7ea0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
7ed0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
7ee0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
7ef0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7f00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7f10: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
7f20: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
7f40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
7f50: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49     subKey, whatI
7f80: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
7f90: 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
7fb0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
7fc0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
7ff0: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
8000: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
8010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8030: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
8040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8060: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
8070: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75      key.CreateSu
80a0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
80b0: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
80c0: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  ly, safe);..    
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
80e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8150: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
8160: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
8170: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
8180: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
81a0: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
81b0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
81c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
81d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81e0: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
81f0: 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed();..         
8200: 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61 64         CheckRead
8210: 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Only();....     
8220: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
8230: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
8260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8270: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
8290: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73  y.DeleteSubKey(s
82a0: 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
82b0: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
82c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
82d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8330: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
8340: 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
8350: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8360: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
83b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
83c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
83d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
83e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
83f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8410: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
8420: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
8430: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
8440: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
8450: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
8460: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20 20 20  ubKeyName);..   
8470: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8480: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
84e0: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56  lic void DeleteV
84f0: 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
8500: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
8510: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
8520: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
8530: 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
8540: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8550: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8560: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8570: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8590: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
85a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85b0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
85c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
85d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
85e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
85f0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
8600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8610: 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56       key.DeleteV
8620: 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77  alue(name, throw
8630: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20 20 20  OnMissing);..   
8640: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8650: 20 20 20 20 20 20 20 20 20 20 2f 2f 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 0d 0a 0d  /////////////...
86a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
86b0: 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  lic string[] Get
86c0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d 0a 20  SubKeyNames().. 
86d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
86f0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
8700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8710: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8720: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8730: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8740: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8750: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
8760: 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  ey.GetSubKeyName
8770: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
8780: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
8790: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
87a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
87e0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a        public obj
87f0: 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20  ect GetValue(.. 
8800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8810: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
8820: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
8830: 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65  ect defaultValue
8840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8850: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
8860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8870: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
8880: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
8890: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
88a0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
88c0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
88e0: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
88f0: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
8900: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
8910: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8920: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8970: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8980: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
8990: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
89b0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
89d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
89e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89f0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
8a00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8a10: 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70 65 6e       return Open
8a20: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
8a30: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
8a40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8a50: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8ab0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8ac0: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey OpenSubKey(..
8ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ae0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
8af0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8b00: 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c      bool writabl
8b10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8b20: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8b30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8b40: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
8b50: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
8b60: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 72 69           if (wri
8b70: 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20 20 20  table)..        
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8b90: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bb0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
8bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8bd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
8be0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
8bf0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8c00: 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f  y subKey = key.O
8c10: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
8c40: 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69  If ? false : wri
8c50: 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  table);....     
8c60: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
8c70: 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c  n (subKey != nul
8c80: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
8c90: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
8ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 73 75  ckRegistryKey(su
8cb0: 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72 65  bKey, whatIf, re
8cc0: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a 20  adOnly, safe) : 
8cd0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
8ce0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8cf0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8d40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
8d50: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8d70: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
8d80: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
8d90: 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
8da0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8dc0: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
8dd0: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
8df0: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
8e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e10: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8e20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8e30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
8e40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8e50: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
8e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8e70: 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75       key.SetValu
8e80: 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d  e(name, value);.
8e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
8eb0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
8ec0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8f10: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
8f20: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
8f30: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
8f40: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4e 61  public string Na
8f50: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
8f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8f70: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
8f80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
8fa0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
8fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8fc0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
8fd0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ff0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
9000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9010: 20 20 20 20 20 72 65 74 75 72 6e 20 21 53 74 72       return !Str
9020: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
9030: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20 3f 0d  y(subKeyName) ?.
9040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9050: 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
9060: 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d  Format("{0}\\{1}
9070: 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73 75 62  ", key.Name, sub
9080: 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20 20 20  KeyName) :..    
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20      key.Name;.. 
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
90c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
90d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9130: 20 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74    private Regist
9140: 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20 20 20  ryKey key;..    
9150: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 52          public R
9160: 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79 0d 0a  egistryKey Key..
9170: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
9190: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
91a0: 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66 65 28  ed(); CheckSafe(
91b0: 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b 20 7d  ); return key; }
91c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
91d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
91e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9230: 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
9240: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20   subKeyName;..  
9250: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9260: 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79 4e 61   string SubKeyNa
9270: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
9280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9290: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
92a0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
92b0: 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a   subKeyName; }..
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
92d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
92e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9320: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9330: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
9340: 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
9350: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
9360: 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
9370: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9380: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
9390: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
93a0: 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20  rn whatIf; }..  
93b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
93c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
93d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
93f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9420: 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f  ivate bool readO
9430: 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nly;..          
9440: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52 65    public bool Re
9450: 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  adOnly..        
9460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9470: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
9480: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
9490: 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b 20 7d  turn readOnly; }
94a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
94b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
94c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9510: 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 73 61    public bool sa
9520: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
9530: 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66   public bool Saf
9540: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
9550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9560: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
9570: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
9580: 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  safe; }..       
9590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
95a0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
95b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9600: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9610: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
9620: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
9630: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
9640: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
9650: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9660: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9670: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
9680: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
9690: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
96a0: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
96b0: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
96c0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
96d0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
96e0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
96f0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
9700: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9710: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
9720: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
9730: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
9740: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
9750: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
97b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
97c0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
97d0: 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20 20 20  kSafe()..       
97e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
97f0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9800: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
9810: 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22 20 6d  OTE: In "safe" m
9820: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
9830: 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63 63 65   all direct acce
9840: 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ss to the..     
9850: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9860: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 72 65      contained re
9870: 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20 20 20  gistry key...   
9880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
9890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
98a0: 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20 20 20   if (!safe)..   
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98c0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
98e0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
98f0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
9900: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9910: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
9920: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9930: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9980: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
9990: 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a 65 63  ion System.Objec
99a0: 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20 20 20  t Overrides..   
99b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99c0: 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20  override string 
99d0: 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20 20 20  ToString()..    
99e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
99f0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
9a00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9a20: 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d 65 3b  eturn this.Name;
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
9a50: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9a60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9ab0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
9ac0: 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e 76 65  n Implicit Conve
9ad0: 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72 73 0d  rsion Operators.
9ae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
9af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
9b00: 42 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d  BUGBUG: Remove m
9b10: 65 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  e?  This should 
9b20: 62 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20  be safe because 
9b30: 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20  in 'what-if'..  
9b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
9b50: 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65       mode all ke
9b60: 79 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65  ys are opened re
9b70: 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  ad-only...      
9b80: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9b90: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
9ba0: 74 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65  tic implicit ope
9bb0: 72 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65  rator RegistryKe
9bc0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
9bd0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
9be0: 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  Key key..       
9bf0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
9c00: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9c10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9c20: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
9c30: 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c  ? key.Key : null
9c40: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
9c60: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
9c70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9cc0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
9cd0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
9ce0: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
9cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9d00: 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f  ivate bool dispo
9d10: 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  sed;..          
9d20: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
9d30: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
9d40: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
9d50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9d60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
9d70: 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9d90: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9da0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
9db0: 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73  new ObjectDispos
9dc0: 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20  edException(..  
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67    typeof(MockReg
9df0: 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b  istryKey).Name);
9e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9e10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9e70: 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f    private /* pro
9e80: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a  tected virtual *
9e90: 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d  / void Dispose(.
9ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9eb0: 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d   bool disposing.
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9ee0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9ef0: 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64     if (!disposed
9f00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9f20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69            if (di
9f30: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
9f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
9f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f60: 20 20 20 20 20 20 20 20 20 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 0d 0a 20  /////////////.. 
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73         // dispos
9fb0: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
9fc0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fe0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a020: 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d 20       if (key != 
a030: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
a050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
a070: 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  y.Close();..    
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e 75          key = nu
a0a0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
a120: 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65           // rele
a130: 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65  ase unmanaged re
a140: 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d  sources here....
a150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a160: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a1a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
a1b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
a1c0: 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  TE: This object 
a1d0: 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e  is now disposed.
a1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a1f0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
a210: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
a220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a230: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
a240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
a250: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
a260: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a2b0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
a2c0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
a2d0: 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20  embers..        
a2e0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
a2f0: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20  Dispose()..     
a300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a310: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
a320: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
a330: 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70            GC.Sup
a340: 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68  pressFinalize(th
a350: 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  is);..          
a360: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a370: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a380: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a3e0: 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
a3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d  ..            ~M
a400: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
a410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a430: 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29 3b   Dispose(false);
a440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a460: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
a470: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a480: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a490: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a4e0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65 67       #region Reg
a4f0: 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61 73  istryHelper Clas
a500: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
a510: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
a520: 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d 0a  RegistryHelper..
a530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a540: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
a550: 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f  ublic Static Pro
a560: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
a570: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
a580: 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73 43  tic int subKeysC
a590: 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  reated;..       
a5a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a5b0: 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43 72  ic int SubKeysCr
a5c0: 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  eated..         
a5d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a5e0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
a5f0: 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74 65  rn subKeysCreate
a600: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
a610: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a620: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a670: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
a680: 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73  atic int subKeys
a690: 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20  Deleted;..      
a6a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
a6b0: 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 44  tic int SubKeysD
a6c0: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
a6d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a6e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
a6f0: 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65 74  urn subKeysDelet
a700: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
a710: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
a720: 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
a770: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
a780: 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61 6c  tatic int keyVal
a790: 75 65 73 53 65 74 3b 0d 0a 20 20 20 20 20 20 20  uesSet;..       
a7a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
a7b0: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
a7c0: 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Set..           
a7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a7e0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
a7f0: 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 20 7d   keyValuesSet; }
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a870: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
a880: 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65   int keyValuesDe
a890: 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  leted;..        
a8a0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
a8b0: 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44  c int KeyValuesD
a8c0: 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20  eleted..        
a8d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a8e0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
a8f0: 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  urn keyValuesDel
a900: 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  eted; }..       
a910: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
a920: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
a930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a990: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
a9a0: 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Static Methods..
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
a9c0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
a9d0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
a9e0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
a9f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
aa00: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
aa10: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
aa30: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
aa40: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
aa50: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
aa60: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aa80: 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20  l writable,..   
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
aaa0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
aab0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
aac0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
aad0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
aae0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
aaf0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
ab00: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
ab10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab20: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
ab30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ab40: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
ab50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ab60: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
ab70: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
ab80: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aba0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
abb0: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
abc0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
abd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abe0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
abf0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
ac00: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
ac10: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
ac20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ac30: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
ac40: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
ac50: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
ac60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ac70: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
ac80: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
ac90: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
aca0: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
acd0: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
ace0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
acf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ad10: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66  / HACK: Always f
ad20: 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61  orbid writable a
ad30: 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61  ccess when opera
ad40: 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20  ting in..       
ad50: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
ad60: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
ad70: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ad80: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
ad90: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
ada0: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
adb0: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
adc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
add0: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
ade0: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
adf0: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
ae00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae10: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
ae20: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
ae40: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
ae50: 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61  (key, whatIf, fa
ae60: 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75  lse, false) : nu
ae70: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
ae80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ae90: 20 20 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 2f 2f  ////////////////
aeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aed0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
aee0: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
aef0: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
af00: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
af10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
af20: 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52  lic static MockR
af30: 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74  egistryKey Creat
af40: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
af50: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
af60: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
af70: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
af80: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
af90: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
afa0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
afb0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
afc0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
afd0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
afe0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
aff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b000: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
b010: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
b020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b030: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
b080: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
b090: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
b0a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b0b0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
b0c0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
b0d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
b0e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b100: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
b110: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
b120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b130: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
b140: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
b150: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
b160: 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  yName)),..      
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
b190: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b1a0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
b1b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1d0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b1e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
b1f0: 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20  : Always open a 
b200: 6b 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e  key, rather than
b210: 20 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68   creating one wh
b220: 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
b230: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
b240: 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77   operating in 'w
b250: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
b260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b270: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
b280: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
b290: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2c0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2e0: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
b2f0: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
b300: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
b310: 79 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  y.  If..        
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b330: 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61  //       this fa
b340: 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d  ils, we will sim
b350: 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72  ply return the r
b360: 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oot..           
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
b380: 20 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66        key itself
b390: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
b3a0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d   are allowed in.
b3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b3c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
b3d0: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
b3e0: 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20   anyhow...      
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b400: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
b420: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
b430: 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e  y = rootKey.Open
b440: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
b450: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
b460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b470: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
b480: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63     key : new Moc
b4b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b4e0: 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61  ootKey, subKeyNa
b4f0: 6d 65 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73  me, whatIf, fals
b500: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b530: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b560: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b570: 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73  rn new MockRegis
b580: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5a0: 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65       rootKey.Cre
b5b0: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
b5c0: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66  Name), whatIf, f
b5d0: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20     false);..    
b600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b630: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b660: 20 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65        subKeysCre
b670: 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ated++;..       
b680: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b690: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
b6a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
b700: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
b710: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
b720: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
b730: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
b740: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
b750: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
b760: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
b770: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
b780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b790: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
b7a0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
b7b0: 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
b7c0: 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
b7d0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
b7e0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
b7f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
b800: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
b810: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b820: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b830: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
b840: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b880: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
b8a0: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
b8b0: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
b8c0: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8e0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
b8f0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
b900: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
b910: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
b920: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
b930: 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
b940: 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a  eyName = {1}",..
b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b960: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
b970: 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72  ay(rootKey), For
b980: 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
b990: 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b9b0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
b9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b9d0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65      rootKey.Dele
ba00: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
ba10: 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ame, throwOnMiss
ba20: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
ba30: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
ba40: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
ba50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ba60: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
bac0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
bad0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
bae0: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
baf0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
bb00: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
bb10: 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
bb20: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
bb30: 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
bb40: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bb50: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
bb60: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
bb70: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
bb80: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
bb90: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
bba0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
bbb0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
bbc0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bbd0: 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
bbe0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc00: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
bc10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
bc20: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
bc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
bc40: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
bc50: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
bc60: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
bc90: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
bca0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
bcb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bcc0: 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b            "rootK
bcd0: 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ey = {0}, subKey
bce0: 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  Name = {1}",..  
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd00: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
bd10: 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69  (rootKey), ForDi
bd20: 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65  splay(subKeyName
bd30: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
bd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
bd50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd90: 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65    rootKey.Delete
bda0: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
bdb0: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
bdc0: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
bdd0: 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  ysDeleted++;..  
bde0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
be40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
be50: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
be60: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
be70: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
be80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
be90: 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74  tic string[] Get
bea0: 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20  SubKeyNames(..  
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
bed0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
bee0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
bef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf00: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
bf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf40: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
bf50: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
bf60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
bf70: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
bf80: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
bf90: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
bfa0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
bfb0: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
bfc0: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
bfd0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
bff0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
c000: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
c010: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c030: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c      "key = {0}",
c040: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
c050: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
c060: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
c080: 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
c090: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
c0a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
c0b0: 20 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 2f 2f  ////////////////
c0f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
c100: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
c110: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
c120: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
c130: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c140: 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  ic static object
c150: 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20   GetValue(..    
c160: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c170: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
c180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c190: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61  object defaultVa
c1c0: 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lue,..          
c1d0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
c1e0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
c1f0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
c200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c210: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c230: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
c240: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
c250: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c260: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c270: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
c280: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
c290: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
c2a0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
c2b0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
c2c0: 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  .High,..        
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
c2f0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
c300: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
c330: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65  , name = {1}, de
c340: 66 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d  faultValue = {2}
c350: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
c360: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
c370: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
c380: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a  Display(name),..
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
c3b0: 61 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29  ay(defaultValue)
c3c0: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
c3d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c3e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
c3f0: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
c400: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
c410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c480: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
c490: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
c4a0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
c4b0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
c4c0: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
c4d0: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
c4e0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c4f0: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
c510: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
c520: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
c530: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
c540: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
c550: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
c560: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
c570: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
c580: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
c590: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
c5a0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
c5b0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c5d0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
c5e0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
c5f0: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
c600: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
c610: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
c620: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
c630: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
c660: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
c670: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c690: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
c6a0: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76  }, name = {1}, v
c6b0: 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20  alue = {2}",..  
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
c6e0: 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  (key), ForDispla
c6f0: 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70  y(name), ForDisp
c700: 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a 20 20  lay(value)),..  
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c720: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
c730: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
c740: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
c750: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
c760: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53             key.S
c770: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61  etValue(name, va
c780: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
c790: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
c7a0: 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20 20  esSet++;..      
c7b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c7c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
c810: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
c820: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
c830: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
c840: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
c850: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
c860: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
c870: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c880: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c890: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
c8a0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
c8b0: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
c8c0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
c8d0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
c8f0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
c900: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
c910: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
c920: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
c930: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c940: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
c950: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c970: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
c980: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c990: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c9b0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c9c0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c9d0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
ca00: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
ca10: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
ca20: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ca30: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
ca40: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
ca50: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
ca60: 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ey),..          
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
ca80: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c  rDisplay(name)),
ca90: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
caa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cab0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cad0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
cae0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f  Value(name, thro
caf0: 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a  wOnMissing);....
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
cb20: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb30: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
cb40: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
cb50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cb60: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cb70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cbc0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cbd0: 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73  StringList Class
cbe0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
cbf0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
cc00: 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74  tringList : List
cc10: 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20  <string>..      
cc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cc30: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
cc40: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
cc50: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc80: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
cc90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
ccb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ccd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ccf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
cd00: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
cd10: 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72  (IEnumerable<str
cd20: 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ing> collection)
cd30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd40: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
cd50: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
cd60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cd70: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
cd80: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
cd90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
cda0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
cdb0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ce00: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ce10: 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69  #region StringDi
ce20: 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a  ctionary Class..
ce30: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ce40: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
ce50: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20  ingDictionary : 
ce60: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
ce70: 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  g, string>..    
ce80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ce90: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
cea0: 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20  Dictionary()..  
ceb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ced0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
cee0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
cf00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
cf10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
cf60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
cf70: 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73  VersionList Clas
cf80: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
cf90: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
cfa0: 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69  VersionList : Li
cfb0: 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20  st<Version>..   
cfc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cfd0: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
cfe0: 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  onList()..      
cff0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
d000: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
d010: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d020: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
d030: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
d040: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d090: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d0a0: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
d0b0: 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  nList(IEnumerabl
d0c0: 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65  e<Version> colle
d0d0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
d0e0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63          : base(c
d0f0: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
d100: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
d120: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
d130: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
d140: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
d150: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
d160: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d1b0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
d1c0: 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a  rsionMap Class..
d1d0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
d1e0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
d1f0: 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f  sionMap : Dictio
d200: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72  nary<string, Ver
d210: 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20  sionList>..     
d220: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d230: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
d240: 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Map()..         
d250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d260: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
d270: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
d280: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
d290: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d2a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
d2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
d300: 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
d310: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
d320: 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20  internal sealed 
d330: 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20  class Package.. 
d340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d350: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
d360: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
d370: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d380: 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d  ublic Package().
d390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3b0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d3d0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
d3e0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
d3f0: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d430: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d440: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
d450: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
d460: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d470: 72 69 76 61 74 65 20 47 75 69 64 20 70 61 63 6b  rivate Guid pack
d480: 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  ageId;..        
d490: 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64 20      public Guid 
d4a0: 50 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20 20  PackageId..     
d4b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d4c0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
d4d0: 72 65 74 75 72 6e 20 70 61 63 6b 61 67 65 49 64  return packageId
d4e0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
d4f0: 20 20 20 20 20 73 65 74 20 7b 20 70 61 63 6b 61       set { packa
d500: 67 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  geId = value; }.
d510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d580: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 73 65   private Guid se
d590: 72 76 69 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  rviceId;..      
d5a0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
d5b0: 64 20 53 65 72 76 69 63 65 49 64 0d 0a 20 20 20  d ServiceId..   
d5c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
d5e0: 7b 20 72 65 74 75 72 6e 20 73 65 72 76 69 63 65  { return service
d5f0: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
d600: 20 20 20 20 20 20 20 73 65 74 20 7b 20 73 65 72         set { ser
d610: 76 69 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20  viceId = value; 
d620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
d630: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
d690: 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20     private Guid 
d6a0: 64 61 74 61 53 6f 75 72 63 65 49 64 3b 0d 0a 20  dataSourceId;.. 
d6b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d6c0: 63 20 47 75 69 64 20 44 61 74 61 53 6f 75 72 63  c Guid DataSourc
d6d0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
d6e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d6f0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d700: 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 20 7d   dataSourceId; }
d710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d720: 20 20 73 65 74 20 7b 20 64 61 74 61 53 6f 75 72    set { dataSour
d730: 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ceId = value; }.
d740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
d750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
d760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
d7b0: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 64 61   private Guid da
d7c0: 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a 20  taProviderId;.. 
d7d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
d7e0: 63 20 47 75 69 64 20 44 61 74 61 50 72 6f 76 69  c Guid DataProvi
d7f0: 64 65 72 49 64 0d 0a 20 20 20 20 20 20 20 20 20  derId..         
d800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d810: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
d820: 72 6e 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  rn dataProviderI
d830: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
d840: 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74 61        set { data
d850: 50 72 6f 76 69 64 65 72 49 64 20 3d 20 76 61 6c  ProviderId = val
d860: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
d870: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d880: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d8c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
d8d0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
d8e0: 75 69 64 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  uid adoNetTechno
d8f0: 6c 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20 20  logyId;..       
d900: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
d910: 20 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   AdoNetTechnolog
d920: 79 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  yId..           
d930: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d940: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
d950: 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67   adoNetTechnolog
d960: 79 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  yId; }..        
d970: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61 64          set { ad
d980: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
d990: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
d9a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d9b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
d9c0: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
d9d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
d9e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
d9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da30: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
da40: 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72  #region Configur
da50: 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20 20  ation Class..   
da60: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
da70: 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e 66 69 67  led class Config
da80: 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  uration..       
da90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
daa0: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
dab0: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
dac0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
dad0: 6f 6e 73 74 20 63 68 61 72 20 53 77 69 74 63 68  onst char Switch
dae0: 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20 20   = '-';..       
daf0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
db00: 73 74 20 63 68 61 72 20 41 6c 74 53 77 69 74 63  st char AltSwitc
db10: 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20  h = '/';....    
db20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
db30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
db70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
db80: 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
db90: 6c 79 20 63 68 61 72 5b 5d 20 53 77 69 74 63 68  ly char[] Switch
dba0: 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20 20  Chars = {..     
dbb0: 20 20 20 20 20 20 20 20 20 20 20 53 77 69 74 63             Switc
dbc0: 68 2c 20 41 6c 74 53 77 69 74 63 68 0d 0a 20 20  h, AltSwitch..  
dbd0: 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20 20            };..  
dbe0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
dbf0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
dc00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
dc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
dc50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
dc60: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
dc70: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
dc80: 20 70 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75   private Configu
dc90: 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ration(..       
dca0: 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
dcb0: 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  y assembly,..   
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
dcd0: 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c  ing logFileName,
dce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dcf0: 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
dd00: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
dd10: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
dd20: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
dd30: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd40: 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  g linqFileName,.
dd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd60: 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
dd70: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
dd80: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dd90: 67 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d 0a  g debugFormat,..
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
ddc0: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
ddd0: 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
dde0: 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d  s installFlags,.
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de00: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64   TracePriority d
de10: 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a 20  ebugPriority,.. 
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
de30: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
de40: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
de60: 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20  l install,..    
de70: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
de80: 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
de90: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
dea0: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
deb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dec0: 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c   bool noDesktop,
ded0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dee0: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74    bool noCompact
def0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
df00: 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32     bool noNetFx2
df10: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
df20: 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
df30: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40,..           
df40: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df50: 30 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  05,..           
df60: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df70: 30 38 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08,..           
df80: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30       bool noVs20
df90: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10,..           
dfa0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63       bool noTrac
dfb0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
dfc0: 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f      bool noConso
dfd0: 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le,..           
dfe0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c       bool noLog,
dff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e000: 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
e010: 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
e020: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
e030: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
e040: 20 20 20 20 20 20 62 6f 6f 6c 20 64 65 62 75 67        bool debug
e050: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e060: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
e070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e080: 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a    bool confirm..
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0c0: 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79 20    this.assembly 
e0d0: 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  = assembly;..   
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e0f0: 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  s.logFileName = 
e100: 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  logFileName;..  
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e120: 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 64  is.directory = d
e130: 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20  irectory;..     
e140: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e150: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63  coreFileName = c
e160: 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e180: 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  is.linqFileName 
e190: 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  = linqFileName;.
e1a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e1b0: 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69   this.designerFi
e1c0: 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65  leName = designe
e1d0: 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  rFileName;..    
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
e1f0: 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 64  .debugFormat = d
e200: 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
e220: 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.traceFormat = 
e230: 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e250: 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20  is.installFlags 
e260: 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d  = installFlags;.
e270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e280: 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f 72   this.debugPrior
e290: 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f 72  ity = debugPrior
e2a0: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
e2b0: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
e2c0: 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63 65  Priority = trace
e2d0: 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
e2e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e2f0: 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c  install = instal
e300: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
e310: 20 20 20 20 74 68 69 73 2e 77 6f 77 36 34 20 3d      this.wow64 =
e320: 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
e330: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
e340: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
e350: 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
e360: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
e370: 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74      this.noDeskt
e380: 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  op = noDesktop;.
e390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e3a0: 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20   this.noCompact 
e3b0: 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  = noCompact;..  
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e3d0: 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e  is.noNetFx20 = n
e3e0: 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
e3f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e400: 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65  noNetFx40 = noNe
e410: 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx40;..        
e420: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
e430: 73 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30 35  s2005 = noVs2005
e440: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e450: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 38     this.noVs2008
e460: 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20   = noVs2008;..  
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
e480: 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e 6f  is.noVs2010 = no
e490: 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20  Vs2010;..       
e4a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
e4b0: 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65 3b  Trace = noTrace;
e4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e4d0: 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c 65    this.noConsole
e4e0: 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20   = noConsole;.. 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e500: 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f  his.noLog = noLo
e510: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
e520: 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77 4f 6e      this.throwOn
e530: 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f 77 4f  Missing = throwO
e540: 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20  nMissing;..     
e550: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
e560: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b  whatIf = whatIf;
e570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e580: 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d 20 64    this.debug = d
e590: 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  ebug;..         
e5a0: 20 20 20 20 20 20 20 74 68 69 73 2e 76 65 72 62         this.verb
e5b0: 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a  ose = verbose;..
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63  this.confirm = c
e5e0: 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
e5f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e600: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e660: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e670: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
e680: 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d   Static Methods.
e690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
e6a0: 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
e6b0: 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e   GetDefaultFileN
e6c0: 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ames(..         
e6d0: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
e6e0: 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
e700: 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c  f string coreFil
e710: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
e720: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
e730: 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ng linqFileName,
e740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e750: 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 65 73    ref string des
e760: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20  ignerFileName.. 
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
e780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e7a0: 20 69 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c   if (thisAssembl
e7b0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7d0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
e7e0: 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
e7f0: 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
e800: 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69  irectoryName(thi
e810: 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  sAssembly.Locati
e820: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
e830: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
e840: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
e850: 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
e890: 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  eFileName = Path
e8a0: 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
e8b0: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
e8c0: 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
e8d0: 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  er.CoreFileName)
e8e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e8f0: 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
e900: 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
e910: 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20  (directory,..   
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e930: 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46   Installer.LinqF
e940: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
e960: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
e970: 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
e980: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
e9a0: 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46  taller.DesignerF
e9b0: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
e9c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e9d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ea20: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ea30: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43  te static bool C
ea40: 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  heckOption(..   
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
ea60: 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20   string arg..   
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
eaa0: 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61  tring result = a
eab0: 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rg;....         
eac0: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
ead0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
eae0: 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20  (result))..     
eaf0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
eb20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
eb30: 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65  E: Remove all le
eb40: 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68 61  ading switch cha
eb50: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs...           
eb60: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb80: 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74   result = result
eb90: 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74 63  .TrimStart(Switc
eba0: 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20  hChars);....    
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebc0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ebd0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
ebe0: 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20   How many chars 
ebf0: 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20  were removed?.. 
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec10: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
ec20: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63             int c
ec30: 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74  ount = arg.Lengt
ec40: 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74  h - result.Lengt
ec50: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
ec60: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74    // NOTE: Was t
ec90: 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e  here at least on
eca0: 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e?..            
ecb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a  if (count > 0)..
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ed10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ed20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
ed30: 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20  TE: Ok, replace 
ed40: 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a  their original..
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
ed70: 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20   argument...    
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edb0: 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d  arg = result;...
edc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
edd0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65       // NOTE: Ye
ee00: 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77 69  s, this is a swi
ee10: 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tch...          
ee20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ee30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ee40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
ee50: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ee80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ee90: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
eea0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
eeb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
eec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef00: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ef10: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
ef20: 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69  c bool MatchOpti
ef30: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
ef40: 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c       string arg,
ef50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef60: 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d    string option.
ef70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef80: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
ef90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
efa0: 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e     if ((arg == n
efb0: 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20  ull) || (option 
efc0: 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
efe0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f000: 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f  return String.Co
f010: 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70  mpare(arg, 0, op
f020: 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20  tion, 0,..      
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
f040: 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67  g.Length, String
f050: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
f060: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
f070: 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0;..           
f080: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f090: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f0e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
f0f0: 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42  tic bool? ParseB
f100: 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20  oolean(..       
f110: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
f120: 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20  text..          
f130: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
f140: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f150: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
f160: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
f170: 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
f180: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1a0: 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a   bool value;....
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1c0: 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79      if (bool.Try
f1d0: 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20  Parse(text, out 
f1e0: 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f200: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
f230: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
f240: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
f250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f2b0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
f2c0: 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e  c object ParseEn
f2d0: 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
f2e0: 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79       Type enumTy
f2f0: 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pe,..           
f300: 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
f310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f320: 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a     bool noCase..
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f340: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
f350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f360: 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20    if ((enumType 
f370: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75  == null) || !enu
f380: 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20  mType.IsEnum).. 
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
f3b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f3c0: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
f3d0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78  sNullOrEmpty(tex
f3e0: 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
f3f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f400: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
f410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f420: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f440: 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73  return Enum.Pars
f450: 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74  e(enumType, text
f460: 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20  , noCase);..    
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f490: 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20         catch..  
f4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4b0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
f4d0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
f4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f500: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f510: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f520: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
f530: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
f540: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
f550: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f5a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
f5b0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74  region Public St
f5c0: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
f5d0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
f5e0: 20 73 74 61 74 69 63 20 43 6f 6e 66 69 67 75 72   static Configur
f5f0: 61 74 69 6f 6e 20 43 72 65 61 74 65 44 65 66 61  ation CreateDefa
f600: 75 6c 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ult()..         
f610: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f620: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
f630: 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  ectory = null;..
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f650: 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
f660: 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
f680: 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
f690: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
f6a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
f6b0: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
f6c0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
f6e0: 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73  DefaultFileNames
f6f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f700: 20 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63         ref direc
f710: 74 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69  tory, ref coreFi
f720: 6c 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71  leName, ref linq
f730: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f750: 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ef designerFileN
f760: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
f770: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f780: 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  new Configuratio
f790: 6e 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20  n(thisAssembly, 
f7a0: 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
f7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7c0: 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
f7d0: 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  me, linqFileName
f7e0: 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  , designerFileNa
f7f0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
f800: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
f810: 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54  s.DebugFormat, T
f820: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
f830: 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
f840: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
f850: 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 20  lFlags.Default, 
f860: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
f870: 66 61 75 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20  fault,..        
f880: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
f890: 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
f8a0: 74 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c 20  t, true, false, 
f8b0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
f8c0: 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
f8d0: 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
f8e0: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
f8f0: 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
f900: 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
f910: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f920: 20 20 20 20 20 20 20 74 72 75 65 2c 20 74 72 75         true, tru
f930: 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
f940: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
f950: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f960: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f9b0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
f9c0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
f9d0: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
f9e0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
f9f0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
fa00: 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a  bool FromArgs(..
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a  string[] args,..
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa40: 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20  bool strict,..  
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
fa60: 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  f Configuration 
fa70: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa90: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
faa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fab0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
fac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fad0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
fae0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb00: 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c  if (args == null
fb10: 29 0d 0a 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 72 65 74 75 72             retur
fb30: 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  n true;....     
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
fb50: 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
fb60: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
fb90: 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = Configuration
fba0: 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29  .CreateDefault()
fbb0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fbc0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
fbd0: 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74  gth = args.Lengt
fbe0: 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  h;....          
fbf0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
fc00: 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
fc10: 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e  dex < length; in
fc20: 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
fc30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72         string ar
fc60: 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b  g = args[index];
fc70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
fcb0: 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75 6d 65   Skip any argume
fcc0: 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c 6c 20  nt that is null 
fcd0: 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d  (?) or an empty.
fce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fcf0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
fd00: 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20    string...     
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
fd40: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
fd50: 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20  OrEmpty(arg)).. 
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
fd80: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fda0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
fdc0: 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f 69 6e  OTE: We are goin
fdd0: 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65 20  g to modify the 
fde0: 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e  original argumen
fdf0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
fe00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
fe10: 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e 67 20      by removing 
fe20: 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70 74 69  any leading opti
fe30: 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b 0d 0a  on characters;..
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
fe60: 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65 20 75   therefore, we u
fe70: 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e 67 20  se a new string 
fe80: 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20  to hold the..   
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f       //       mo
feb0: 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e 74 2e  dified argument.
fec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
ff00: 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20  Arg = arg;....  
ff10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff20: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74    // NOTE: All t
ff50: 68 65 20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  he supported com
ff60: 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
ff70: 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20  s must..        
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e 20 77  //       begin w
ffa0: 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68  ith an option ch
ffb0: 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20 61 20  aracter (e.g. a 
ffc0: 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20 20 20  minus..         
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ffe0: 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72 77 61  /       or forwa
fff0: 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74 65 6d  rd slash); attem
10000 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65 20 74  pt to validate t
10010 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  hat..           
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10030 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66 20 77        now.  If w
10040 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69 63 74  e fail in strict
10050 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20 64 6f   mode, we are do
10060 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne;..           
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10080 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c        otherwise,
10090 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69 73 20   just skip this 
100a0 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61 64 76  argument and adv
100b0 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ance..          
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
100d0 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 6e 65         to the ne
100e0 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20  xt one...       
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10120 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65  (!CheckOption(re
10130 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20 20 20  f newArg))..    
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
10180 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
10190 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
101c0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
101d0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
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 20 74 72 61 63 65 43            traceC
10200 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
10210 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10230 20 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70           "Unsupp
10240 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69  orted command li
10250 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d  ne argument: {0}
10260 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
10290 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
102a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
102d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10320 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10360 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10370 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
10380 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70  TE: All the supp
10390 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69  orted command li
103a0 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d  ne options must.
103b0 0a 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 2f 2f 20 20 20 20 20           //     
103d0 20 20 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20    have a value; 
103e0 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d  therefore, attem
103f0 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20  pt to advance.. 
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10410 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
10420 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66 20 77  to it now.  If w
10430 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65 20 64  e fail, we are d
10440 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  one...          
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
10460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10470 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b            index+
10480 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
104a0 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74   (index >= lengt
104b0 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h)..            
104c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
104f0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
10500 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10520 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
10530 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
10540 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
10550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
10580 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
10590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105b0 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20   "Missing value 
105c0 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22  for option: {0}"
105d0 2c 0d 0a 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
10600 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  g)), traceCatego
10610 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
10640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10660 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
10670 0d 0a 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 62 72                br
10690 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
106b0 0a 0d 0a 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 2f 2f 0d 0a 20             //.. 
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
106f0 47 72 61 62 20 74 68 65 20 74 65 78 74 75 61 6c  Grab the textual
10700 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
10710 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20  ommand line..   
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
10740 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  tion...         
10750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10770 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10780 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b 69 6e  g text = args[in
10790 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 2f 2f 0d 0a 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 2f 2f 20               // 
107d0 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
107e0 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c   which command l
107f0 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20  ine option this 
10800 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
10810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
10820 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61       (based on a
10830 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61   partial name ma
10840 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72  tch) and then tr
10850 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
10860 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
10870 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72 65 74      to interpret
10880 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c   the textual val
10890 75 65 20 61 73 20 74 68 65 20 63 6f 72 72 65 63  ue as the correc
108a0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
108b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
108c0 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20      type...     
108d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10900 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
10910 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22  ewArg, "confirm"
10920 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10950 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
10960 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
10970 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
10980 20 20 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 69 66 20 28              if (
109a0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
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 20 20 20 7b 0d 0a 20              {.. 
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
109f0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
10a00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a30 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
10a40 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
10a50 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
10a80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
10a90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
10ad0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
10ae0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
10b10 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
10b20 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
10b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b80 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
10b90 0a 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 20 20 20 20 20                  
10bb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
10bc0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
10bf0 0a 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 20 20 7d 0d 0a               }..
10c10 0d 0a 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 63 6f                co
10c30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
10c40 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  irm = (bool)valu
10c50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10c60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
10c90 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
10ca0 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d  rg, "coreFileNam
10cb0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
10cf0 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46  figuration.coreF
10d00 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
10d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
10d50 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
10d60 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20   "debug"))..    
10d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
10db0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
10dc0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
10df0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e10 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
10e40 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
10e50 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
10e80 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
10e90 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
10ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
10ed0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
10ee0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
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 22 49 6e 76 61 6c 69           "Invali
10f10 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
10f20 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20 20 20 20 20 20                  
10f50 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
10f60 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
10f70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
10fa0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10fd0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
10fe0 20 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 72 65 74               ret
11000 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11030 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
11080 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f  ion.debug = (boo
11090 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110b0 20 20 7d 0d 0a 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 65 6c 73               els
110d0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
110e0 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
110f0 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20  Format"))..     
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11110 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
11140 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65  debugFormat = te
11150 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
11180 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
11190 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61  ation.debugForma
111a0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
111b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111d0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
111e0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
111f0 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69  rg, "debugPriori
11200 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ty"))..         
11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11220 0d 0a 20 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 6f 62                ob
11240 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
11250 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11270 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
11280 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20  TracePriority), 
11290 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
112c0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
112f0 20 20 20 20 20 20 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 65                 e
11310 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
11320 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
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 20                  
11350 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
11360 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
11370 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
113a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
113b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61   "Invalid {0} va
113f0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20 20 20 20 20                  
11420 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
11430 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
11440 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
11470 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
11480 20 20 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 69 66 20 28              if (
114a0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
114d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11500 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11520 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
11550 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74  ion.debugPriorit
11560 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69  y = (TracePriori
11570 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ty)value;..     
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
115a0 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  DebugPriority = 
115b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
115c0 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
11610 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
11620 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22  esignerFileName"
11630 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
11640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 63 6f 6e 66 69             confi
11670 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
11680 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  rFileName = text
11690 3b 0d 0a 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 7d 0d 0a 20 20             }..  
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
116d0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
116e0 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29 29  g, "directory"))
116f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11700 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
11730 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
11740 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20   = text;....    
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
11790 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20   *SPECIAL* Must 
117a0 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c 65  refresh the file
117b0 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20   names..        
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72      //       her
117e0 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75 6e  e because the un
117f0 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f  derlying directo
11800 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11820 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68 61  //       has cha
11830 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  nged...         
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 2f 2f 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 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
11880 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
11890 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
118a0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
118b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118c0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
118d0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
118e0 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
118f0 20 20 20 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 63 6f                co
11910 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
11920 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f  h.GetFileName(co
11930 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
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 69 66 20 28              if (
11960 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
11970 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  mpty(coreFileNam
11980 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d       coreFileNam
119b0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f  e = Installer.Co
119c0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  reFileName;.... 
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 63 6f 6e 66 69             confi
119f0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
11a00 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
11a10 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
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 63 6f 6e 66 69 67 75 72 61         configura
11a40 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
11a50 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
11a60 0d 0a 20 20 20 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 73 74                st
11a80 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
11a90 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
11aa0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  n.linqFileName;.
11ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11ad0 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
11ae0 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
11af0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
11b20 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
11b30 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c  FileName(linqFil
11b40 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b60 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
11b70 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
11b80 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  linqFileName))..
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49  linqFileName = I
11bc0 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
11bd0 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
11c00 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
11c10 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
11c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
11c50 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46  directory, linqF
11c60 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
11c70 20 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 73 74 72 69 6e 67 20           string 
11c90 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
11ca0 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
11cb0 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
11cc0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ce0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11cf0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69  NullOrEmpty(desi
11d00 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  gnerFileName))..
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 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
11d40 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
11d50 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65  ame(designerFile
11d60 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
11d90 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
11da0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
11db0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e     designerFileN
11de0 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
11df0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
11e00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
11e30 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
11e40 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d  = Path.Combine(.
11e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e70 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
11e80 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e  irectory, design
11e90 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  erFileName);..  
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
11ee0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69  ption(newArg, "i
11ef0 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20  nstall"))..     
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 20 7b 0d 0a 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 20 20                  
11f30 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
11f40 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
11f50 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
11f80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
11fd0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
11fe0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12010 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
12020 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
12030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12050 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
12060 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
12070 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
120a0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
120b0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
120e0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
120f0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
12100 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
12130 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 20 20 69 66 20 28 73             if (s
12160 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12190 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
121c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12200 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12210 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f  on.install = (bo
12220 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12260 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12270 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
12280 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20  allFlags"))..   
12290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
122d0 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
122e0 20 20 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 74                 t
12300 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61  ypeof(InstallFla
12310 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  gs), text, true)
12320 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12350 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
123a0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
123b0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
123e0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
123f0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12430 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69        "Invalid i
12470 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c  nstall flags val
12480 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ue: {0}",..     
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
124b0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
124c0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
124d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
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 72 65 74 75 72 6e 20 66 61 6c        return fal
12530 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12580 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
125a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
125b0 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73  tallFlags = (Ins
125c0 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b  tallFlags)value;
125d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
12610 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
12620 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 22  , "linqFileName"
12630 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 63 6f 6e 66 69             confi
12670 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
12680 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126c0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
126d0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
126e0 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  logFileName"))..
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12730 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
12740 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12760 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12780 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12790 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d  n(newArg, "noCom
127a0 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  pact"))..       
127b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127e0 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
127f0 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
12800 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
12830 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12870 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
12880 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
12890 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
128c0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
128d0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 20 20                  
12900 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12910 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
12920 0d 0a 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 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
12950 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
12960 3a 20 7b 31 7d 22 2c 0d 0a 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 46 6f 72               For
12990 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
129a0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
129b0 0d 0a 20 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 74 72 61 63 65 43 61 74 65 67        traceCateg
129e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
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 69 66 20 28 73 74 72           if (str
12a10 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
12a40 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
12a70 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12ac0 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f  .noCompact = (bo
12ad0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 20 20 7d 0d 0a 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 65 6c                el
12b10 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12b20 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
12b30 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20  nsole"))..      
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
12b80 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
12b90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
12bc0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
12c10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
12c20 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
12c50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
12c60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
12ca0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
12cb0 28 0d 0a 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 20                  
12cd0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
12ce0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
12cf0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
12d20 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
12d30 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
12d40 2c 0d 0a 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 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
12d70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
12da0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12dd0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
12e00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
12e50 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28 62  n.noConsole = (b
12e60 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 20 7d 0d 0a 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 65                 e
12ea0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
12eb0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 44  ion(newArg, "noD
12ec0 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20 20  esktop"))..     
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 7b 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
12f10 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
12f20 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
12f50 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
12fa0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
12fb0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12fc0 20 20 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 54 72 61 63 65             Trace
12fe0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
12ff0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
13000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
13030 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13040 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
13070 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
13080 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
130b0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
130c0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
130d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
13100 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69 66 20 28 73             if (s
13130 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13160 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13190 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
131a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
131e0 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28  on.noDesktop = (
131f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
13240 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
13250 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20  Log"))..        
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
13290 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
132a0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
132b0 0d 0a 0d 0a 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 20                  
132d0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
132e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
13330 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
13340 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
13370 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
13380 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
133c0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
133d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
13400 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
13410 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
13440 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
13450 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
13460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
13490 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
134c0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
134f0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
13520 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13570 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61  noLog = (bool)va
13580 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
135a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
135b0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
135c0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
135d0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30  wArg, "noNetFx20
135e0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
13620 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
13630 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
13640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13660 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
13670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
136c0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
136d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136f0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13700 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
13710 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13740 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
13750 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
13790 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
137a0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
137d0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
137e0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
13820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
13850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13870 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
13880 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
138b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
138d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
138f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
13900 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76  etFx20 = (bool)v
13910 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13940 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13950 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13960 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34  ewArg, "noNetFx4
13970 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139a0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
139b0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
139c0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
139d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
139f0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
13a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13a20 0a 20 20 20 20 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 20 20 20                  
13a40 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13a50 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
13a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13a90 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13aa0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13ae0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b10 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13b20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13b30 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
13b60 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
13b70 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ba0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13bb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13be0 29 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 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13c10 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13c40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13c60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13c90 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29  NetFx40 = (bool)
13ca0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13cd0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13ce0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
13cf0 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69  newArg, "noRunti
13d00 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20  meVersion"))..  
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
13d50 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
13d60 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
13d90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
13de0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
13df0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
13e20 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
13e30 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
13e40 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13e70 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
13e80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
13eb0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
13ec0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
13f00 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
13f10 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13f40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 20 20 20 20 69 66                if
13f70 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13fa0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
14020 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56  ation.noRuntimeV
14030 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76  ersion = (bool)v
14040 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14070 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14080 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14090 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22  ewArg, "noTrace"
140a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
140b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
140e0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
140f0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14120 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14170 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
14180 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
141c0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
141d0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14200 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
14210 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14240 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
14250 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
14260 22 2c 0d 0a 20 20 20 20 20 20 20 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 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
14290 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
142a0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
142e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
14310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14330 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
14340 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
14370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
143b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72  nfiguration.noTr
143c0 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ace = (bool)valu
143d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
143e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
14410 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
14420 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29 29  rg, "noVs2005"))
14430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14440 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14470 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14480 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
144b0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14500 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14510 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14550 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14560 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14590 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
145a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
145d0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
145e0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
145f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
14620 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14630 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14660 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
146d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
146e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146f0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14740 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
14750 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  05 = (bool)value
14760 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14770 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
147a0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
147b0 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d  g, "noVs2008")).
147c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
14800 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
14810 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
14840 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
14890 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
148a0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148d0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
148e0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
148f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14920 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
14930 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
14960 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
14970 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
14980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
149b0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
149c0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
149f0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
14a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a80 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14ad0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
14ae0 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  8 = (bool)value;
14af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14b00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14b30 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14b40 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a  , "noVs2010"))..
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 62 6f 6f 6c 3f 20 76 61 6c         bool? val
14b90 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
14ba0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
14bd0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c10 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14c20 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
14c30 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
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 20 20 20 20 20                  
14c60 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
14c70 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
14c80 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ca0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14cb0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
14cc0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
14cf0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
14d00 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
14d40 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
14d50 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14d80 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14de0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
14df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
14e60 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30  uration.noVs2010
14e70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14ec0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14ed0 20 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20   "strict"))..   
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
14f20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
14f30 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
14f60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fa0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
14fb0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
14fc0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
14ff0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
15000 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
15010 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
15040 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
15050 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
15080 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
15090 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150c0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
150d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
150e0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
150f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15100 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15110 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15140 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
15150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
15170 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
151a0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
151d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151e0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
15210 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e  Allow the comman
15220 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73  d line arguments
15230 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69   //       overri
15260 64 65 20 74 68 65 20 22 73 74 72 69 63 74 6e 65  de the "strictne
15270 73 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20  ss" setting..   
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15290 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
152a0 20 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75    provided by ou
152b0 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...     
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 73 74 72 69 63 74 20 3d 20         strict = 
15300 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
15350 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
15360 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29  hrowOnMissing"))
15370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15380 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
153b0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
153c0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
153f0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
15440 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
15450 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
15490 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
154a0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
154d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
154e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15510 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
15520 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
15530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
15560 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
15570 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
155a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
155b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15600 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
15610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15630 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15680 69 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f  iguration.throwO
15690 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c  nMissing = (bool
156a0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
156d0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
156e0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
156f0 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46  (newArg, "traceF
15700 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20  ormat"))..      
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
15750 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78  raceFormat = tex
15760 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
15770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15780 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f  TraceOps.TraceFo
15790 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61  rmat = configura
157a0 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74  tion.traceFormat
157b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
157c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
157f0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
15800 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69 74  g, "tracePriorit
15810 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  y"))..          
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
15850 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ect value = Pars
15860 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54          typeof(T
15890 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74  racePriority), t
158a0 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20  ext, true);.... 
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
158d0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
15920 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
15930 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
15970 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
15980 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
159b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
159c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c  "Invalid {0} val
15a00 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
15a30 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
15a40 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
15a50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
15a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
15a80 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
15ab0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15ae0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
15b10 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15b60 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79  on.tracePriority
15b70 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74   = (TracePriorit
15b80 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  y)value;..      
15b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ba0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
15bb0 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63  racePriority = c
15bc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
15bd0 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  cePriority;..   
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
15c20 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65  tion(newArg, "ve
15c30 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20  rbose"))..      
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c70 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
15c80 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
15c90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
15cc0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d00 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
15d10 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
15d20 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d40 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
15d50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
15d60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15da0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
15db0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
15de0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
15df0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
15e20 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
15e30 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
15e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15e70 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
15ea0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15ed0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
15f00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
15f50 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f  n.verbose = (boo
15f60 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15fa0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
15fb0 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49  n(newArg, "whatI
15fc0 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  f"))..          
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15fe0 0a 20 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 62 6f 6f               boo
16000 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
16010 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
16020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16040 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16050 0d 0a 20 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 7b 0d                {.
16070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16090 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
160a0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
160b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
160c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160d0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
160e0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
160f0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16120 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
16130 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16160 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
16170 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
16180 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
161b0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
161c0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
161d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
16200 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
16230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16260 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
16290 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
162b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
162e0 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  atIf = (bool)val
162f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
16330 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
16340 41 72 67 2c 20 22 77 6f 77 36 34 22 29 29 0d 0a  Arg, "wow64"))..
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16380 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
16390 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
163a0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
163d0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
16420 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
16430 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
16470 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
16480 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
164b0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
164c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
164d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
164f0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
16500 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
16540 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
16550 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
16560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16580 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
165f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
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 20 20 63 6f 6e 66 69 67            config
16660 75 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20 3d 20  uration.wow64 = 
16670 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
166a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166b0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
166d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
166f0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
16700 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16730 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16740 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
16750 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
16780 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
16790 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64      "Unsupported
167c0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
167d0 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  tion: {0}",..   
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16800 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
16810 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16840 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16870 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
168a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
168f0 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
16900 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
16910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16930 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16940 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
16950 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
16980 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
16990 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
169a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
169c0 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
169d0 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75 72   modify configur
169e0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
169f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16a10 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
16a20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16a30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
16a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
16a90 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
16aa0 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
16ab0 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
16ac0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
16ad0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
16ae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16af0 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
16b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16b10 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
16b20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
16b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b40 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16b60 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
16b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b80 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
16b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16ba0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
16bb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16bd0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
16be0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c10 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16c20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
16c30 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
16c60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16c70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
16ca0 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ly = configurati
16cb0 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a  on.assembly;....
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
16ce0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d10 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16d20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d  = "Invalid assem
16d30 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  bly.";..        
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
16d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
16d80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16d90 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
16da0 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20  oTrace)..       
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
16de0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
16df0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
16e20 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
16e30 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
16e40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16e50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e70 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
16ea0 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
16eb0 6c 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61 6d 65  lt log file name
16ec0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16ee0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16f00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
16f10 46 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74 4c 6f  FileName = GetLo
16f20 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  gFileName(..    
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 20 20 20 20 20 20 20 22 74 72 61              "tra
16f50 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ce");..         
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16f80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
16f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16fe0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
16ff0 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20  n.noConsole)..  
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e       // NOTE: In
17060 20 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c 20 64   verbose mode, d
17070 65 62 75 67 20 6f 75 74 70 75 74 20 28 74 68 61  ebug output (tha
17080 74 20 6d 65 65 74 73 0d 0a 20 20 20 20 20 20 20  t meets..       
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
170b0 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
170c0 6f 72 69 74 79 20 63 72 69 74 65 72 69 61 29 20  ority criteria) 
170d0 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20  will be..       
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69       //       di
17100 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
17110 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77 69 73  onsole; otherwis
17120 65 2c 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  e, trace..      
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17140 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
17150 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65 74  utput (that meet
17160 73 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64  s the configured
17170 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20   priority..     
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 2f 2f 20 20 20 20 20 20 20         //       
171a0 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20 62  criteria) will b
171b0 65 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74  e displayed to t
171c0 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20  he console...   
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
17210 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
17220 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
17290 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74  dd the console t
172a0 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f  race listener to
172b0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c        //       l
172e0 69 73 74 20 6f 66 20 74 72 61 63 65 20 6c 69 73  ist of trace lis
172f0 74 65 6e 65 72 73 20 6d 61 69 6e 74 61 69 6e 65  teners maintaine
17300 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20 20 20  d by..          
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17320 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
17330 68 65 20 54 72 61 63 65 4f 70 73 20 63 6c 61 73  he TraceOps clas
17340 73 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73  s (i.e. only mes
17350 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20 20 20  sages..         
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
17380 74 68 61 74 20 6d 65 65 74 20 74 68 65 20 64 65  that meet the de
17390 62 75 67 20 70 72 69 6f 72 69 74 79 20 77 69 6c  bug priority wil
173a0 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20  l be..          
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
173d0 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 73 6f  een on the conso
173e0 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  le)...          
173f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17400 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
17430 70 73 2e 53 65 74 75 70 44 65 62 75 67 4c 69 73  ps.SetupDebugLis
17440 74 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20 20 20  teners();..     
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
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 20 7b 0d 0a 20 20 20 20 20          {..     
174b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
174f0 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  / NOTE: Add the 
17500 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20 6c 69  console trace li
17510 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d 0a 20  stener to the.. 
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17540 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 20  /       list of 
17550 62 75 69 6c 74 2d 69 6e 20 74 72 61 63 65 20 6c  built-in trace l
17560 69 73 74 65 6e 65 72 73 20 28 69 2e 65 2e 0d 0a  isteners (i.e...
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20 6d 65  //       only me
175a0 73 73 61 67 65 73 20 74 68 61 74 20 6d 65 65 74  ssages that meet
175b0 20 74 68 65 20 74 72 61 63 65 0d 0a 20 20 20 20   the trace..    
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
175e0 20 20 20 20 20 70 72 69 6f 72 69 74 79 20 77 69       priority wi
175f0 6c 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20 74 68  ll be seen on th
17600 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20  e console)...   
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
17630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
17660 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
17670 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
17680 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
176a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
176e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17720 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
17730 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
17740 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  og &&..         
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c     !String.IsNul
17770 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75  lOrEmpty(configu
17780 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
17790 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
177b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
177d0 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
177e0 28 6e 65 77 20 54 65 78 74 57 72 69 74 65 72 54  (new TextWriterT
177f0 72 61 63 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20  raceListener(.. 
17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
17820 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
17830 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 20 20 20  FileName));..   
17840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17850 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17860 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17880 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
178a0 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63  NOTE: Dump the c
178b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77  onfiguration now
178c0 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64   in case we need
178d0 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
178e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
178f0 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61    troubleshoot a
17900 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20  ny issues...    
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17930 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
17940 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50  iguration.debugP
17950 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65  riority <= Trace
17960 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29  Priority.Medium)
17970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17980 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
17990 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62  uration.Dump(deb
179a0 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ugCallback);....
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
179d0 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
179e0 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f  ity <= TracePrio
179f0 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20  rity.Medium)..  
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a10 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17a20 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61  ion.Dump(traceCa
17a30 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20  llback);....    
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17a60 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
17a70 20 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61   Show where we a
17a80 72 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20  re running from 
17a90 61 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d  and how we were.
17aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ab0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
17ac0 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  voked...        
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74      string locat
17b00 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c  ion = assembly.L
17b10 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  ocation;....    
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
17b40 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
17b50 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
17b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
17b80 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
17b90 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
17ba0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17bc0 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62  Running executab
17bd0 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72  le is: {0}", For
17be0 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e  Display(location
17bf0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17c10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
17c40 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
17c50 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
17c60 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
17c80 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
17c90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
17ca0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d     "Original com
17cd0 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30  mand line is: {0
17ce0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76               Env
17d00 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64  ironment.Command
17d10 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65  Line), traceCate
17d20 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
17d40 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17d50 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
17d60 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20  ty.MediumLow,.. 
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
17d90 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
17da0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
17db0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75               "Ru
17dd0 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73  nning process is
17de0 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50   {0}.", Is64BitP
17df0 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20  rocess() ?..    
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 20 20 20 20 20 20 22 36 34 2d 62 69 74 22          "64-bit"
17e20 20 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72   : "32-bit"), tr
17e30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
17e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e50 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
17e60 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d  uration.whatIf).
17e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
17ec0 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75  OTE: If the debu
17ed0 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
17ee0 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f 64   and What-If mod
17ef0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
17f00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
17f10 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73      is [now] dis
17f20 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77  abled, issue a w
17f30 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  arning...       
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17f70 28 44 65 62 75 67 67 65 72 2e 49 73 41 74 74 61  (Debugger.IsAtta
17f80 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  ched)..         
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
17fb0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
17fc0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69  riority.MediumHi
17fd0 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
18000 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
18010 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
18020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18030 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64      "Forced to d
18040 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66  isable \"what-if
18050 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b  \" mode with " +
18060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18080 20 20 22 64 65 62 75 67 67 65 72 20 61 74 74 61    "debugger atta
18090 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74  ched.", traceCat
180a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
180f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18100 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
18110 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18120 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
18130 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20  diumHigh,..     
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
18160 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
18170 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61    "No actual cha
181a0 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64  nges will be mad
181b0 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20  e to this " +.. 
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74             "syst
181e0 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68 61  em because \"wha
181f0 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65  t-if\" mode is e
18200 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  nabled.",..     
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
18230 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
18240 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18260 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18280 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d  NOTE: If the com
18290 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f  mand line has no
182a0 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d  t been manually.
182b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
182c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f       //       co
182d0 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69  nfirmed (i.e. vi
182e0 61 20 74 68 65 20 65 78 70 6c 69 63 69 74 20 63  a the explicit c
182f0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20  ommand line..   
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18310 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e   //       option
18320 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f  ), then stop pro
18330 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65  cessing now.  We
18340 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20   enforce..      
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18360 20 20 20 20 20 20 20 74 68 69 73 20 72 75 6c 65         this rule
18370 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20   so that simply 
18380 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20  double-clicking 
18390 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
183a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
183b0 20 20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c    executable wil
183c0 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20  l not result in 
183d0 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e  any changes bein
183e0 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
183f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
18400 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79 73 74  made to the syst
18410 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  em...           
18420 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
18450 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20  ion.confirm)..  
18460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18470 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18480 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
18490 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e  or = "Cannot con
184a0 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e  tinue, the \"con
184b0 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73  firm\" option is
184c0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22    "not enabled."
184f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18510 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18540 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18550 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
18560 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18570 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
18580 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
185a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
185b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
185c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
185d0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
185e0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
18600 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
18610 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72  eCallback, e, tr
18620 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18640 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61       error = "Fa
18650 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20  iled to process 
18660 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
18670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18680 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
18690 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
186a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
186b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
186c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
186d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18700 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18710 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
18720 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
18730 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
18740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
18750 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
18760 20 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72   CheckRuntimeVer
18770 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
18780 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
18790 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
187a0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
187b0 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
187c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
187d0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
187e0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
187f0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
18800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18810 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
18820 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
18850 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
18890 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63  ror = "Invalid c
188a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
188b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
188d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
188e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
188f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18900 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18920 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73 69  NOTE: What versi
18930 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d  on of the runtim
18940 65 20 77 61 73 20 74 68 65 20 63 6f 72 65 20 28  e was the core (
18950 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20  primary)..      
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18970 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly 
18980 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
18990 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37   (e.g. "v2.0.507
189a0 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20  27" or..        
189b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
189c0 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39       "v4.0.30319
189d0 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
189e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
189f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a00 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67   string coreImag
18a10 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
18a20 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d  = GetImageRuntim
18a30 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
18a60 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .coreFileName);.
18a70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18a80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18aa0 2f 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77  / NOTE: We allow
18ab0 20 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67   the actual imag
18ac0 65 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69  e runtime checki
18ad0 6e 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  ng to be..      
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18af0 20 20 20 20 20 20 20 62 79 70 61 73 73 65 64 20         bypassed 
18b00 76 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74  via the "-noRunt
18b10 69 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d  imeVersion" comm
18b20 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20  and line..      
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18b40 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20         option.  
18b50 54 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  The command line
18b60 20 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e   option is inten
18b70 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ded for..       
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18b90 20 20 20 20 20 20 65 78 70 65 72 74 20 75 73 65        expert use
18ba0 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20   only...        
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
18be0 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56  ation.noRuntimeV
18bf0 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ersion)..       
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
18c30 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
18c40 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
18c50 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ium,..          
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
18c80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
18c90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
18cc0 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65  embly is compile
18cd0 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  d for the .NET F
18ce0 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20  ramework {0}; " 
18cf0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18d10 68 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c  however, install
18d20 61 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f  ation restrictio
18d30 6e 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73  ns based on this
18d40 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 22 66 61 63 74 20 68 61 76 65 20 62 65 65    "fact have bee
18d70 6e 20 64 69 73 61 62 6c 65 64 20 76 69 61 20 74  n disabled via t
18d80 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e  he command line.
18d90 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
18dc0 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43  Version), traceC
18dd0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
18e00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18e10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
18e40 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a          // TODO:
18e50 20 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f   Restrict the co
18e60 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65  nfiguration base
18e70 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65  d on which image
18e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e90 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
18ea0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20  untime versions 
18eb0 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c  (which more-or-l
18ec0 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a  ess correspond..
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
18ef0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76  .NET Framework v
18f00 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70  ersions) are sup
18f10 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20  ported by the.. 
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73     //       vers
18f40 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53  ions of Visual S
18f50 74 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69  tudio that are i
18f60 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  nstalled...     
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18f80 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
18f90 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
18fa0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
18fb0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
18fc0 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20  Version))..     
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
18fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18ff0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19000 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20  = "invalid core 
19010 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
19020 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  me version";..  
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19050 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
19060 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e  else if (String.
19090 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75       coreImageRu
190c0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c  ntimeVersion, CL
190d0 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
190e0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61       StringCompa
19110 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43  rison.InvariantC
19120 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20  ulture))..      
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19150 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
19180 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72  r the CLR v2.0 r
19190 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  untime, make sur
191a0 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20  e we disable..  
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
191d0 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73  ny attempt to us
191e0 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20  e it for things 
191f0 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20  that require..  
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19210 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
19220 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69  n assembly compi
19230 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20  led for the CLR 
19240 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20  v4.0.  It is..  
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75        //       u
19270 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73  ncertain if this
19280 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70   is actually a p
19290 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20  roblem in..     
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192b0 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63     //       prac
192c0 74 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20  tice as the CLR 
192d0 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e  v4.0 can load an
192e0 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20  d use an..      
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19300 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
19310 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  bly compiled wit
19320 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20  h the CLR v2.0; 
19330 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20  however,..      
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65    //       since
19360 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66   this project of
19370 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67  fers both config
19380 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20  urations,..     
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63     //       we c
193b0 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f  urrently disallo
193c0 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e  w this mismatch.
193d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
193e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
19410 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
19420 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19440 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
19450 73 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 0d  s2010 = true;...
19460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19470 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
19480 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
19490 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
194a0 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
194d0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
194e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
194f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
19510 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c  sembly is compil
19520 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20  ed for the .NET 
19530 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22  Framework {0}, "
19540 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 22 73 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45  "support for .NE
19570 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
19580 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
19590 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
195c0 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
195d0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
195e0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19620 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19640 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
19650 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
19680 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
19690 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
196a0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
196d0 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
196e0 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
196f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20     // NOTE: For 
19740 74 68 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e  the CLR v4.0 run
19750 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  time, make sure 
19760 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20  we disable..    
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19780 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79      //       any
19790 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20   attempt to use 
197a0 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68  it for things th
197b0 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20  at require..    
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20      //       an 
197e0 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
197f0 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  d for the CLR v2
19800 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...           
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
19820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19830 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
19840 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30  ration.noNetFx20
19850 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
19880 6e 6f 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b  noVs2005 = true;
19890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
198a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
198b0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
198c0 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
198f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
19900 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
19910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
19930 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
19940 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
19950 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
19960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19970 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
19980 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
19990 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
199a0 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70 70             "supp
199d0 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61  ort for .NET Fra
199e0 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f  mework {1} is no
199f0 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20  w disabled.",.. 
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19a20 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65  splay(CLRv4Image
19a30 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c  RuntimeVersion),
19a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
19a60 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d  rDisplay(CLRv2Im
19a70 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
19a80 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19ab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19ac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19ae0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
19af0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
19b20 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72         "unsuppor
19b50 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  ted core file im
19b60 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
19b70 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  ion " +..       
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20       "{0}, must 
19ba0 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d  be {1} or {2}",.
19bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
19bd0 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67  Display(coreImag
19be0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
19bf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
19c10 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49  orDisplay(CLRv2I
19c20 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
19c30 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
19c60 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v4ImageRuntimeVe
19c70 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20  rsion));....    
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19ca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19cb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d00 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
19d10 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
19d20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19d40 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
19d50 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
19d60 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
19d90 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
19da0 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f  , e, traceCatego
19db0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19dd0 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63  r = "Failed to c
19de0 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69  heck image runti
19df0 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20  me version.";.. 
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19e20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19e30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
19e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
19e50 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
19e60 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19eb0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
19ec0 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
19ed0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
19ee0 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c  ublic bool HasFl
19ef0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
19f00 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
19f10 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20  gs hasFlags,..  
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19f30 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  ol all..        
19f40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19f50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19f60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c            if (al
19f70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19f80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
19f90 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
19fa0 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
19fb0 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
19fc0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74     return ((inst
19ff0 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c  allFlags & hasFl
1a000 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46  ags) != InstallF
1a010 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20  lags.None);..   
1a020 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1a030 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1a040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1a080 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1a090 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a  lic void Dump(..
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
1a0c0 61 63 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20  aceCallback..   
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1a100 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  f (traceCallback
1a110 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1a120 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a150 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a160 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a180 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
1a190 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  mbly", ForDispla
1a1a0 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20  y(assembly)),.. 
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a1d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a1f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a200 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a210 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e         "LogFileN
1a240 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
1a250 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  (logFileName)),.
1a260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a270 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a280 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a2b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a2c0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a2e0 20 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74           "Direct
1a2f0 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ory", ForDisplay
1a300 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a330 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a350 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a360 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a370 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65         "CoreFile
1a3a0 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
1a3b0 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
1a3c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a3d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a3e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a410 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a420 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a430 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a440 20 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71             "Linq
1a450 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
1a460 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61  splay(linqFileNa
1a470 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a490 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a4b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a4c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a4d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a4e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a500 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
1a510 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
1a520 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
1a530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a540 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a550 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a580 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a590 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a5a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a5b0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
1a5c0 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  gFormat", ForDis
1a5d0 70 6c 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74  play(debugFormat
1a5e0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a600 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a630 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1a640 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1a650 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
1a670 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  aceFormat", ForD
1a680 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d  isplay(traceForm
1a690 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a6b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a6d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a6e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a6f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a700 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a720 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46  InstallFlags", F
1a730 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c  orDisplay(instal
1a740 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20  lFlags)),..     
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a770 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a780 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a790 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1a7a0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1a7b0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 22 44 65 62 75 67 50 72 69 6f 72 69 74     "DebugPriorit
1a7e0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
1a7f0 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d  ebugPriority)),.
1a800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a810 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a820 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a850 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a860 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a880 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
1a890 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
1a8a0 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
1a8b0 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
1a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1a8d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1a8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a8f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1a900 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1a910 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1a920 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a940 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
1a950 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
1a960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a970 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a980 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a9b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a9c0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a9e0 20 20 20 20 20 20 20 20 20 22 57 6f 77 36 34 22           "Wow64"
1a9f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77  , ForDisplay(wow
1aa00 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  64)),..         
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1aa20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1aa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aa40 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1aa50 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1aa60 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1aa70 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1aa90 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  NoRuntimeVersion
1aaa0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1aab0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29  RuntimeVersion))
1aac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1aad0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1aae0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1ab10 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1ab20 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1ab30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ab40 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65             "NoDe
1ab50 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c  sktop", ForDispl
1ab60 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d  ay(noDesktop)),.
1ab70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ab90 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abb0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1abc0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1abd0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1abe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1abf0 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70           "NoComp
1ac00 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  act", ForDisplay
1ac10 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20  (noCompact)),.. 
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ac40 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ac60 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1ac70 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1ac80 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32         "NoNetFx2
1acb0 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1acc0 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20  oNetFx20)),..   
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1acf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ad10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1ad20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1ad30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22       "NoNetFx40"
1ad60 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1ad70 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20  etFx40)),..     
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ada0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1adb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1adc0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1add0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ade0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 20 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46     "NoVs2005", F
1ae10 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1ae20 30 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  05)),..         
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1ae40 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ae50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ae60 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ae70 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1ae80 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1ae90 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1aeb0 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69  NoVs2008", ForDi
1aec0 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29  splay(noVs2008))
1aed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1aee0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1aef0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1af20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1af30 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1af40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1af50 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
1af60 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  2010", ForDispla
1af70 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20  y(noVs2010)),.. 
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1afa0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1afc0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1afd0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1afe0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65 22         "NoTrace"
1b010 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54  , ForDisplay(noT
1b020 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  race)),..       
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b040 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1b050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b060 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1b070 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1b080 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1b090 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0b0 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f   "NoConsole", Fo
1b0c0 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f  rDisplay(noConso
1b0d0 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  le)),..         
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b0f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b110 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b120 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1b130 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1b140 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b160 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c  NoLog", ForDispl
1b170 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20  ay(noLog)),..   
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1b1a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b1c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1b1d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1b1e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 73       "ThrowOnMis
1b210 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c 61  sing", ForDispla
1b220 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  y(throwOnMissing
1b230 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b250 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b270 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1b280 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1b290 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1b2a0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57 68               "Wh
1b2c0 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c 61  atIf", ForDispla
1b2d0 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 20  y(whatIf)),..   
1b2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2f0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1b300 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1b310 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b320 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1b330 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1b340 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 22 44 65 62 75 67 22 2c 20 46 6f       "Debug", Fo
1b370 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 29 29  rDisplay(debug))
1b380 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b390 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1b3a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1b3d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1b3e0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1b3f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b400 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72 62             "Verb
1b410 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ose", ForDisplay
1b420 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20  (verbose)),..   
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b440 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1b450 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1b460 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b470 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1b480 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1b490 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20       "Confirm", 
1b4c0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
1b4d0 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  rm)),..         
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b4f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b510 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1b520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b550 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1b560 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
1b570 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  embly != null)..
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b5b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
1b5c0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
1b5d0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73              "Ass
1b600 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 20  emblyTitle",..  
1b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b620 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1b630 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79  play(GetAssembly
1b640 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 29  Title(assembly))
1b650 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b690 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1b6a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1b6b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1b6c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1b6f0 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 2c  yConfiguration",
1b700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1b720 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73 65  rDisplay(GetAsse
1b730 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
1b740 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a  n(assembly))),..
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1b780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b790 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b7a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1b7b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1b7c0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1b820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1b830 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
1b840 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
1b850 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73        private As
1b860 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b  sembly assembly;
1b870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1b880 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73  blic Assembly As
1b890 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
1b8a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b8b0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1b8c0 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d  urn assembly; }.
1b8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b8e0 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20   set { assembly 
1b8f0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1b900 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b910 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1b960 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1b970 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69  ate string logFi
1b980 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
1b990 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
1b9a0 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a  ng LogFileName..
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1b9d0 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46  et { return logF
1b9e0 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1ba00 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  { logFileName = 
1ba10 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1ba20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ba30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ba40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ba80 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1ba90 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  e string directo
1baa0 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
1bab0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
1bac0 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
1bad0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bae0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1baf0 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b  eturn directory;
1bb00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bb10 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74      set { direct
1bb20 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ory = value; }..
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1bb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bba0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
1bbb0 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
1bbc0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1bbd0 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
1bbe0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1bbf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bc00 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1bc10 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20  n coreFileName; 
1bc20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1bc30 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c     set { coreFil
1bc40 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
1bc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1bc60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bcb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1bcc0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1bcd0 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1bcf0 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  ic string LinqFi
1bd00 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
1bd10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bd20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1bd30 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  urn linqFileName
1bd40 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1bd50 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46       set { linqF
1bd60 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
1bd70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bd80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1bd90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1bda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bde0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1bdf0 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
1be00 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
1be10 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
1be20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
1be30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1be40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be50 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
1be60 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
1be70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1be80 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
1be90 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = valu
1bea0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1beb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bec0 20 20 20 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 2f 2f 2f 2f  ////////////////
1bf00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bf10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1bf20 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74  ring debugFormat
1bf30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1bf40 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62  ublic string Deb
1bf50 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ugFormat..      
1bf60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bf70 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1bf80 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61  eturn debugForma
1bf90 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
1bfa0 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
1bfb0 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  gFormat = value;
1bfc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bfd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1bfe0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1bff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c020 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c030 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1c040 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ng traceFormat;.
1c050 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1c060 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65  lic string Trace
1c070 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
1c080 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c090 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1c0a0 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
1c0b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c0c0 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 46      set { traceF
1c0d0 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
1c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c0f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c140 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c150 20 20 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c    private Instal
1c160 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c  lFlags installFl
1c170 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
1c180 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c    public Install
1c190 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61  Flags InstallFla
1c1a0 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gs..            
1c1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c1c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1c1d0 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d  installFlags; }.
1c1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1f0 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c   set { installFl
1c200 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ags = value; }..
1c210 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c220 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c280 70 72 69 76 61 74 65 20 54 72 61 63 65 50 72 69  private TracePri
1c290 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f 72  ority debugPrior
1c2a0 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
1c2b0 20 20 70 75 62 6c 69 63 20 54 72 61 63 65 50 72    public TracePr
1c2c0 69 6f 72 69 74 79 20 44 65 62 75 67 50 72 69 6f  iority DebugPrio
1c2d0 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
1c2e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c2f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c300 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b  n debugPriority;
1c310 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c320 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 50      set { debugP
1c330 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
1c340 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c350 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c360 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c3a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c3b0 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63      private Trac
1c3c0 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
1c3d0 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
1c3e0 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61        public Tra
1c3f0 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65  cePriority Trace
1c400 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
1c410 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c420 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1c430 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72  eturn tracePrior
1c440 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ity; }..        
1c450 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72          set { tr
1c460 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
1c470 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1c480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c490 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c4e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1c4f0 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20  bool install;.. 
1c500 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c510 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a  c bool Install..
1c520 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1c540 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
1c550 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  all; }..        
1c560 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e          set { in
1c570 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d  stall = value; }
1c580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c5e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c5f0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
1c600 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20  ow64;..         
1c610 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
1c620 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
1c630 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c640 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c650 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20  n wow64; }..    
1c660 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1c670 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b  { wow64 = value;
1c680 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c690 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c6a0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c6f0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1c700 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
1c710 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n;..            
1c720 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75  public bool NoRu
1c730 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20  ntimeVersion..  
1c740 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1c760 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74   { return noRunt
1c770 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20  imeVersion; }.. 
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c790 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65  et { noRuntimeVe
1c7a0 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
1c7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c7c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c810 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c820 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1c830 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
1c840 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1c850 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20  ol NoDesktop..  
1c860 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1c880 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b   { return noDesk
1c890 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  top; }..        
1c8a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1c8b0 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b  Desktop = value;
1c8c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c8d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c8e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c920 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c930 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1c940 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20   noCompact;..   
1c950 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1c960 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a  bool NoCompact..
1c970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1c990 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f  et { return noCo
1c9a0 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20  mpact; }..      
1c9b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1c9c0 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75  noCompact = valu
1c9d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1c9e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c9f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ca00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ca30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ca40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1ca50 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20  ol noNetFx20;.. 
1ca60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1ca70 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30  c bool NoNetFx20
1ca80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ca90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1caa0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1cab0 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20  NetFx20; }..    
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1cad0 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61  { noNetFx20 = va
1cae0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1caf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1cb00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1cb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1cb50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1cb60 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  bool noNetFx40;.
1cb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1cb80 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
1cb90 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..            
1cba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1cbb0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1cbc0 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20  noNetFx40; }..  
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1cbe0 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20  t { noNetFx40 = 
1cbf0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1cc00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1cc10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cc60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1cc70 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b  e bool noVs2005;
1cc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1cc90 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
1cca0 30 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  05..            
1ccb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ccc0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1ccd0 6e 6f 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20  noVs2005; }..   
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1ccf0 20 7b 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61   { noVs2005 = va
1cd00 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1cd10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1cd20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1cd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1cd70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1cd80 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1cda0 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
1cdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1cdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cdd0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1cde0 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
1cdf0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1ce00 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
1ce10 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1ce20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ce30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1ce40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1ce80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1ce90 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
1cea0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1ceb0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1cee0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
1cef0 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
1cf00 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1cf10 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
1cf20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1cf30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cf40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1cf90 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1cfa0 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
1cfb0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1cfc0 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20  ol NoTrace..    
1cfd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1cfe0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1cff0 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b   return noTrace;
1d000 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d010 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63      set { noTrac
1d020 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1d030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1d0a0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e  ivate bool noCon
1d0b0 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sole;..         
1d0c0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
1d0d0 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20  oConsole..      
1d0e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d0f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1d100 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  eturn noConsole;
1d110 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d120 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73      set { noCons
1d130 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ole = value; }..
1d140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d150 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d1b0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c  private bool noL
1d1c0 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
1d1d0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c   public bool NoL
1d1e0 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  og..            
1d1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d200 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1d210 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20  noLog; }..      
1d220 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1d230 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d  noLog = value; }
1d240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1d260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1d2b0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 74    private bool t
1d2c0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a  hrowOnMissing;..
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1d2e0 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d  ic bool ThrowOnM
1d2f0 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
1d300 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d310 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1d320 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  urn throwOnMissi
1d330 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ng; }..         
1d340 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 68 72         set { thr
1d350 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61  owOnMissing = va
1d360 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1d370 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d380 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20  ////////....    
1d3d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1d3e0 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20  bool whatIf;..  
1d3f0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1d400 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20   bool WhatIf..  
1d410 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1d430 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74 49 66   { return whatIf
1d440 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1d450 20 20 20 20 20 73 65 74 20 7b 20 77 68 61 74 49       set { whatI
1d460 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  f = value; }..  
1d470 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d480 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1d4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1d4e0 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 62 75 67  ivate bool debug
1d4f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1d500 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75 67  ublic bool Debug
1d510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d530 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
1d540 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  bug; }..        
1d550 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
1d560 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bug = value; }..
1d570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d580 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d5d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d5e0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76 65 72  private bool ver
1d5f0 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  bose;..         
1d600 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56     public bool V
1d610 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
1d620 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d630 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1d640 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a  urn verbose; }..
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20 3d 20  set { verbose = 
1d670 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1d680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d690 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1d6e0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1d6f0 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d  e bool confirm;.
1d700 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d710 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d  lic bool Confirm
1d720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d740 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
1d750 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20  nfirm; }..      
1d760 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1d770 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b  confirm = value;
1d780 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d790 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
1d7a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
1d7b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1d7c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1d7d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1d7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d820 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 46         #region F
1d830 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61  rameworkList Cla
1d840 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
1d850 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
1d860 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a   FrameworkList..
1d870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d880 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1d890 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
1d8a0 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
1d8b0 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b  public Framework
1d8c0 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
1d8d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d8e0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1d8f0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1d900 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d910 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1d980 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65  region Public Me
1d990 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
1d9a0 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
1d9b0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
1d9c0 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey;..           
1d9d0 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
1d9e0 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
1d9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
1da20 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
1da30 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
1da40 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
1da50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1da60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1da70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1daa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dab0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1dac0 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
1dad0 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20  gList names;..  
1dae0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1daf0 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65   StringList Name
1db00 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
1db10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1db20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
1db30 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
1db40 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1db50 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
1db60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1db70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dbc0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1dbd0 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
1dbe0 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  Map versions;.. 
1dbf0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1dc00 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72  c VersionMap Ver
1dc10 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  sions..         
1dc20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1dc30 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
1dc40 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a  rn versions; }..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d  set { versions =
1dc70 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1dc80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1dc90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1dca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1dce0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1dcf0 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c  te StringList pl
1dd00 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20  atformNames;..  
1dd10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1dd20 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74   StringList Plat
1dd30 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20  formNames..     
1dd40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1dd50 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1dd60 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e  return platformN
1dd70 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
1dd80 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
1dd90 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76  latformNames = v
1dda0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1ddb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ddc0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1ddd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1dde0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1ddf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1de00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1de50 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73  ion VsList Class
1de60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1de70 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
1de80 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  sList..        {
1de90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1dea0 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
1deb0 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
1dec0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 73         public Vs
1ded0 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
1dee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1def0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
1df00 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
1df10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1df20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1df30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1df80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1df90 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
1dfa0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
1dfb0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f        private Mo
1dfc0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
1dfd0 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  otKey;..        
1dfe0 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
1dff0 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b  egistryKey RootK
1e000 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
1e010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e020 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1e030 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20  rootKey; }..    
1e040 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1e050 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75  { rootKey = valu
1e060 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1e070 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1e080 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e0d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65        private Ve
1e0e0 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f  rsionList versio
1e0f0 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
1e100 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
1e110 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20  ist Versions..  
1e120 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e140 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f   { return versio
1e150 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ns; }..         
1e160 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65 72         set { ver
1e170 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d  sions = value; }
1e180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e190 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1e1a0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
1e1b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1e1c0 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
1e1d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1e1e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1e230 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1e240 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1e250 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  t Data..        
1e260 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1e270 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d  ring CoreFileNam
1e280 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
1e290 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20  .SQLite.dll";.. 
1e2a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1e2b0 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71  onst string Linq
1e2c0 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  FileName = "Syst
1e2d0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
1e2e0 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  inq.dll";..     
1e2f0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1e300 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72   string Designer
1e310 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69  FileName = "SQLi
1e320 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22  te.Designer.dll"
1e330 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
1e340 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1e350 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22  ProviderName = "
1e360 53 51 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76  SQLite Data Prov
1e370 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20  ider";..        
1e380 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1e390 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ring ProjectName
1e3a0 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
1e3b0 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20  SQLite";..      
1e3c0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1e3d0 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f  string LegacyPro
1e3e0 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69  jectName = "SQLi
1e3f0 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  te";..        pr
1e400 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1e410 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ng InvariantName
1e420 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
1e430 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20  SQLite";..      
1e440 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1e450 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79  string FactoryTy
1e460 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  peName = "System
1e470 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
1e480 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20  iteFactory";..  
1e490 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1e4a0 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73 63 72  nst string Descr
1e4b0 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46  iption = ".NET F
1e4c0 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72  ramework Data Pr
1e4d0 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
1e4e0 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  e";....        /
1e4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e530 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e540 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1e550 73 74 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67  string CLRv2Imag
1e560 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
1e570 3d 20 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d  = "v2.0.50727";.
1e580 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e590 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c   const string CL
1e5a0 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
1e5b0 65 72 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33  ersion = "v4.0.3
1e5c0 30 33 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  0319";....      
1e5d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1e5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1e620 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1e630 73 74 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e  st string NameAn
1e640 64 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22  dValueFormat = "
1e650 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20  {0}: {1}";..    
1e660 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1e670 74 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65  t string LogFile
1e680 53 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b  Suffix = ".log";
1e690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1e6f0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1e700 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20  ing RootKeyName 
1e710 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20  = "Software";.. 
1e720 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1e730 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36  onst string Wow6
1e740 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57  4SubKeyName = "W
1e750 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a  ow6432Node";....
1e760 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1e7b0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
1e7c0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e7d0 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  The .NET Framewo
1e7e0 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62  rk has both 32-b
1e7f0 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64  it and 64-bit ed
1e800 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  itions...       
1e810 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
1e820 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
1e830 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49  only bool NetFxI
1e840 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c  s32BitOnly = fal
1e850 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  se;....        /
1e860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e8b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
1e8c0 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20   NOTE: For now, 
1e8d0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73  Visual Studio is
1e8e0 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74   always a 32-bit
1e8f0 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20   application... 
1e900 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1e910 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1e920 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20  c readonly bool 
1e930 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20  VsIs32BitOnly = 
1e940 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
1e950 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e990 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e9a0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1e9b0 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
1e9c0 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20  ng VsIdFormat = 
1e9d0 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "B";....        
1e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1ea30 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1ea40 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
1ea50 67 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65  g XPathForAddEle
1ea60 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
1ea70 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
1ea80 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
1ea90 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
1eaa0 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e  es/add[@invarian
1eab0 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a  t=\"{0}\"]";....
1eac0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ead0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
1eae0 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52  string XPathForR
1eaf0 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a  emoveElement =..
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
1eb10 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
1eb20 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
1eb30 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76  rFactories/remov
1eb40 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b  e[@invariant=\"{
1eb50 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20  0}\"]";..       
1eb60 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1eb70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1eb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ebc0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1ebd0 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
1ebe0 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
1ebf0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
1ec00 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
1ec10 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
1ec20 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
1ec30 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
1ec40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1ec50 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74   string traceCat
1ec60 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  egory = Path.Get
1ec70 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
1ec80 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
1ec90 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f  bly.Location); /
1eca0 2a 20 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72  * NOTE: Same for
1ecb0 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65   debug and trace
1ecc0 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
1ecd0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
1ece0 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
1ecf0 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ugCallback = App
1ed00 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20  Debug;..        
1ed10 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54  private static T
1ed20 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
1ed30 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70  ceCallback = App
1ed40 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
1ed50 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1ed60 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1edb0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1edc0 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d   Trace Handling.
1edd0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1ede0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
1edf0 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a  etLogFileName(..
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1ee10 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20  ng typeName..   
1ee20 20 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68           ) /* th
1ee30 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
1ee40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
1ee50 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
1ee60 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c   Path.GetTempFil
1ee70 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  eName();..      
1ee80 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
1ee90 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65  ectory = Path.Ge
1eea0 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66  tDirectoryName(f
1eeb0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ileName);..     
1eec0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
1eed0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74  leNameOnly = Pat
1eee0 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74  h.GetFileNameWit
1eef0 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69  houtExtension(fi
1ef00 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1ef10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
1ef20 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  ewFileName = Pat
1ef30 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
1ef40 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ory, String.Form
1ef50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1ef60 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22       "{0}{1}{2}"
1ef70 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
1ef80 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
1ef90 72 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29  rEmpty(typeName)
1efa0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
1efb0 20 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79          "." + ty
1efc0 70 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e  peName : String.
1efd0 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c  Empty, "." + fil
1efe0 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20  eNameOnly +..   
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f000 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29   LogFileSuffix))
1f010 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f020 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e   File.Move(fileN
1f030 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65  ame, newFileName
1f040 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f050 20 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65    return newFile
1f060 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Name;..        }
1f070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1f080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f0c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1f0d0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
1f0e0 69 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20  id AppDebug(..  
1f0f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1f100 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
1f110 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
1f120 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
1f130 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1f140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
1f150 61 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65  aceOps.DebugCore
1f160 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
1f170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f180 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
1f190 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
1f1a0 4e 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a  NextDebugId(),..
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61  TraceOps.TimeSta
1f1d0 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e  mp(DateTime.UtcN
1f1e0 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63  ow), message), c
1f1f0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1f200 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f260 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1f270 63 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28  c void AppTrace(
1f280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1f290 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
1f2a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1f2b0 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
1f2c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1f2d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f2e0 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1f2f0 43 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d  Core(String.Form
1f300 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f310 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1f320 61 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  aceFormat, Trace
1f330 4f 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28  Ops.NextTraceId(
1f340 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1f350 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d      TraceOps.Tim
1f360 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e  eStamp(DateTime.
1f370 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65  UtcNow), message
1f380 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  ), category);.. 
1f390 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f3a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1f3b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f400 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1f410 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66  on Generic Platf
1f420 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  orm Handling..  
1f430 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1f440 61 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69  atic bool Is64Bi
1f450 74 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20  tProcess()..    
1f460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f470 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1f480 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
1f490 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20  rns true if the 
1f4a0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
1f4b0 69 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74  is 64-bit.  If t
1f4c0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  his..           
1f4d0 20 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72 75   //       is tru
1f4e0 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61  e, we *know* tha
1f4f0 74 20 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e  t we must be run
1f500 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74  ning on a 64-bit
1f510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1f520 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67         operating
1f530 20 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e   system as well.
1f540 20 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68    However, if th
1f550 69 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d  is is false, we.
1f560 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
1f570 20 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63        do not nec
1f580 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68  essarily know th
1f590 61 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  at we are runnin
1f5a0 67 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20  g on a 32-bit.. 
1f5b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f5c0 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79      operating sy
1f5d0 73 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57  stem, due to WoW
1f5e0 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e  64 (Win32-on-Win
1f5f0 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  64), etc...     
1f600 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1f610 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49         return (I
1f620 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69  ntPtr.Size == si
1f630 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20  zeof(long)); // 
1f640 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73  NOTE: Pointer is
1f650 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20   64-bits?..     
1f660 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f6c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1f6d0 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f 74  c string GetRoot
1f6e0 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
1f6f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
1f700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1f710 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1f720 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
1f730 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
1f740 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61  }{1}", RootKeyNa
1f750 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1f760 20 20 20 20 20 77 6f 77 36 34 20 26 26 20 49 73       wow64 && Is
1f770 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f  64BitProcess() ?
1f780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f790 20 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77        "\\" + Wow
1f7a0 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53  64SubKeyName : S
1f7b0 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20  tring.Empty);.. 
1f7c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f7d0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1f7e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f830 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1f840 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e  on Generic Strin
1f850 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  g Handling..    
1f860 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1f870 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73  ic string ForDis
1f880 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
1f890 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d     object value.
1f8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1f8b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f8c0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1f8d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1f8e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f8f0 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20  n "<null>";.... 
1f900 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1f910 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  g result;..     
1f920 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
1f930 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65   = value.GetType
1f940 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1f950 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74     if (type == t
1f960 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74  ypeof(XmlElement
1f970 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1f980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f990 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
1f9a0 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d  ement = (XmlElem
1f9b0 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ent)value;....  
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f9d0 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f  sult = element.O
1f9e0 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20  uterXml;..      
1f9f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1fa00 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
1fa10 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72  pe == typeof(Ver
1fa20 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20  sion))..        
1fa30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fa40 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
1fa50 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f  ersion = (Versio
1fa60 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  n)value;....    
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1fa80 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
1fa90 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69  at("v{0}", versi
1faa0 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
1fab0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1fac0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1fad0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fae0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76        result = v
1faf0 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b  alue.ToString();
1fb00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fb10 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
1fb20 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20  ength == 0)..   
1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb40 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e   return "<empty>
1fb50 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1fb60 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
1fb70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61     type.IsSubcla
1fba0 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75  ssOf(typeof(Valu
1fbb0 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20  eType)) ? "{0}" 
1fbc0 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20  : "\"{0}\"",..  
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbe0 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20    result);..    
1fbf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fc00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fc10 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
1fc20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1fc30 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1fc40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1fc90 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73       #region Ass
1fca0 65 6d 62 6c 79 20 41 74 74 72 69 62 75 74 65 20  embly Attribute 
1fcb0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1fcc0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1fcd0 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
1fce0 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  lyConfiguration(
1fcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
1fd00 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
1fd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1fd20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fd30 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
1fd40 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
1fd50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1fd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fd80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fd90 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
1fda0 65 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28  embly.IsDefined(
1fdb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
1fdd0 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e  peof(AssemblyCon
1fde0 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
1fdf0 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20  ute), false)).. 
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1fe30 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
1fe40 69 6f 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e  ionAttribute con
1fe50 66 69 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20  figuration =..  
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe70 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d            (Assem
1fe80 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
1fe90 41 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20  Attribute)..    
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1feb0 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
1fec0 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
1fed0 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fef0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
1ff00 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74  semblyConfigurat
1ff10 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a  ionAttribute),..
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff40 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20  false)[0];....  
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e        return con
1ff70 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69  figuration.Confi
1ff80 67 75 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20  guration;..     
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1ffa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ffb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ffc0 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fff0 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
20000 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20020 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20030 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
20040 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
20050 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
200a0 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20  .        public 
200b0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
200c0 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d  tAssemblyTitle(.
200d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
200e0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a  embly assembly..
200f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
20100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20110 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
20120 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
20130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20140 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
20150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20170 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
20180 6d 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d  mbly.IsDefined(.
20190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
201b0 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c  eof(AssemblyTitl
201c0 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  eAttribute), fal
201d0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
201e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20200 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74       AssemblyTit
20210 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74 6c  leAttribute titl
20220 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
20230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20240 20 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41   (AssemblyTitleA
20250 74 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20  ttribute)..     
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e         assembly.
20280 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75  GetCustomAttribu
20290 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tes(..          
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
202c0 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
202d0 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b  ute), false)[0];
202e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
202f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20300 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d  rn title.Title;.
20310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20320 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20330 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20340 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
20350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20370 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
20380 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
20390 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
203a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
203b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
203c0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
203d0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
203e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20430 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20440 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
20450 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69  Framework Handli
20460 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
20470 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
20480 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f  g GetFrameworkRo
20490 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  otKeyName(..    
204a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
204b0 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
204c0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
204d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
204e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
204f0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
20500 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  .NETFramework",.
20510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20520 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
20530 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20  wow64));..      
20540 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
20550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
205a0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
205b0 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
205c0 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
205d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
205e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
205f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
20600 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
20610 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
20620 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
20630 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
20640 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
20650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
20660 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
20670 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
20680 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
20690 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
206a0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
206c0 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
206d0 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20  {1}\\v{2}\\{3}" 
206e0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
206f0 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
20700 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d  ft\\{1}\\v{2}";.
20710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
20720 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
20730 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52  mat(format, GetR
20740 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34  ootKeyName(wow64
20750 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20760 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
20770 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
20780 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
20790 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
207a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
207b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
20800 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
20810 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69  ng GetImageRunti
20820 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
20830 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
20840 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
20850 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
20860 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
20870 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
20880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20890 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
208a0 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  mbly =..        
208b0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
208c0 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f  mbly.ReflectionO
208d0 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65  nlyLoadFrom(file
208e0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
208f0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
20900 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
20910 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
20920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20930 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
20940 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  .ImageRuntimeVer
20950 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
20960 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20970 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
20980 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20990 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
209a0 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
209b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
209c0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
209d0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
209e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
209f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20a30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
20a40 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
20a50 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
20a60 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
20a70 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
20a80 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
20a90 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
20aa0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
20ab0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
20ac0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
20ad0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
20ae0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
20af0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
20b00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
20b10 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
20b20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
20b30 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
20b40 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
20b50 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
20b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b70 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47        rootKey, G
20b80 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b  etFrameworkRootK
20b90 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 66  eyName(wow64), f
20ba0 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
20bb0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
20bc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
20bd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20bf0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
20c20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20c30 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
20c40 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
20c50 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f  key, "InstallRoo
20c80 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  t", null, whatIf
20c90 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20cb0 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
20cc0 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20ce0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20d00 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28  rn Path.Combine(
20d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20d20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29 76 61        (string)va
20d30 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lue, String.Form
20d40 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65  at("v{0}", frame
20d50 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a  workVersion));..
20d60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20d70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20d80 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
20d90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
20de0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
20df0 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b  on Per-Framework
20e00 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69  /Platform Handli
20e10 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
20e20 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
20e30 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77  InitializeFramew
20e40 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20  orkList(..      
20e50 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
20e60 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
20e70 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
20e80 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
20e90 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
20ea0 20 20 20 20 20 20 72 65 66 20 46 72 61 6d 65 77        ref Framew
20eb0 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
20ec0 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  kList..         
20ed0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
20ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
20ef0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
20f00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
20f10 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
20f20 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61  rkList = new Fra
20f30 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d  meworkList();...
20f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
20f50 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52  (frameworkList.R
20f60 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
20f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20f80 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
20f90 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ootKey = rootKey
20fa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20fb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ff0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21000 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
21010 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
21020 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
21030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21040 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
21050 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  st.Names = new S
21060 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21080 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
21090 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
210a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
210b0 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
210d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
210e0 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65  s.Add(".NETFrame
210f0 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  work");....     
21100 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
21110 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
21120 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
21130 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
21140 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
21150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21160 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
21170 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
21180 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
21190 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
211c0 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
211d0 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
211e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
211f0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
21200 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
21210 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
21220 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
21230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
21240 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21250 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
212a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
212b0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
212c0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
212d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
212e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
212f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
21300 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
21310 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20  rsionMap();.... 
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21330 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
21340 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
21350 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
21360 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
21370 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21390 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b  VersionList desk
213a0 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  topVersionList =
213b0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
213c0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
213d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
213e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
213f0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
21400 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
21410 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20)..           
21420 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
21430 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
21440 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
21450 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a  2, 0, 50727));..
21460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21470 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
21480 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
21490 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
214a0 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a  ion.NoNetFx40)..
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
214d0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
214e0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c  ew Version(4, 0,
214f0 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20   30319));....   
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21510 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
21520 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45  ersions.Add(".NE
21530 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  TFramework",..  
21540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21550 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
21560 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20  sionList);..    
21570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21590 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
215a0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
215b0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
215c0 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
215d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
215e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215f0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
21600 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e  Versions.Add(".N
21610 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
21620 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
21640 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
21650 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
21680 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20  on(2, 0, 0, 0), 
21690 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35  new Version(3, 5
216a0 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20  , 0, 0)..       
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 29               }))
216c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
216d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
216e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
216f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21730 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21740 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
21750 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
21760 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
21770 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
21790 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
217a0 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77  tformNames = new
217b0 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
217c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
217d0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
217e0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
217f0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
21800 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20  NoDesktop)..    
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21820 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
21830 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
21840 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
21850 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
21860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
21870 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
21880 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
21890 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
218a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
218b0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
218c0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
218d0 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b  mNames.Add("Pock
218e0 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20  etPC");..       
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
21900 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
21910 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d  ormNames.Add("Sm
21920 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20  artphone");..   
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21940 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
21950 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
21960 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a  ("WindowsCE");..
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21990 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
219a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
219f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21a00 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
21a10 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20  veFramework(..  
21a20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
21a30 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
21a40 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
21a50 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
21a60 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
21a70 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
21a80 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
21a90 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
21aa0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21ac0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
21ad0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
21ae0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
21af0 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
21b00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
21b10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21b20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
21b30 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  e = GetFramework
21b40 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
21b50 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
21b60 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
21b70 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
21b80 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b  ormName, wow64);
21b90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21ba0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
21bb0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
21bc0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
21bd0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
21bf0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
21c00 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
21c10 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
21c20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21c30 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
21c40 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21c60 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21c80 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  f (platformName 
21c90 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45  != null) // NOTE
21ca0 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74  : Skip non-deskt
21cb0 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op...           
21cc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21cd0 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
21ce0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
21cf0 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46  directory = GetF
21d00 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
21d10 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
21d20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
21d30 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
21d40 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  n, wow64, whatIf
21d50 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
21d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21d70 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
21d80 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
21d90 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
21da0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21db0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
21dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
21dd0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
21de0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
21e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
21e30 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
21e40 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
21e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e60 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
21e70 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
21e80 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
21e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ea0 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
21eb0 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 69  work {0} found i
21ec0 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e  n directory {1}.
21ed0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
21ee0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
21ef0 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
21f00 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
21f10 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21f40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21f50 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
21f60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
21f70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
21f80 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21fd0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
21fe0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
21ff0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
22000 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
22010 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
22020 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
22030 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20  orkConfig(..    
22040 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
22050 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
22060 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
22070 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
22080 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
22090 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43        FrameworkC
220a0 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61  onfigCallback ca
220b0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
220c0 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
220d0 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  riant,..        
220e0 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
220f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
22100 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e  ring description
22110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
22120 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d  tring typeName,.
22130 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
22140 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62  emblyName assemb
22150 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lyName,..       
22160 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
22170 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
22180 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
22190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
221a0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
221b0 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
221c0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
221d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
221e0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
221f0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
22200 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
22210 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
22220 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
22230 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
22240 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
22250 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
22260 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22280 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
22290 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
222b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
222c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
222d0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
222e0 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
222f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
22300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22310 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
22320 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
22330 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
22340 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
22350 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
22360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22370 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
22380 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
22390 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
223a0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
223b0 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
223c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
223d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
223e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
223f0 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
22400 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
22410 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22420 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22430 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22440 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66   if (!Object.Ref
22450 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
22460 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43  tKey, registry.C
22470 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a  urrentUser) &&..
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
224a0 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
224b0 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   registry.LocalM
224c0 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20  achine))..      
224d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
224e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
224f0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
22500 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
22510 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22530 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
22540 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
22550 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
22560 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
22570 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
22580 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22590 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
225a0 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
225b0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
225c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
225e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
225f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22600 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
22610 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
22620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
22650 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
22660 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
22670 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
22680 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
22690 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
226a0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
226b0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
226c0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
226d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
226f0 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
22700 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
22710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22720 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
22730 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22740 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
22750 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
22760 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
22770 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
22780 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
22790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
227a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
227b0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
227c0 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
227d0 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
227e0 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
22810 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
22820 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
22830 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
22860 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
22870 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
22880 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22890 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
228a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
228b0 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
228c0 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
228d0 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
228e0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
228f0 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
22900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22910 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
22920 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
22930 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
22940 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
22950 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
22960 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
22970 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
22980 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
22990 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
229a0 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
229b0 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
229c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
229d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
229e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
229f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
22a00 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
22a20 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
22a30 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
22a40 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
22a50 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
22a60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22a80 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c  / NOTE: Skip all
22a90 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61   non-desktop fra
22aa0 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66  meworks (i.e. if
22ab0 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20   the platform.. 
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22ad0 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20  /       name is 
22ae0 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20  not null)...    
22af0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
22b20 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
22b40 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
22b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
22b80 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73  e supported vers
22b90 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72  ions of this par
22ba0 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20  ticular..       
22bb0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
22bc0 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20    framework...  
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22bf0 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72    VersionList fr
22c00 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
22c10 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
22c20 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d         if (!fram
22c30 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
22c40 6e 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d  ns.TryGetValue(.
22c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c60 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
22c70 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
22c80 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
22c90 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
22ca0 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65            (frame
22cb0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
22cc0 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
22cd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cf0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
22d30 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
22d40 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b  ion in framework
22d50 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20  VersionList)..  
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d80 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
22d90 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
22da0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
22db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22dc0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
22dd0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
22de0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
22df0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d  "frameworkName =
22e20 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56   {0}, frameworkV
22e30 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20  ersion = {1}, " 
22e40 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
22e50 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74             "plat
22e60 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c  formName = {2}",
22e70 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
22e80 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20  eworkName),..   
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
22eb0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
22ec0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
22ee0 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e  isplay(platformN
22ef0 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
22f00 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22f20 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b   (!HaveFramework
22f30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22f50 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
22f60 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
22f70 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f90 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61        platformNa
22fa0 6d 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  me, wow64, whatI
22fb0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
22ff0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
23000 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
23010 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
23040 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
23050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23070 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e  .NET Framework n
23080 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
23090 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
230a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
230c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230e0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23110 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
23120 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
23150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23160 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
23170 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
23180 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
23190 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
231a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
231b0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ey, frameworkVer
231c0 73 69 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61  sion, wow64, wha
231d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
231e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
231f0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
23200 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
23210 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23240 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23250 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
23260 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
23270 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
232a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
232b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232d0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
232e0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
232f0 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76  directory is inv
23300 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20  alid, " +..     
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
23330 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
23340 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
23350 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
23380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
233a0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
233b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
233c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
233d0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
233e0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
233f0 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67  rectory, "Config
23400 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
23410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
23420 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
23430 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23470 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
23480 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
23490 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
234c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
234d0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
234e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
23500 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
23510 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20  } directory {1} 
23520 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 20 20 20 20 20 20 20 20 20 22 65 78 69 73 74            "exist
23550 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20  , skipping...", 
23560 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
23570 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
235a0 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29  splay(directory)
235b0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
235c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
235e0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23610 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
23620 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
23630 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
23640 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22  "machine.config"
23650 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23660 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
23670 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e  ile.Exists(fileN
23680 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
23690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
236c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
236d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
236e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
23700 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
23710 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
23720 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23740 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
23750 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20  mework {0} file 
23760 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  {1} does not exi
23770 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  st, " +..       
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
237a0 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
237b0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
237c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
237e0 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61  orDisplay(fileNa
237f0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
23800 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
23810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23820 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23840 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23850 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
23860 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65  calSaved = false
23870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23880 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
23890 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238b0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
238c0 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20  nvariant, name, 
238d0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
238e0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
23910 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f  , clientData, wo
23920 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  w64, throwOnMiss
23930 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
23960 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65  e, ref localSave
23970 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  d, ref error))..
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23990 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
239b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
239e0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
239f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23a20 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20   (localSaved && 
23a30 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20  !saved)..       
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a50 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75       saved = tru
23a60 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23a80 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
23ab0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
23ac0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
23ad0 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
23b00 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
23b10 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
23b20 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b40 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20      "localSaved 
23b50 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b  = {0}, saved = {
23b60 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
23b90 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f  (localSaved), Fo
23ba0 72 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29  rDisplay(saved))
23bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bd0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23be0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
23bf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23c00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
23c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23c20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23c30 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
23c40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
23c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23ca0 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
23cb0 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
23cc0 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
23cd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23ce0 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
23cf0 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
23d00 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
23d10 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67  MockRegistry reg
23d20 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
23d30 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73      FrameworkLis
23d40 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c  t frameworkList,
23d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
23d60 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43  ameworkRegistryC
23d70 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
23d80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
23d90 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
23da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
23db0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
23dc0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
23dd0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
23de0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
23df0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
23e00 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
23e10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
23e20 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
23e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23e40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e50 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73         if (regis
23e60 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  try == null)..  
23e70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
23e90 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65  or = "invalid re
23ea0 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20  gistry";..      
23eb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
23ec0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23ed0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23ee0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
23ef0 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
23f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
23f30 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74  d framework list
23f40 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
23f50 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23f60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
23f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23f80 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
23f90 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77  rootKey = framew
23fa0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b  orkList.RootKey;
23fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23fc0 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
23fd0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
23fe0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23ff0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
24000 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b  valid root key";
24010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24020 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24030 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24050 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65   (!Object.Refere
24060 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
24070 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72 72  y, registry.Curr
24080 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20  entUser) &&..   
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62               !Ob
240a0 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71  ject.ReferenceEq
240b0 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65  uals(rootKey, re
240c0 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68  gistry.LocalMach
240d0 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ine))..         
240e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
240f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72        error = "r
24100 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20  oot key must be 
24110 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d  per-user or per-
24120 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20  machine";..     
24130 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24140 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
24150 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24160 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
24170 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
24180 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
241a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
241b0 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61  "no framework na
241c0 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
241e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
241f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24200 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
24210 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
24220 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
24230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
24250 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
24260 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e  rk versions foun
24270 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
24280 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
24290 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
242a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
242b0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
242c0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
242d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
242e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
242f0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
24300 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e  = "no platform n
24310 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
24320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24330 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
24340 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24350 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
24360 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
24370 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65  s.Count != frame
24380 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
24390 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20  mNames.Count).. 
243a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
243c0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
243d0 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e  mat("framework n
243e0 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f  ame count {0} do
243f0 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20  "match platform 
24420 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c  name count {1}",
24430 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
24440 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20  ames.Count,..   
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
24470 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75  latformNames.Cou
24480 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt);....        
24490 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
244a0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
244b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
244c0 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
244d0 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
244e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
244f0 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78  mes.Count; index
24500 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
24510 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24520 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
24530 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
24540 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f   Grab the name o
24550 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20  f the framework 
24560 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65  (e.g. ".NETFrame
24570 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20  work")..        
24580 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
24590 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   and the name of
245a0 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65   the platform (e
245b0 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29  .g. "WindowsCE")
245c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
245d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
245e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
245f0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72  ameworkName = fr
24600 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
24610 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  s[index];..     
24620 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
24630 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
24640 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
24650 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64  latformNames[ind
24660 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
24670 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
24680 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
24690 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75  OTE: Grab the su
246a0 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73  pported versions
246b0 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75   of this particu
246c0 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lar..           
246d0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72       //       fr
246e0 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
246f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
24700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
24710 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77  rsionList framew
24720 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d  orkVersionList;.
24730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24740 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
24750 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
24760 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
24770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24780 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
24790 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72  me, out framewor
247a0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c  kVersionList) ||
247b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
247c0 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b        (framework
247d0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
247e0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
247f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
24810 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
24820 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
24840 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
24850 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
24860 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
24870 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
24880 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248a0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
248b0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
248c0 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
248f0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
24900 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
24910 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
24920 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
24930 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
24940 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
24950 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
24980 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
24990 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
249a0 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249c0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
249d0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
24a00 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
24a10 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
24a20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24a30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
24a40 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20  aveFramework(.. 
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a60 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
24a70 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
24a80 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
24a90 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
24ac0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76  wow64, whatIf, v
24ad0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24b00 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
24b10 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
24b20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
24b30 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
24b60 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
24b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b80 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
24b90 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20 66   Framework not f
24ba0 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
24bb0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bd0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
24c00 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
24c10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c30 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
24c40 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c60 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
24c90 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cb0 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
24cc0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
24cd0 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cf0 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
24d00 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c  ame, clientData,
24d10 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
24d20 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
24d50 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
24d60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24d70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24db0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24dc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24dd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24de0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
24df0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
24e00 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
24e10 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
24e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24e70 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69    #region Per-Vi
24e80 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73  sual Studio Vers
24e90 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ion Handling..  
24ea0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
24eb0 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61  atic void Initia
24ec0 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20  lizeVsList(..   
24ed0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
24ee0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
24ef0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ,..            C
24f00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
24f10 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
24f20 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73 4c           ref VsL
24f30 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20  ist vsList..    
24f40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
24f50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24f60 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
24f70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24f80 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20         vsList = 
24f90 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d  new VsList();...
24fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
24fb0 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  (vsList.RootKey 
24fc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24fd0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
24fe0 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b  .RootKey = rootK
24ff0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
25000 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
25010 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
25020 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
25050 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
25060 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
25070 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
25080 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
25090 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
250a0 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29 0d  ation.NoVs2005).
250b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250c0 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
250d0 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
250e0 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20  sion(8, 0)); // 
250f0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
25100 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  05....          
25110 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
25120 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
25130 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
25140 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20  ion.NoVs2008).. 
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25160 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
25170 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
25180 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20 56 69  on(9, 0)); // Vi
25190 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38  sual Studio 2008
251a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
251b0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
251c0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
251d0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
251e0 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20  n.NoVs2010)..   
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
25210 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
25220 28 31 30 2c 20 30 29 29 3b 2f 2f 20 56 69 73 75  (10, 0));// Visu
25230 61 6c 20 53 74 75 64 69 6f 20 32 30 31 30 0d 0a  al Studio 2010..
25240 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25250 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25260 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
252b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
252c0 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56  tatic bool HaveV
252d0 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  sVersion(..     
252e0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
252f0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
25300 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
25310 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
25320 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
25330 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
25340 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
25350 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25360 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
25370 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
25380 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25390 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
253a0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
253b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
253c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
253d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
253e0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
253f0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
25400 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
25410 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
25420 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
25430 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
25440 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
25450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25460 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
25470 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
25480 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
25490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
254a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
254b0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
254c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
254d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
254e0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
254f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
25500 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
25510 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
25520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25530 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61       key, "Insta
25540 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68  llDir", null, wh
25550 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
25560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25570 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
25580 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
255b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
255c0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
255d0 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75  y = (string)valu
255e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
255f0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
25600 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
25610 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
25640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25650 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
25660 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
25670 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25680 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25690 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
256a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
256b0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
256c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
256d0 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  wer,..          
256e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
256f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
25700 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
25710 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
25720 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73              "Vis
25730 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d 20 66  ual Studio {0} f
25740 6f 75 6e 64 20 69 6e 20 64 69 72 65 63 74 6f 72  ound in director
25750 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  y {1}.",..      
25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
25770 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69  rDisplay(vsVersi
25780 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on), ForDisplay(
25790 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20  directory)),..  
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257b0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
257c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
257d0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
257e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
257f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
25800 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25850 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
25860 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
25870 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
25880 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
25890 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
258a0 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  l ForEachVsVersi
258b0 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
258c0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
258d0 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d  istry registry,.
258e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c  .            VsL
258f0 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20  ist vsList,..   
25900 20 20 20 20 20 20 20 20 20 56 69 73 75 61 6c 53           VisualS
25910 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c  tudioRegistryCal
25920 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
25930 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
25940 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
25950 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
25960 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
25970 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25980 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
25990 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
259a0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
259b0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
259c0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
259d0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
259e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
259f0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
25a00 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
25a10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25a20 20 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20     if (registry 
25a30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25a40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25a50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25a60 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74   "invalid regist
25a70 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry";..          
25a80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25a90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
25aa0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25ab0 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
25ac0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25ad0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25ae0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
25af0 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b  nvalid VS list";
25b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25b10 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
25b40 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
25b50 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52  otKey = vsList.R
25b60 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
25b70 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
25b80 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
25b90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25ba0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25bb0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
25bc0 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
25bd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25be0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25bf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25c00 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74       if (!Object
25c10 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
25c20 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74  (rootKey, regist
25c30 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20  ry.CurrentUser) 
25c40 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
25c50 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65      !Object.Refe
25c60 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
25c70 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f  Key, registry.Lo
25c80 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20  calMachine))..  
25c90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
25cb0 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
25cc0 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
25cd0 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
25ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25cf0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
25d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
25d20 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e   (vsList.Version
25d30 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
25d40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25d50 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25d60 20 3d 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f   = "no VS versio
25d70 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
25d80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25d90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
25da0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
25db0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
25dc0 28 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69  (Version vsVersi
25dd0 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72  on in vsList.Ver
25de0 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20  sions)..        
25df0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25e00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25e10 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
25e20 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
25e30 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
25e40 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
25e50 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
25e60 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
25e70 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25e80 20 20 20 20 20 20 20 20 20 20 22 76 73 56 65 72            "vsVer
25e90 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  sion = {0}", For
25ea0 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f  Display(vsVersio
25eb0 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
25ec0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
25ed0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25ef0 28 21 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28  (!HaveVsVersion(
25f00 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
25f10 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
25f20 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f50 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
25f60 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
25f70 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
25fa0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
25fb0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25fd0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 76 65  Visual Studio ve
25fe0 72 73 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c  rsion not found,
25ff0 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26010 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
26020 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
26030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
26040 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
26050 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26070 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
26080 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
26090 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
260a0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
260b0 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
260c0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
260e0 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
260f0 6e 2c 20 70 61 63 6b 61 67 65 2c 20 63 6c 69 65  n, package, clie
26100 6e 74 44 61 74 61 2c 20 77 6f 77 36 34 2c 0d 0a  ntData, wow64,..
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d          throwOnM
26130 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
26140 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
26150 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
26160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26180 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
26190 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
261a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
261b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
261c0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
261d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
261e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
261f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26240 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
26250 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65  nfiguration File
26260 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
26270 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
26280 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
26290 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
262a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
262b0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62  tatic bool AddDb
262c0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
262d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
262e0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
262f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
26300 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
26310 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
26320 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
26330 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
26340 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
26350 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
26360 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
26370 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
26380 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
26390 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
263a0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
263b0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
263c0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
263d0 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
263e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
263f0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
26400 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
26410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26420 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79        bool dirty
26430 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
26440 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65         XmlDocume
26450 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65  nt document = ne
26460 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b  w XmlDocument();
26470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26480 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76  document.Preserv
26490 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72  eWhitespace = tr
264a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
264b0 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66   document.Load(f
264c0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
264d0 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
264e0 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d  ent addElement =
264f0 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
26500 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
26520 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68  ing.Format(XPath
26530 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69  ForAddElement, i
26540 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d  nvariant)) as Xm
26550 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
26560 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
26570 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
26580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265a0 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e   string[] elemen
265b0 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20  tNames = {..    
265c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265d0 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61      "system.data
265e0 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46 61  ", "DbProviderFa
265f0 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20  ctories"..      
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b                };
26610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26620 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70      XmlElement p
26630 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
26640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26650 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44        document.D
26660 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20  ocumentElement; 
26670 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  /* configuration
26680 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
26690 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
266a0 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61  string elementNa
266b0 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d  me in elementNam
266c0 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
266d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
266e0 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
266f0 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75  lement = previou
26700 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53  sElement.SelectS
26710 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29      elementName)
26740 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
26750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26760 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c         if (addEl
26770 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
26780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26790 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
267b0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
267c0 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
267d0 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74   elementName, St
26800 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
26830 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
26840 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
26850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26860 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
26880 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
26890 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20   addElement;..  
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
268b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
268c0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20     addElement = 
268d0 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45  document.CreateE
268e0 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20  lement(..       
268f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
26900 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  d", String.Empty
26910 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26920 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
26930 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c  ement.AppendChil
26940 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
26950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26960 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
26970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
26980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26990 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
269a0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
269b0 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29  ttribute("name")
269c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
269d0 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72         name, Str
269e0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
269f0 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
26a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
26a30 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c  ttribute("name",
26a40 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20   name);..       
26a50 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
26a60 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
26a70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26a80 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
26a90 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
26aa0 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
26ab0 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20  "invariant"),.. 
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ad0 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20 53 74     invariant, St
26ae0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49  ringComparison.I
26af0 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
26b00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74    addElement.Set
26b30 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
26b40 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74  iant", invariant
26b50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26b60 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
26b70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26b80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26b90 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
26ba0 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65  ls(addElement.Ge
26bb0 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
26bc0 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20  ription"),..    
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72  description, Str
26bf0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e  ingComparison.In
26c00 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29  variantCulture))
26c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c30 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
26c40 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
26c50 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74  ption", descript
26c60 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
26c70 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
26c80 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
26c90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26ca0 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79     string fullTy
26cb0 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e  peName = String.
26cc0 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d  Format("{0}, {1}
26cd0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
26ce0 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73      typeName, as
26cf0 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  semblyName);....
26d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26d10 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
26d20 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
26d30 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d  ribute("type"),.
26d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d50 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d       fullTypeNam
26d60 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
26d70 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
26d80 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
26d90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26da0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
26db0 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
26dc0 74 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e  type", fullTypeN
26dd0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
26de0 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
26df0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
26e00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26e10 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20     if (dirty || 
26e20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
26e30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26e40 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
26e50 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
26e60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
26e70 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
26e80 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
26e90 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26eb0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
26ec0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
26ed0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
26ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ef0 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65         "addEleme
26f00 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  nt = {0}", ForDi
26f10 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74  splay(addElement
26f20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
26f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
26f40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f80 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
26f90 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
26fb0 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ved = true;..   
26fc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26fd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26fe0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
26ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
27000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27050 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
27060 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
27070 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
27080 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
27090 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62  ic bool RemoveDb
270a0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
270b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
270c0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
270d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
270e0 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
270f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
27100 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
27110 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
27120 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
27130 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
27140 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
27150 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
27160 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
27170 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27180 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20       bool dirty 
27190 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
271a0 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e        XmlDocumen
271b0 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77  t document = new
271c0 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d   XmlDocument();.
271d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
271e0 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65  ocument.Preserve
271f0 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75  Whitespace = tru
27200 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27210 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69  document.Load(fi
27220 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
27230 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
27240 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20  nt addElement = 
27250 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
27260 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
27270 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
27280 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46  ng.Format(XPathF
27290 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
272a0 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
272b0 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
272c0 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45          if (addE
272d0 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
272e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
272f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27300 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e  addElement.Paren
27310 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
27320 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
27330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27340 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
27350 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27360 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
27370 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65  lement removeEle
27380 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
27390 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
273a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
273b0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
273c0 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45  (XPathForRemoveE
273d0 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
273e0 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
273f0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
27400 20 20 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d    if (removeElem
27410 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
27420 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27430 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d               rem
27440 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e  oveElement.Paren
27450 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
27460 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29  d(removeElement)
27470 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27480 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
27490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
274a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
274b0 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
274c0 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
274d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
274e0 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
274f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27500 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
27510 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
27520 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
27530 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
27540 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
27550 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
27560 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
27570 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
27580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27590 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d     "addElement =
275a0 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d   {0}, removeElem
275b0 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ent = {1}",..   
275c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275d0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
275e0 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72  addElement), For
275f0 44 69 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c  Display(removeEl
27600 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20  ement)),..      
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27620 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
27630 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27640 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
27650 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27660 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
27670 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Save(fileName);.
27680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27690 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
276a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
276b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
276c0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
276d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
276e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
276f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27720 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27730 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
27740 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
27750 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
27760 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
27770 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
27780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
27790 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
277a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
277b0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
277c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
277d0 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
277e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
277f0 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
27800 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
27810 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
27820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
27830 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
27840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27850 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
27860 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
27870 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
27880 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
27890 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
278a0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
278b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
278c0 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
278d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
278e0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
278f0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27910 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
27920 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
27930 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
27940 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
27950 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
27960 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
27970 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27980 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27990 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
279a0 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
279b0 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b   config callback
279c0 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
279d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
279e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
279f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27a00 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
27a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a30 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
27a40 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
27a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a60 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
27a70 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
27a80 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
27a90 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
27ab0 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
27ac0 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62             AddDb
27ad0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
27ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27af0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
27b00 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
27b10 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
27b20 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
27b30 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
27b40 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
27b50 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
27b60 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
27b70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27b80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
27b90 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
27ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27bb0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
27bc0 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
27bd0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
27be0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
27bf0 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
27c00 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
27c10 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
27c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27c30 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
27c40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27c50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
27c60 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
27c70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27cc0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
27cd0 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20  ssembly Folders 
27ce0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
27cf0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
27d00 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
27d10 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
27d20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
27d30 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
27d40 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
27d50 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
27d60 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
27d70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27d80 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
27d90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
27da0 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
27db0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
27dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27de0 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67 69   NOTE: This regi
27df0 73 74 72 79 20 6b 65 79 20 61 70 70 65 61 72 73  stry key appears
27e00 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33 32   to always be 32
27e10 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20  -bit only..     
27e20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
27e30 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20 62  (i.e. probably b
27e40 65 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e 6c  ecause it is onl
27e50 79 20 75 73 65 64 20 62 79 20 56 69 73 75 61 6c  y used by Visual
27e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27e70 20 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20 77         Studio, w
27e80 68 69 63 68 20 69 73 20 63 75 72 72 65 6e 74 6c  hich is currentl
27e90 79 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74 20  y always 32-bit 
27ea0 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20 20  only)...        
27eb0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
27ec0 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
27ed0 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  t = !String.IsNu
27ee0 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f  llOrEmpty(platfo
27ef0 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  rmName) ?..     
27f00 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
27f10 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
27f20 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65  \v{2}\\{3}\\Asse
27f30 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20 3a  mblyFoldersEx" :
27f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f50 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66    "{0}\\Microsof
27f60 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73  t\\{1}\\v{2}\\As
27f70 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22  semblyFoldersEx"
27f80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27f90 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
27fa0 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47 65  ormat(format, Ge
27fb0 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  tRootKeyName(wow
27fc0 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
27fd0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
27fe0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
27ff0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
28000 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
28010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28060 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
28070 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
28080 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
28090 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
280a0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
280b0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
280c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
280d0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
280e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
280f0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
28100 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
28110 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
28120 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
28130 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
28140 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
28150 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
28160 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
28170 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
28180 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
28190 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
281a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
281b0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
281c0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
281d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
281e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
281f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
28200 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
28210 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  tAssemblyFolders
28220 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
28230 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
28240 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
28250 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
28260 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b  ormName, wow64);
28270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28280 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
28290 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
282a0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
282b0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
282d0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74  tKey, keyName, t
282e0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
282f0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
28300 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28310 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
28320 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
28330 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28350 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
28360 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
28370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28380 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
28390 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
283a0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
283b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283c0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
283d0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
283e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
283f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
28400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28420 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
28430 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
28440 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
28450 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
28460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28470 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
28480 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
28490 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
284a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
284b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284c0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
284d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
284e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28500 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
28510 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28530 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
28540 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
28550 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
28560 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
28570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28580 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
28590 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
285b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
285c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
285e0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
285f0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
28600 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
28610 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
28620 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74  ey, null, direct
28630 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ory, whatIf, ver
28640 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
28650 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
28660 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28670 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
28680 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
28690 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
286a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
286f0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
28700 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  l RemoveFromAsse
28710 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
28720 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
28730 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
28740 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28750 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
28760 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
28770 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
28780 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
28790 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
287a0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
287b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
287c0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
287d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
287e0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
287f0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
28800 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
28810 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
28820 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
28830 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
28840 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
28850 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
28860 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
28870 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28880 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
28890 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
288a0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
288b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288c0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
288d0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
288e0 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20  , platformName, 
288f0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
28900 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
28910 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
28920 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
28930 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
28940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28950 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
28960 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74  Name, true, what
28970 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
28980 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
289a0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
289b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
289d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
289e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a00 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
28a10 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
28a20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
28a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a40 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
28a50 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
28a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
28aa0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
28ab0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
28ac0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
28ad0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
28ae0 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
28af0 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
28b00 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
28b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
28b20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28b30 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
28b40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28ba0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
28bb0 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d  ool ProcessAssem
28bc0 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
28bd0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
28be0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
28bf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
28c00 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
28c10 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
28c20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
28c30 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
28c40 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
28c50 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
28c60 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
28c70 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
28c80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28c90 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
28ca0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
28cb0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
28cc0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
28cd0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
28ce0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
28cf0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
28d00 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
28d10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28d20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28d30 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
28d40 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
28d50 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
28d60 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
28d70 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
28d80 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
28d90 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
28da0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28db0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
28dc0 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
28dd0 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
28de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28df0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
28e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28e20 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
28e30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28e40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28e50 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d   RemoveFromAssem
28e60 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
28e90 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
28ea0 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
28eb0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
28ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 65                Le
28ed0 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c  gacyProjectName,
28ee0 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77   wow64, false, w
28ef0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
28f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f10 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20       ref error) 
28f20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
28f30 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c      AddToAssembl
28f40 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28f60 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
28f70 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
28f80 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
28f90 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
28fa0 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a              Proj
28fb0 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c  ectName, pair.X,
28fc0 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
28fd0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
28fe0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
28ff0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
29000 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
29010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29020 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
29030 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
29040 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
29050 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
29060 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
29070 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
29080 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
29090 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
290a0 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63            Projec
290b0 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74 68  tName, wow64, th
290c0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68  rowOnMissing, wh
290d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290f0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
29100 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29110 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29120 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
29130 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
29190 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
291a0 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  o Handling..    
291b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
291c0 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 52  ic string GetVsR
291d0 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ootKeyName(..   
291e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
291f0 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
29200 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
29210 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29220 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
29230 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
29240 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d  \VisualStudio",.
29250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29260 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
29270 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20  wow64));..      
29280 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292d0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
292e0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
292f0 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79   string GetVsKey
29300 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
29310 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
29320 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
29330 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
29340 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
29350 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29360 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
29370 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
29380 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29390 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
293a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
293b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293d0 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 47 65 74 56  "{0}\\{1}", GetV
293e0 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  sRootKeyName(wow
293f0 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 29 3b  64), vsVersion);
29400 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
29410 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29460 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
29470 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
29480 44 61 74 61 20 53 6f 75 72 63 65 20 48 61 6e 64  Data Source Hand
29490 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
294a0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
294b0 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75 72 63  l AddVsDataSourc
294c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
294d0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
294e0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
294f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
29500 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
29510 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
29520 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
29530 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
29540 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29550 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
29560 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
29570 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
29580 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
29590 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
295a0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
295b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
295c0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
295d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
295e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
295f0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
29600 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
29610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29620 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
29630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29650 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
29660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
29670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29680 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
29690 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
296a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
296c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
296d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
296e0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
296f0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
29700 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a  ion, wow64);....
29710 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
29720 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
29730 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
29740 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
29750 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
29760 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
29770 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
29780 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
29790 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
297a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
297b0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
297c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
297d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
297f0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
29800 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
29810 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
29820 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
29830 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
29840 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
29850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29860 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
29870 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29880 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29890 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
298a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
298b0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
298c0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
298d0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
298e0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
298f0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
29900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29910 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
29920 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
29930 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
29940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29960 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
29970 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
29980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
29990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
299a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
299b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
299c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
299d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
299e0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
299f0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
29a00 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
29a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29a40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29a50 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
29a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29a80 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
29a90 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
29aa0 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a  ataSourceKey =..
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
29ad0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
29ae0 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
29af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
29b10 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
29b20 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
29b30 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
29b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b50 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
29b60 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
29b70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b90 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53         if (dataS
29ba0 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ourceKey == null
29bb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
29bc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29be0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
29bf0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
29c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
29c30 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
29c40 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
29c50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53     package.DataS
29c80 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
29c90 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
29ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29cc0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ce0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
29d10 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72          dataSour
29d40 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  ceKey, null, Str
29d50 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61           "{0} Da
29d80 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72  tabase File", Pr
29d90 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74  ojectName), what
29da0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dc0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
29dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29de0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
29df0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
29e00 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c  y(dataSourceKey,
29e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
29e30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70  ring.Format("Sup
29e40 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73  portingProviders
29e50 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{0}",..       
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e70 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
29e80 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
29e90 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
29ea0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ec0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
29ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29ee0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29ef0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
29f00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29f10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29f20 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
29f30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f80 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29f90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
29fa0 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61  ool RemoveVsData
29fb0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
29fc0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
29fd0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
29fe0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
29ff0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2a000 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2a010 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2a020 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2a030 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2a040 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2a050 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a060 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2a070 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2a080 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2a090 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2a0a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2a0b0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
2a0c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a0d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a0e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2a0f0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
2a100 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
2a110 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a120 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a130 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a140 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
2a150 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a160 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a170 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2a180 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
2a190 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
2a1a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2a1b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2a1c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a1d0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2a1e0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2a1f0 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
2a200 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a210 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2a220 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2a230 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2a240 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2a260 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2a270 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2a280 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2a290 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a2a0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2a2b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a2c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2e0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2a2f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a310 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2a320 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2a330 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a350 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2a360 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a380 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a3b0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2a3c0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2a3d0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2a3e0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a400 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
2a410 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20  Sources", true, 
2a420 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2a430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a450 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2a460 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a480 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2a4a0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2a4b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4d0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2a4e0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2a4f0 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73  {0}\\DataSources
2a500 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a520 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a540 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2a580 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
2a590 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
2a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5b0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
2a5c0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
2a5d0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2a5e0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2a610 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
2a620 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a630 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a640 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2a650 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
2a660 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2a6c0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2a6d0 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
2a6e0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
2a6f0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2a700 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2a710 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2a720 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2a730 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
2a740 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
2a750 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
2a760 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
2a770 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2a780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2a790 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
2a7a0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
2a7b0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2a7c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a7d0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2a7e0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2a7f0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2a800 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2a810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2a820 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
2a830 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2a840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a850 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
2a860 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
2a870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a880 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a890 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
2a8b0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
2a8c0 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
2a8d0 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
2a8e0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
2a8f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2a900 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
2a910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2a920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a930 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
2a940 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
2a950 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
2a960 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2a970 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2a980 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2a990 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
2a9a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2a9c0 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f  turn AddVsDataSo
2a9d0 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
2a9e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2a9f0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
2aa00 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 77  ackage, wow64, w
2aa10 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2aa20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aa30 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2aa40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2aa50 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
2aa60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
2aa70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aa80 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56    return RemoveV
2aa90 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aab0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
2aac0 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77  sion, package, w
2aad0 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
2aae0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2aaf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2ab00 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
2ab10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ab20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2ab30 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2ab40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ab50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ab90 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
2aba0 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 50  al Studio Data P
2abb0 72 6f 76 69 64 65 72 20 48 61 6e 64 6c 69 6e 67  rovider Handling
2abc0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2abd0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
2abe0 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  dVsDataProvider(
2abf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2ac00 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2ac10 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2ac20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2ac30 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2ac40 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2ac50 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2ac60 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2ac70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2ac80 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2ac90 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2aca0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2acb0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2acc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2acd0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2acf0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ad00 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2ad10 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2ad20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2ad40 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2ad50 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ad70 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ad80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ad90 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2ada0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2adb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2add0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2ade0 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2adf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ae00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ae10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2ae20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2ae30 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2ae40 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2ae50 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2ae60 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2ae70 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2ae80 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2ae90 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2aea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aeb0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2aec0 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2aed0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2aee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af00 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2af10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2af20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2af30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2af40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2af50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2af60 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2af70 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2af80 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2af90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2afa0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2afb0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2afc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2afd0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2afe0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2aff0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b000 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2b010 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2b020 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2b030 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2b040 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2b050 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2b060 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73  , "DataProviders
2b070 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
2b080 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2b090 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
2b0c0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2b100 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2b110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b120 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2b130 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2b140 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
2b150 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20  taProviders",.. 
2b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b170 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2b180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b190 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b1a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2b1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b1d0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2b1e0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
2b1f0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
2b200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2b220 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2b230 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
2b240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2b260 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
2b270 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
2b280 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
2b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2a0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2b2b0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b2e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
2b2f0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d  ataProviderKey =
2b300 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b340 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2b350 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2b380 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
2b390 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2b3a0 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ", key,..       
2b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3c0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2b3d0 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
2b3e0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2b3f0 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
2b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b410 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b420 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2b440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b450 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2b460 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
2b470 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b490 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2b4a0 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69   null, Descripti
2b4b0 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  on, whatIf,..   
2b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4d0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2b4e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2b500 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2b510 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b530 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
2b540 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e  Key, "InvariantN
2b550 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74 4e  ame", InvariantN
2b560 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b580 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2b590 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2b5b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2b5c0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5e0 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
2b5f0 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67  rKey, "Technolog
2b600 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y",..           
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b620 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54   package.AdoNetT
2b630 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74  echnologyId.ToSt
2b640 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2b650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2b670 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2b680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b690 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2b6a0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2b6b0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6d0 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
2b6e0 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66  y, "CodeBase", f
2b6f0 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ileName, whatIf,
2b700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2b720 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b740 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2b750 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b770 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
2b780 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f  viderKey, "Facto
2b790 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20  ryService",..   
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2b7c0 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72  .ServiceId.ToStr
2b7d0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
2b7e0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b800 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
2b810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2b820 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2b830 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2b840 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
2b850 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
2b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b870 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
2b880 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
2b890 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22  ectionUIControl"
2b8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2b8c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2b8d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b8e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2b8f0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
2b900 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
2b910 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
2b940 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
2b950 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65  nectionPropertie
2b960 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b980 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2b990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2b9b0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2b9c0 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
2b9d0 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9f0 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
2ba00 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
2ba10 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74  onnectionSupport
2ba20 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba40 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2ba50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2ba70 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
2ba80 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
2ba90 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
2baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bab0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
2bac0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62  dObjects\\DataOb
2bad0 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68  jectSupport", wh
2bae0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb00 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2bb30 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2bb40 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
2bb50 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb70 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
2bb80 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70  cts\\DataViewSup
2bb90 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
2bbc0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2bbd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2bbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2bbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2bc00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2bc10 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2bc20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2bc30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2bc80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2bc90 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
2bca0 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20  DataProvider(.. 
2bcb0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2bcc0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2bcd0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2bce0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2bcf0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2bd00 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2bd10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2bd20 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2bd30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2bd40 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2bd50 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2bd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2bd70 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2bd80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2bd90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bda0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2bdb0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2bdc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2bdd0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2bde0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2bdf0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2be00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2be10 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2be20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2be30 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2be40 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2be50 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
2be60 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2be70 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2be80 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2be90 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2bea0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bec0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2bed0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2bee0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2bef0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2bf10 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2bf20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bf30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bf40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2bf50 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf70 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2bf80 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2bf90 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2bfa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bfb0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2bfc0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bfe0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2bff0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2c010 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2c020 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2c030 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
2c040 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2c050 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2c060 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
2c070 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
2c080 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2c090 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2c0a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0c0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2c0d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c0e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c100 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2c110 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c130 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2c140 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2c150 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2c160 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c180 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
2c190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c1a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2c1b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2c1d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c1e0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2c1f0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
2c200 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
2c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c220 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
2c230 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
2c240 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2c250 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2c270 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2c280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c290 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2c2a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2c2b0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2c2c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c2d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c320 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c330 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
2c340 65 73 73 56 73 44 61 74 61 50 72 6f 76 69 64 65  essVsDataProvide
2c350 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
2c360 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2c370 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2c380 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2c390 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2c3a0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2c3b0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2c3c0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
2c3d0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
2c3e0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2c3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2c400 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
2c410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c420 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
2c430 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
2c440 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
2c450 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2c460 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2c470 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2c480 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
2c490 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
2c4a0 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
2c4b0 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
2c4c0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
2c4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2c4e0 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
2c4f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2c510 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2c520 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
2c530 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2c540 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2c550 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2c560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c570 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
2c580 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c590 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c5a0 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76  rn AddVsDataProv
2c5b0 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
2c5c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2c5d0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
2c5e0 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20  ackage, pair.X, 
2c5f0 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a  wow64, whatIf,..
2c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c610 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
2c620 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
2c630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c640 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
2c650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c660 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c670 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f   RemoveVsDataPro
2c680 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
2c690 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2c6a0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2c6b0 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20  package, wow64, 
2c6c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2c6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c6e0 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2c6f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2c700 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2c710 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2c720 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2c730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c770 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2c780 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
2c790 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64  dio Package Hand
2c7a0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2c7b0 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
2c7c0 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61  d InitializeVsPa
2c7d0 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
2c7e0 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65 20      ref Package 
2c7f0 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20  package..       
2c800 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2c810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2c820 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
2c830 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2c840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c850 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65      package = ne
2c860 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a  w Package();....
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c880 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
2c890 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77  chnologyId = new
2c8a0 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 22 37 37 41              "77A
2c8c0 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d  B9A9D-78B9-4BA7-
2c8d0 39 31 41 43 2d 38 37 33 46 35 33 33 38 46 31 44  91AC-873F5338F1D
2c8e0 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2");....        
2c8f0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2c900 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20  PackageId = new 
2c910 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
2c920 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45             "DCBE
2c930 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41  6C8D-0E57-4099-A
2c940 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 43  183-98FF74C64D9C
2c950 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
2c960 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53         package.S
2c970 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47  erviceId = new G
2c980 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
2c990 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36            "DCBE6
2c9a0 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31  C8D-0E57-4099-A1
2c9b0 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 44 22  83-98FF74C64D9D"
2c9c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c9d0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
2c9e0 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77  taSourceId = new
2c9f0 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45 42              "0EB
2ca10 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d  AAB6E-CA80-4B4A-
2ca20 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43 37  8DDF-CBE6BF058C7
2ca30 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1");....        
2ca40 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
2ca50 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d  DataProviderId =
2ca60 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca80 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
2ca90 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
2caa0 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20  58C70");..      
2cab0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2cac0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2cad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2caf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2cb20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cb30 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67  bool AddVsPackag
2cb40 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2cb50 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2cb60 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2cb70 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
2cb80 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2cb90 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
2cba0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
2cbb0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
2cbc0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2cbd0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
2cbe0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2cbf0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2cc00 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2cc10 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2cc20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2cc30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2cc40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2cc50 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
2cc60 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2cc90 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2cca0 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2ccc0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2ccd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2cce0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2ccf0 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2cd20 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
2cd30 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2cd50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2cd60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2cd70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2cd80 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
2cd90 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
2cda0 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  n, wow64);....  
2cdb0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2cdc0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2cdd0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
2cde0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
2cdf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ce00 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2ce10 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
2ce20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2ce30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ce40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ce50 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
2ce60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ce70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ce80 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2ce90 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2cea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ceb0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2cec0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
2ced0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2cee0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2cf00 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
2cf10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2cf20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2cf30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2cf40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2cf50 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2cf60 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2cf70 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
2cf80 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
2cf90 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
2cfb0 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20  ey, "Packages", 
2cfc0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2cfd0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2cfe0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d000 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2d010 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d020 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d040 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2d050 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d070 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2d080 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2d090 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61   key: {0}\\Packa
2d0a0 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ges",..         
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0c0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
2d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d0f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d100 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d120 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2d130 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2d140 20 2a 57 41 52 4e 49 4e 47 2a 20 43 68 61 6e 67   *WARNING* Chang
2d150 69 6e 67 20 61 6e 79 20 6f 66 20 74 68 65 73 65  ing any of these
2d160 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6c 69 6b   values will lik
2d170 65 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ely..           
2d180 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2d190 20 20 72 65 71 75 69 72 65 20 61 20 6e 65 77 20    require a new 
2d1a0 22 70 61 63 6b 61 67 65 20 6c 6f 61 64 20 6b 65  "package load ke
2d1b0 79 22 20 28 50 4c 4b 29 20 74 6f 20 62 65 0d 0a  y" (PLK) to be..
2d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 65 6e      //       gen
2d1e0 65 72 61 74 65 64 20 69 6e 20 6f 72 64 65 72 20  erated in order 
2d1f0 74 6f 20 70 72 6f 70 65 72 6c 79 20 73 75 70 70  to properly supp
2d200 6f 72 74 20 6c 6f 61 64 69 6e 67 20 74 68 65 0d  ort loading the.
2d210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d220 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61       //       pa
2d230 63 6b 61 67 65 20 69 6e 74 6f 20 56 69 73 75 61  ckage into Visua
2d240 6c 20 53 74 75 64 69 6f 20 32 30 30 38 20 61 6e  l Studio 2008 an
2d250 64 20 65 61 72 6c 69 65 72 20 77 69 74 68 6f 75  d earlier withou
2d260 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
2d270 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2d280 74 68 65 20 6d 61 74 63 68 69 6e 67 20 56 69 73  the matching Vis
2d290 75 61 6c 20 53 74 75 64 69 6f 20 53 44 4b 20 62  ual Studio SDK b
2d2a0 65 69 6e 67 20 69 6e 73 74 61 6c 6c 65 64 2e 0d  eing installed..
2d2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d2c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 50 6c       //       Pl
2d2d0 65 61 73 65 20 72 65 66 65 72 20 74 6f 20 74 68  ease refer to th
2d2e0 65 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e  e "SQLite.Design
2d2f0 65 72 5c 70 6c 6b 2e 74 78 74 22 20 66 69 6c 65  er\plk.txt" file
2d300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d310 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
2d320 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  or the existing 
2d330 6f 66 66 69 63 69 61 6c 20 76 61 6c 75 65 73 20  official values 
2d340 61 6e 64 20 75 70 64 61 74 65 20 74 68 65 6d 20  and update them 
2d350 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
2d360 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2d370 20 6e 65 63 65 73 73 61 72 79 2e 20 20 41 6c 73   necessary.  Als
2d380 6f 2c 20 74 68 65 20 6e 65 77 6c 79 20 67 65 6e  o, the newly gen
2d390 65 72 61 74 65 64 20 70 61 63 6b 61 67 65 20 6c  erated package l
2d3a0 6f 61 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  oad..           
2d3b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2d3c0 20 20 6b 65 79 20 69 74 73 65 6c 66 2c 20 77 68    key itself, wh
2d3d0 69 63 68 20 69 73 20 61 20 31 32 38 20 63 68 61  ich is a 128 cha
2d3e0 72 61 63 74 65 72 20 61 6c 70 68 61 6e 75 6d 65  racter alphanume
2d3f0 72 69 63 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ric..           
2d400 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2d410 20 20 73 74 72 69 6e 67 2c 20 6d 75 73 74 20 62    string, must b
2d420 65 20 70 6c 61 63 65 64 20 69 6e 20 74 68 65 20  e placed in the 
2d430 72 65 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20  resource string 
2d440 6e 61 6d 65 64 0d 0a 20 20 20 20 20 20 20 20 20  named..         
2d450 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2d460 20 20 20 20 22 34 30 30 22 20 69 6e 20 74 68 65      "400" in the
2d470 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
2d480 72 5c 56 53 50 61 63 6b 61 67 65 2e 72 65 73 78  r\VSPackage.resx
2d490 22 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  " file..        
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2d4b0 20 20 20 20 20 61 6e 64 20 74 68 65 6e 20 74 68       and then th
2d4c0 65 20 64 65 73 69 67 6e 65 72 20 61 73 73 65 6d  e designer assem
2d4d0 62 6c 79 20 69 74 73 65 6c 66 20 6d 75 73 74 20  bly itself must 
2d4e0 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
2d4f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2d500 20 72 65 63 6f 6d 70 69 6c 65 64 2e 20 20 41 73   recompiled.  As
2d510 20 6f 66 20 74 68 69 73 20 77 72 69 74 69 6e 67   of this writing
2d520 20 28 69 6e 20 46 65 62 72 75 61 72 79 20 32 30   (in February 20
2d530 31 32 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  12),..          
2d540 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2d550 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67     the following
2d560 20 55 52 4c 20 69 73 20 74 68 65 20 70 72 6f 70   URL is the prop
2d570 65 72 20 70 6c 61 63 65 20 74 6f 20 67 65 6e 65  er place to gene
2d580 72 61 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  rate..          
2d590 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2d5a0 20 20 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 20     package load 
2d5b0 6b 65 79 73 3a 0d 0a 20 20 20 20 20 20 20 20 20  keys:..         
2d5c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5e0 20 20 20 2f 2f 20 20 20 20 20 20 20 68 74 74 70     //       http
2d5f0 3a 2f 2f 6d 73 64 6e 2e 6d 69 63 72 6f 73 6f 66  ://msdn.microsof
2d600 74 2e 63 6f 6d 2f 65 6e 2d 75 73 2f 76 73 74 75  t.com/en-us/vstu
2d610 64 69 6f 2f 63 63 36 35 35 37 39 35 0d 0a 20 20  dio/cc655795..  
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2d640 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2d650 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2d660 20 70 61 63 6b 61 67 65 4b 65 79 20 3d 0d 0a 20   packageKey =.. 
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d680 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2d690 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
2d6a0 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a  SubKey(subKey,..
2d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6c0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2d6d0 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2d6e0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2d6f0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
2d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d710 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2d720 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2d730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d750 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65     if (packageKe
2d760 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d780 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7a0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2d7b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7d0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
2d7e0 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
2d7f0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2d800 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d820 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b         key, pack
2d830 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2d840 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2d850 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d890 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8b0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2d8c0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2d8d0 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c  packageKey, null
2d8e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2d900 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
2d910 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61  } Designer Packa
2d920 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ge", ProjectName
2d930 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d950 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2d960 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2d980 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2d990 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2d9a0 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20   "Class",..     
2d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9c0 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44         "SQLite.D
2d9d0 65 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61  esigner.SQLitePa
2d9e0 63 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20  ckage", whatIf, 
2d9f0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da10 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2da20 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
2da30 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61  kageKey, "CodeBa
2da40 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se",..          
2da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da60 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74    fileName, what
2da70 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2da80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da90 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2daa0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2dab0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44  (packageKey, "ID
2dac0 22 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d  ", 400, whatIf,.
2dad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2daf0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db10 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2db20 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
2db30 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72  eKey, "InprocSer
2db40 76 65 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20  ver32",..       
2db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db60 20 20 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e       Path.Combin
2db70 65 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79  e(Environment.Sy
2db80 73 74 65 6d 44 69 72 65 63 74 6f 72 79 2c 0d 0a  stemDirectory,..
2db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbb0 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 20  "mscoree.dll"), 
2dbc0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2dbd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2dbf0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2dc00 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
2dc10 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d   "CompanyName",.
2dc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74               "ht
2dc40 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61  tp://system.data
2dc50 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77  .sqlite.org/", w
2dc60 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2dc70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dc80 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2dc90 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2dca0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2dcb0 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20  "MinEdition",.. 
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcd0 20 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e             "stan
2dce0 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76  dard", whatIf, v
2dcf0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd10 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2dd20 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
2dd30 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
2dd40 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
2dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd60 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
2dd70 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
2dd80 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
2dd90 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ddb0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
2ddc0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dde0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2ddf0 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
2de00 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65  eKey, "ProductVe
2de10 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  rsion",..       
2de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de30 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74       "1.0", what
2de40 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2de50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de60 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2de70 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2de80 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 0d 0a 20 20  toolboxKey =..  
2de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2deb0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
2dec0 61 74 65 53 75 62 4b 65 79 28 70 61 63 6b 61 67  ateSubKey(packag
2ded0 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  eKey,..         
2dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2def0 20 20 20 20 20 20 20 22 54 6f 6f 6c 62 6f 78 22         "Toolbox"
2df00 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2df10 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2df20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2df50 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75  toolboxKey == nu
2df60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2df70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfa0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2dfb0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfe0 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
2dff0 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
2e000 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e020 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 54           "{0}\\T
2e030 6f 6f 6c 62 6f 78 22 2c 20 70 61 63 6b 61 67 65  oolbox", package
2e040 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Key);....       
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e060 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e070 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e090 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0b0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2e0c0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
2e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2e0f0 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61  oolboxKey, "Defa
2e100 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77  ult Items", 3, w
2e110 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e130 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2e140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2e150 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e170 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2e180 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e190 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2e1a0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2e1b0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2e1c0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2e1d0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2e1f0 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
2e200 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2e210 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2e220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e230 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e240 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2e250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e260 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e280 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2e290 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2b0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2e2c0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2e2d0 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
2e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2e300 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e320 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e340 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e350 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2e360 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2e370 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e380 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
2e390 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
2e3a0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
2e3b0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
2e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3d0 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c      ", 1000, 3",
2e3e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2e3f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2e400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e410 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e420 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e430 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2e440 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2e450 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2e460 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2e470 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
2e480 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
2e490 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
2e4a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2e4c0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
2e4d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e4e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2e510 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e530 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
2e540 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
2e550 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
2e560 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e580 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
2e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e5c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2e5e0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2e5f0 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20  yKey serviceKey 
2e600 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2e620 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
2e630 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
2e640 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e660 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
2e670 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2e680 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
2e690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2e6b0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6e0 20 20 20 20 20 20 20 69 66 20 28 73 65 72 76 69         if (servi
2e6f0 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ceKey == null)..
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e710 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e730 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2e740 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2e770 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
2e780 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2e790 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7b0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2e7c0 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
2e7d0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
2e7e0 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
2e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e800 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2e810 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e830 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e840 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2e850 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2e860 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
2e870 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
2e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e890 20 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61     package.Packa
2e8a0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
2e8b0 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
2e8c0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8e0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e900 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2e910 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72  per.SetValue(ser
2e920 76 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c  viceKey, "Name",
2e930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2e950 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
2e960 20 44 65 73 69 67 6e 65 72 20 53 65 72 76 69 63   Designer Servic
2e970 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
2e980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2e9a0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e9c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e9d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2e9e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e9f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ea00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2ea10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2ea70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2ea80 6f 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61  ol RemoveVsPacka
2ea90 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
2eaa0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2eab0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2eac0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
2ead0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
2eae0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
2eaf0 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
2eb00 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
2eb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2eb20 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
2eb30 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
2eb40 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2eb50 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2eb60 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2eb70 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2eb80 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
2eb90 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2eba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ebb0 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
2ebc0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ebd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ebe0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2ebf0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
2ec00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ec10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ec20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ec30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2ec40 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
2ec50 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ec60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ec70 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2ec80 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
2ec90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2eca0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ecb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ecc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
2ecd0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
2ece0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
2ecf0 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d  ersion, wow64);.
2ed00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2ed10 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2ed20 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2ed30 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2ed40 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2ed50 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2ed60 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
2ed70 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
2ed80 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2ed90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2eda0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2edb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2edc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2edd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ede0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2edf0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2ee20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2ee30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
2ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee50 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
2ee60 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ee80 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ee90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2eea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eeb0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2eec0 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2eed0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2eee0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef00 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67      key, "Packag
2ef10 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
2ef20 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ef40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef50 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
2ef60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ef80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2efa0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2efb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
2efd0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
2efe0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
2eff0 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20  Packages",..    
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f010 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2f020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f030 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f040 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2f050 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f070 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2f080 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
2f090 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
2f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2f0b0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
2f0c0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
2f0d0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2f100 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2f110 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f130 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2f140 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
2f150 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2f160 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f180 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22      key, "Menus"
2f190 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2f1a0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2f1b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1d0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2f1e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2f1f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2f220 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f240 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2f250 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2f260 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e  ry key: {0}\\Men
2f270 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  us",..          
2f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f290 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2f2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2f2f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
2f300 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
2f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f320 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
2f330 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
2f340 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f350 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
2f370 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
2f380 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f3b0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2f3c0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
2f3d0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2f3e0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2f3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f400 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53           key, "S
2f410 65 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20  ervices", true, 
2f420 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2f430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f450 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2f460 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f480 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2f4a0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2f4b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4d0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2f4e0 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2f4f0 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d  {0}\\Services",.
2f500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f510 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2f520 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f540 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f570 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2f580 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
2f590 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5b0 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
2f5c0 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f  age.ServiceId.To
2f5d0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f5e0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2f600 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f620 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2f630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f640 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2f650 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f660 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2f670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2f6b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2f6c0 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2f6d0 73 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  sVsPackage(..   
2f6e0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2f6f0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2f700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2f710 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2f720 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
2f730 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
2f740 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
2f750 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
2f760 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2f770 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2f780 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2f790 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2f7a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2f7b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2f7c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2f7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2f7e0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2f7f0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2f800 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2f810 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
2f820 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
2f830 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
2f840 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2f850 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
2f860 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
2f870 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f890 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f8a0 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
2f8b0 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
2f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f8d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2f8e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2f8f0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2f900 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
2f910 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f920 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
2f930 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f950 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
2f960 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72  n, package, pair
2f970 2e 58 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  .X, wow64, whatI
2f980 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2f990 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
2f9a0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
2f9b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2f9c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2f9d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f9f0 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63  turn RemoveVsPac
2fa00 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
2fa10 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2fa20 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
2fa30 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20 74  ackage, wow64, t
2fa40 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa60 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2fa70 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
2fa80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2fa90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2faa0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2fab0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2fac0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fb10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2fb20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61   #region Applica
2fb30 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74  tion Entry Point
2fb40 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
2fb50 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
2fb60 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
2fb70 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
2fb80 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
2fb90 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20 20 20 20   Main(..        
2fba0 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
2fbb0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  s..            )
2fbc0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2fbd0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
2fbe0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
2fc00 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
2fc10 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b  guration = null;
2fc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fc30 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d    string error =
2fc40 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2fc50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2fc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
2fcb0 67 69 6f 6e 20 44 65 62 75 67 67 65 72 20 48 6f  gion Debugger Ho
2fcc0 6f 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ok..            
2fcd0 20 20 20 20 69 66 20 28 45 6e 76 69 72 6f 6e 6d      if (Environm
2fce0 65 6e 74 2e 47 65 74 45 6e 76 69 72 6f 6e 6d 65  ent.GetEnvironme
2fcf0 6e 74 56 61 72 69 61 62 6c 65 28 22 42 72 65 61  ntVariable("Brea
2fd00 6b 22 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  k") != null)..  
2fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2fd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fd30 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
2fd40 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  teLine(..       
2fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd60 20 22 41 74 74 61 63 68 20 61 20 64 65 62 75 67   "Attach a debug
2fd70 67 65 72 20 74 6f 20 70 72 6f 63 65 73 73 20 7b  ger to process {
2fd80 30 7d 20 61 6e 64 20 22 20 2b 0d 0a 20 20 20 20  0} and " +..    
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 20 20 20 22 70 72 65 73 73 20 61 6e 79 20 6b      "press any k
2fdb0 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22  ey to continue."
2fdc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fdd0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
2fde0 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f  ss.GetCurrentPro
2fdf0 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20  cess().Id);.... 
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe10 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
2fe20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe40 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52         Console.R
2fe50 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a  eadKey(true); /*
2fe60 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2fe80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fe90 20 20 20 20 20 20 63 61 74 63 68 20 28 49 6e 76        catch (Inv
2fea0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
2feb0 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e 73 6f  eption) // Conso
2fec0 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20 20 20  le.ReadKey..    
2fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2fef0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
2ff00 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ff20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ff30 20 20 20 20 20 20 20 20 44 65 62 75 67 67 65 72          Debugger
2ff40 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20 20 20  .Break();..     
2ff50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
2ff70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2ff80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2ff90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
2ffe0 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c  region Command L
2fff0 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a  ine Processing..
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30010 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61 74 69  if (!Configurati
30020 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20  on.FromArgs(..  
30030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30040 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 75 65        args, true
30050 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61 74  , ref configurat
30060 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ion, ref error) 
30070 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
30080 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
30090 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d  ration.Process(.
300a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
300b0 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 63           args, c
300c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72  onfiguration, tr
300d0 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c  ue, ref error) |
300e0 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
300f0 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72         !Configur
30100 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75 6e 74 69  ation.CheckRunti
30110 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30130 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
30140 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72  n, true, ref err
30150 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
30160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30170 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
30180 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
30190 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
301a0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
301b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301c0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
301d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
301e0 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30200 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
30210 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
30220 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
30230 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
30240 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
30250 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
30260 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
30270 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
30280 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
30290 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
302a0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
302b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302c0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
302d0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
302e0 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
302f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30300 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
30310 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
30320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
30330 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
30340 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
30350 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
30360 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
30370 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
30380 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
303c0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
303d0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
303e0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72   (MockRegistry r
303f0 65 67 69 73 74 72 79 20 3d 20 6e 65 77 20 4d 6f  egistry = new Mo
30400 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  ckRegistry(..   
30410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30420 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
30430 6f 6e 2e 57 68 61 74 49 66 2c 20 66 61 6c 73 65  on.WhatIf, false
30440 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20  , false))..     
30450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30470 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46    #region .NET F
30480 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73 75 61  ramework / Visua
30490 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d 0a 20  l Studio Data.. 
304a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304b0 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
304c0 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ge = null;..    
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304e0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
304f0 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 75  ameworkList = nu
30500 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
30510 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20           VsList 
30520 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  vsList = null;..
30530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30540 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30580 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
30590 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c           Initial
305a0 69 7a 65 56 73 50 61 63 6b 61 67 65 28 72 65 66  izeVsPackage(ref
305b0 20 70 61 63 6b 61 67 65 29 3b 0d 0a 0d 0a 20 20   package);....  
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
305e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30620 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 46       InitializeF
30630 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 72 65 67  rameworkList(reg
30640 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
30650 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne,..           
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
30670 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20  figuration, ref 
30680 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b 0d  frameworkList);.
30690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
306a0 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
306b0 65 56 73 4c 69 73 74 28 72 65 67 69 73 74 72 79  eVsList(registry
306c0 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 63  .LocalMachine, c
306d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
306e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306f0 20 20 20 20 20 20 20 72 65 66 20 76 73 4c 69 73         ref vsLis
30700 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
30710 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
30720 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
30730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
30740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30770 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72                #r
30790 65 67 69 6f 6e 20 43 6f 72 65 20 41 73 73 65 6d  egion Core Assem
307a0 62 6c 79 20 4e 61 6d 65 20 43 68 65 63 6b 0d 0a  bly Name Check..
307b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
307d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
307e0 4f 54 45 3a 20 44 6f 20 74 68 69 73 20 66 69 72  OTE: Do this fir
307f0 73 74 2c 20 62 65 66 6f 72 65 20 6d 61 6b 69 6e  st, before makin
30800 67 20 61 6e 79 20 63 68 61 6e 67 65 73 20 74 6f  g any changes to
30810 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
30820 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
30830 20 20 20 73 79 73 74 65 6d 2c 20 62 65 63 61 75     system, becau
30840 73 65 20 69 74 20 77 69 6c 6c 20 74 68 72 6f 77  se it will throw
30850 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66   an exception if
30860 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
30870 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
30880 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 64 6f 65     file name doe
30890 73 20 6e 6f 74 20 72 65 70 72 65 73 65 6e 74 20  s not represent 
308a0 61 20 76 61 6c 69 64 20 6d 61 6e 61 67 65 64 0d  a valid managed.
308b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
308c0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
308d0 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...       
308e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
308f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30900 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
30910 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  e assemblyName =
30920 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
30930 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30950 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
30960 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
30970 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
30980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30990 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
309a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
309b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
309c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
30a00 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
30a10 6f 6e 20 53 68 61 72 65 64 20 43 6c 69 65 6e 74  on Shared Client
30a20 20 44 61 74 61 20 43 72 65 61 74 69 6f 6e 0d 0a   Data Creation..
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 20 20 20 20 6f 62 6a 65 63 74 20 64 69 72 65 63      object direc
30a50 74 6f 72 79 44 61 74 61 20 3d 20 6e 65 77 20 41  toryData = new A
30a60 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
30a70 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  ool>(..         
30a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
30a90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72  onfiguration.Dir
30aa0 65 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72  ectory, configur
30ab0 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d  ation.Install);.
30ac0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30ad0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 69         object fi
30ae0 6c 65 4e 61 6d 65 44 61 74 61 20 3d 20 6e 65 77  leNameData = new
30af0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
30b00 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20   bool>(..       
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
30b30 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
30b40 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49   configuration.I
30b50 6e 73 74 61 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  nstall);..      
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
30b70 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
30b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30be0 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20     #region .NET 
30bf0 47 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f  GAC Install/Remo
30c00 76 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ve..            
30c10 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
30c20 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
30c30 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  gs(InstallFlags.
30c40 47 41 43 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  GAC, true))..   
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30c70 20 20 20 20 20 20 20 20 20 20 20 20 50 75 62 6c              Publ
30c80 69 73 68 20 70 75 62 6c 69 73 68 20 3d 20 6e 75  ish publish = nu
30c90 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30cb0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
30cc0 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ce0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 20 3d         publish =
30cf0 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b 0d   new Publish();.
30d00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30d10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
30d20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73  onfiguration.Ins
30d30 74 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  tall)..         
30d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
30d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
30d70 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
30d80 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72            /* thr
30db0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
30dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30dd0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
30de0 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67  acInstall(config
30df0 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
30e00 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
30e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
30e30 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
30e40 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
30e50 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
30e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e70 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
30e80 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
30e90 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
30ea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ec0 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20     "GacInstall: 
30ed0 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b  assemblyPath = {
30ee0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
30ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f00 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
30f10 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  (configuration.C
30f20 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  oreFileName)),..
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
30f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
30f80 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
30f90 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68             /* th
30fc0 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
30fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fe0 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
30ff0 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
31000 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
31010 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31030 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
31040 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
31050 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
31060 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
31070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31080 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
31090 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
310a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
310b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
310c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310d0 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a      "GacInstall:
310e0 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
310f0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
31120 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
31130 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  LinqFileName)),.
31140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31160 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
31170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
311b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311e0 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
311f0 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20  tion.WhatIf)..  
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
31220 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
31230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31240 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
31250 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e  sh.GacRemove(con
31260 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
31270 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
31280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31290 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
312a0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
312b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
312c0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
312d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312e0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
312f0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
31300 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
31310 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31330 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65        "GacRemove
31340 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
31350 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
31360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31370 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
31380 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ay(configuration
31390 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c  .LinqFileName)),
313a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313c0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
313d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313f0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
31400 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20  ion.WhatIf)..   
31410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31430 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
31460 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
31470 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
31480 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
314b0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
314c0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
314d0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
314e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314f0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
31500 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
31510 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
31520 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31540 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a       "GacRemove:
31550 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
31560 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
31570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31580 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
31590 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
315a0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  CoreFileName)),.
315b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
315c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
315e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
315f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31610 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
31620 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
31630 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
31640 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
31650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31680 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
31690 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
316a0 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73 65 6d 62  gion .NET Assemb
316b0 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20 20 20 20  lyFolders..     
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
316d0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
316e0 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20  .HasFlags(..    
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
31710 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79 46 6f 6c  lags.AssemblyFol
31720 64 65 72 73 2c 20 74 72 75 65 29 29 0d 0a 20 20  ders, true))..  
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31760 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  (!ForEachFramewo
31770 72 6b 52 65 67 69 73 74 72 79 28 72 65 67 69 73  rkRegistry(regis
31780 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
317b0 69 73 74 2c 20 50 72 6f 63 65 73 73 41 73 73 65  ist, ProcessAsse
317c0 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a 20 20  mblyFolders,..  
317d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
317f0 72 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20  rectoryData,..  
31800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65                Ne
31820 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c  tFxIs32BitOnly |
31830 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  | configuration.
31840 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  Wow64,..        
31850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31860 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
31870 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73  ation.ThrowOnMis
31880 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318a0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
318b0 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e  tion.WhatIf, con
318c0 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
318d0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29       ref error))
31900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31930 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
31940 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72  s.ShowMessage(Tr
31950 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
31960 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
31970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31980 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
31990 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
319a0 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79  ck, thisAssembly
319b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
319c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319d0 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
319e0 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
319f0 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
31a30 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
31a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a50 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
31a60 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
31a70 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
31a80 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  mHigh,..        
31a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31aa0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
31ab0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
31ac0 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22  back, "Failure."
31ad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31af0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
31b00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46    return 1; /* F
31b30 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20  AILURE */..     
31b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
31b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
31b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b80 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
31b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ba0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
31bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31bf0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
31c00 45 54 20 44 62 50 72 6f 76 69 64 65 72 46 61 63  ET DbProviderFac
31c10 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
31c20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
31c30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
31c40 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c60 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e     InstallFlags.
31c70 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
31c80 79 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  y, true))..     
31c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
31ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31cb0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
31cc0 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  aved = false;...
31cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31ce0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
31cf0 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f  rEachFrameworkCo
31d00 6e 66 69 67 28 72 65 67 69 73 74 72 79 2c 0d 0a  nfig(registry,..
31d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d30 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50  frameworkList, P
31d40 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72  rocessDbProvider
31d50 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  Factory,..      
31d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d70 20 20 20 20 20 20 20 20 20 20 49 6e 76 61 72 69            Invari
31d80 61 6e 74 4e 61 6d 65 2c 20 50 72 6f 76 69 64 65  antName, Provide
31d90 72 4e 61 6d 65 2c 20 44 65 73 63 72 69 70 74 69  rName, Descripti
31da0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
31db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dc0 20 20 20 20 20 46 61 63 74 6f 72 79 54 79 70 65       FactoryType
31dd0 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61  Name, assemblyNa
31de0 6d 65 2c 20 64 69 72 65 63 74 6f 72 79 44 61 74  me, directoryDat
31df0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
31e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e10 20 20 20 20 4e 65 74 46 78 49 73 33 32 42 69 74      NetFxIs32Bit
31e20 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72  Only || configur
31e30 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20  ation.Wow64,..  
31e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
31e60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f  nfiguration.Thro
31e70 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
31ea0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
31eb0 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
31ec0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ee0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
31ef0 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29  aved, ref error)
31f00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31f10 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
31f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
31f40 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54  ps.ShowMessage(T
31f50 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
31f60 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
31f90 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
31fa0 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c  ack, thisAssembl
31fb0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
31fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fd0 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
31fe0 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
31ff0 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
32000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32020 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
32030 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32050 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
32060 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
32070 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
32080 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
32090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320a0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
320b0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
320c0 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e  lback, "Failure.
320d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
320e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
32100 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32120 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20     return 1; /* 
32130 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20  FAILURE */..    
32140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32150 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
32160 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
32190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
321b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
321e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
321f0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
32200 53 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  S Package..     
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32220 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
32230 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20  .HasFlags(..    
32240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32250 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
32260 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 2c 20  lags.VsPackage, 
32270 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
32280 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322a0 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
322b0 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
322c0 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a  stry(registry,..
322d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322f0 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
32300 73 50 61 63 6b 61 67 65 2c 20 70 61 63 6b 61 67  sPackage, packag
32310 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
32320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32330 20 20 20 20 66 69 6c 65 4e 61 6d 65 44 61 74 61      fileNameData
32340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32360 20 20 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79     VsIs32BitOnly
32370 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   || configuratio
32380 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  n.Wow64,..      
32390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
323b0 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d  uration.ThrowOnM
323c0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
323d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
323f0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63  ration.WhatIf, c
32400 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72  onfiguration.Ver
32410 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
32420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32430 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
32440 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
32450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32470 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
32480 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
32490 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
324a0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
324b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324c0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
324d0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
324e0 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
324f0 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
32500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32510 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
32520 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
32530 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
32540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32560 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
32570 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
32580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32590 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
325a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
325b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
325c0 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
325d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325e0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
325f0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
32600 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65  llback, "Failure
32610 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32630 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
32640 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32660 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
32670 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32690 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
326a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326c0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
326d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
326e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
326f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32730 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
32740 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a 20  VS DataSource.. 
32750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32760 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
32770 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a  tion.HasFlags(..
32780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32790 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
327a0 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 53  allFlags.VsDataS
327b0 6f 75 72 63 65 2c 20 74 72 75 65 29 29 0d 0a 20  ource, true)).. 
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
327e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
327f0 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73   (!ForEachVsVers
32800 69 6f 6e 52 65 67 69 73 74 72 79 28 72 65 67 69  ionRegistry(regi
32810 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32830 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50         vsList, P
32840 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72  rocessVsDataSour
32850 63 65 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  ce, package,..  
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
32880 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20  leNameData,..   
32890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328a0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73 49               VsI
328b0 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f  s32BitOnly || co
328c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36  nfiguration.Wow6
328d0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
328e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328f0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
32900 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.ThrowOnMissing
32910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32930 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
32940 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
32950 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
32960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32980 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
32990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
329b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
329d0 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50  owMessage(TraceP
329e0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
329f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a10 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
32a20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
32a30 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32a60 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
32a70 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
32a80 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
32a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32aa0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
32ab0 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
32ac0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ae0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
32af0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
32b00 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
32b10 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b30 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
32b40 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
32b50 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
32b80 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
32b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32bb0 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
32bc0 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
32bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32bf0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32c00 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
32c10 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
32c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
32c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
32c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c80 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74    #region VS Dat
32c90 61 50 72 6f 76 69 64 65 72 0d 0a 20 20 20 20 20  aProvider..     
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32cb0 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
32cc0 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20  .HasFlags(..    
32cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ce0 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
32cf0 6c 61 67 73 2e 56 73 44 61 74 61 50 72 6f 76 69  lags.VsDataProvi
32d00 64 65 72 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  der, true))..   
32d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32d30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32d40 21 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f  !ForEachVsVersio
32d50 6e 52 65 67 69 73 74 72 79 28 72 65 67 69 73 74  nRegistry(regist
32d60 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
32d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d80 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f       vsList, Pro
32d90 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69 64  cessVsDataProvid
32da0 65 72 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  er, package,..  
32db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
32dd0 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20  leNameData,..   
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32df0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73 49               VsI
32e00 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f  s32BitOnly || co
32e10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36  nfiguration.Wow6
32e20 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
32e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
32e50 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.ThrowOnMissing
32e60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e80 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
32e90 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
32ea0 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
32eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ed0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
32ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ef0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
32f20 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50  owMessage(TraceP
32f30 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
32f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f60 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
32f70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
32f80 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
32f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32fb0 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
32fc0 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
32fd0 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
32fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
33000 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
33010 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
33020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33030 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
33040 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
33050 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
33060 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33080 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
33090 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
330a0 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
330b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
330d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
330e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
330f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33100 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
33110 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33140 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33150 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
33160 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
331c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331d0 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67 20 53 75    #region Log Su
331e0 6d 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20  mmary..         
331f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
33200 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
33210 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
33220 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
33230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33240 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
33250 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
33260 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
33270 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33280 20 20 20 20 20 20 20 20 20 20 20 22 73 75 62 4b             "subK
33290 65 79 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d  eysCreated = {0}
332a0 2c 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  , subKeysDeleted
332b0 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 20 20 20 20 20 22 6b 65 79 56 61 6c 75 65 73 53       "keyValuesS
332e0 65 74 20 3d 20 7b 32 7d 2c 20 6b 65 79 56 61 6c  et = {2}, keyVal
332f0 75 65 73 44 65 6c 65 74 65 64 20 3d 20 7b 33 7d  uesDeleted = {3}
33300 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
33310 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
33320 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
33330 65 6c 70 65 72 2e 53 75 62 4b 65 79 73 43 72 65  elper.SubKeysCre
33340 61 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20  ated),..        
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33360 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73  ForDisplay(Regis
33370 74 72 79 48 65 6c 70 65 72 2e 53 75 62 4b 65 79  tryHelper.SubKey
33380 73 44 65 6c 65 74 65 64 29 2c 0d 0a 20 20 20 20  sDeleted),..    
33390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333a0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52      ForDisplay(R
333b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65  egistryHelper.Ke
333c0 79 56 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20  yValuesSet),..  
333d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333e0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
333f0 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
33400 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  KeyValuesDeleted
33410 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
33420 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
33430 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33450 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
33460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33470 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
33480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
334a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
334b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
334c0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
334d0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
334e0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
334f0 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
33500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33510 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
33520 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22  traceCallback, "
33530 53 75 63 63 65 73 73 2e 22 2c 0d 0a 20 20 20 20  Success.",..    
33540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33550 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
33560 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
33570 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
33580 6e 20 30 3b 20 2f 2a 20 53 55 43 43 45 53 53 20  n 0; /* SUCCESS 
33590 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
335a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
335b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
335c0 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
335d0 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
335e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
335f0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
33600 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
33610 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
33620 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
33630 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
33640 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
33650 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43  lback, e, traceC
33660 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
33670 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
33680 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow;..           
33690 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
336a0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
336b0 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  n..    }..    #e
336c0 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d 0a           ndregion..}..