System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 40018e675c671c50d037b7f09a8e10e562dece91:


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 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
19120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19130 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19150 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
19170 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52  OTE: For the CLR
19180 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d   v2.0 runtime, m
19190 61 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61  ake sure we disa
191a0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
191c0 20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70        any attemp
191d0 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20  t to use it for 
191e0 74 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75  things that requ
191f0 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ire..           
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19210 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c        an assembl
19220 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  y compiled for t
19230 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 74  he CLR v4.0.  It
19240 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..           
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
19260 20 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e 20        uncertain 
19270 69 66 20 74 68 69 73 20 69 73 20 61 63 74 75 61  if this is actua
19280 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e  lly a problem in
19290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
192a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
192b0 20 20 20 70 72 61 63 74 69 63 65 20 61 73 20 74     practice as t
192c0 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e 20  he CLR v4.0 can 
192d0 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e 0d  load and use an.
192e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19300 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69    assembly compi
19310 6c 65 64 20 77 69 74 68 20 74 68 65 20 43 4c 52  led with the CLR
19320 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d   v2.0; however,.
19330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19340 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19350 20 20 73 69 6e 63 65 20 74 68 69 73 20 70 72 6f    since this pro
19360 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74 68  ject offers both
19370 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c   configurations,
19380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19390 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
193a0 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20     we currently 
193b0 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69  disallow this mi
193c0 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20  smatch...       
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19400 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
19410 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx40 = true;..  
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
19440 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74  ion.noVs2010 = t
19450 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
19480 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
19490 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194b0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
194c0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
194d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
194e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
19510 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
19520 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
19530 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {0}, " +..     
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20         "support 
19560 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  for .NET Framewo
19570 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
19580 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
19590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195a0 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67         CLRv2Imag
195b0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
195c0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
195d0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19600 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19630 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
19640 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
19650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19660 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
19670 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
19680 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  n, CLRv4ImageRun
19690 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
196c0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
196d0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
196e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19720 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
19730 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69  e CLR v4.0 runti
19740 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
19750 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
19780 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
19790 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
197a0 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
197d0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
197e0 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
197f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19800 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19820 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
19830 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
19840 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
19870 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a  Vs2005 = true;..
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
198a0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
198b0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
198c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198d0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
198e0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
198f0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
19920 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
19930 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
19940 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
19970 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
19980 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
19990 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
199c0 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65  t for .NET Frame
199d0 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20  work {1} is now 
199e0 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20  disabled.",..   
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
19a10 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
19a20 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
19a50 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67  isplay(CLRv2Imag
19a60 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
19a70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ab0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
19ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
19b10 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65       "unsupporte
19b40 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
19b50 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
19b60 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  n " +..         
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65     "{0}, must be
19b90 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20   {1} or {2}",.. 
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19bc0 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52  splay(coreImageR
19bd0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
19be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
19c00 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61  Display(CLRv2Ima
19c10 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
19c20 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
19c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c40 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34  ForDisplay(CLRv4
19c50 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
19c60 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion));....      
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ca0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19cc0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19cf0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
19d00 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
19d10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19d20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19d30 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
19d40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
19d50 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
19d80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
19d90 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
19da0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19db0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19dc0 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65  = "Failed to che
19dd0 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  ck image runtime
19de0 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20   version.";..   
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e10 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19e30 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
19e40 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
19e50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
19e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e80 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 0d 0a 0d 0a 20 20 20  /////////....   
19ea0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
19eb0 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
19ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19ed0 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67  lic bool HasFlag
19ee0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
19ef0 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
19f00 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20   hasFlags,..    
19f10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
19f20 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20   all..          
19f30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
19f40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19f50 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29          if (all)
19f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f70 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69        return ((i
19f80 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61  nstallFlags & ha
19f90 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c  sFlags) == hasFl
19fa0 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ags);..         
19fb0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c   return ((instal
19fe0 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  lFlags & hasFlag
19ff0 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61  s) != InstallFla
1a000 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20  gs.None);..     
1a010 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a020 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1a030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
1a070 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1a080 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20  c void Dump(..  
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1a0a0 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
1a0b0 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20  eCallback..     
1a0c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1a0d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1a0f0 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
1a100 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1a110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a140 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a150 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a170 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1a180 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ly", ForDisplay(
1a190 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20  assembly)),..   
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1a1c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a1e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1a1f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1a200 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d       "LogFileNam
1a230 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  e", ForDisplay(l
1a240 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  ogFileName)),.. 
1a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a260 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a270 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a290 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a2a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a2b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2d0 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f 72         "Director
1a2e0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
1a2f0 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
1a300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a310 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1a320 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a330 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a340 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1a350 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1a360 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61       "CoreFileNa
1a390 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
1a3a0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  coreFileName)),.
1a3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a3c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a3d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a400 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a410 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a430 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69           "LinqFi
1a440 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
1a450 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  lay(linqFileName
1a460 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a480 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a4b0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1a4c0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1a4d0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
1a4f0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c  signerFileName",
1a500 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69   ForDisplay(desi
1a510 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  gnerFileName)),.
1a520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a530 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a540 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1a570 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1a580 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1a590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a5a0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46           "DebugF
1a5b0 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c  ormat", ForDispl
1a5c0 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29  ay(debugFormat))
1a5d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a5e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1a5f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1a620 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1a630 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1a640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a650 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63             "Trac
1a660 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  eFormat", ForDis
1a670 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74  play(traceFormat
1a680 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a6a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a6d0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1a6e0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1a6f0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1a710 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72  stallFlags", For
1a720 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46  Display(installF
1a730 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20  lags)),..       
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1a760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a770 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1a780 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1a790 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1a7a0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22   "DebugPriority"
1a7d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
1a7e0 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20  ugPriority)),.. 
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a810 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a830 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a840 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a850 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69         "TracePri
1a880 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c  ority", ForDispl
1a890 61 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ay(tracePriority
1a8a0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1a8c0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1a8f0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1a900 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1a910 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
1a930 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c  stall", ForDispl
1a940 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20  ay(install)),.. 
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a960 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a970 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a990 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1a9a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1a9b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9d0 20 20 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20         "Wow64", 
1a9e0 46 6f 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34  ForDisplay(wow64
1a9f0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1aa10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1aa40 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1aa50 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1aa60 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1aa80 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c  RuntimeVersion",
1aa90 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75   ForDisplay(noRu
1aaa0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d  ntimeVersion)),.
1aab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aac0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1aad0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1ab00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1ab10 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ab20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab30 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b           "NoDesk
1ab40 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  top", ForDisplay
1ab50 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20  (noDesktop)),.. 
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ab80 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1aba0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1abb0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1abc0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63         "NoCompac
1abf0 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  t", ForDisplay(n
1ac00 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20  oCompact)),..   
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ac30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ac50 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1ac60 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1ac70 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22       "NoNetFx20"
1aca0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1acb0 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20  etFx20)),..     
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1ace0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1acf0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1ad00 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1ad10 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1ad20 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad40 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
1ad50 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
1ad60 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1ad90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ada0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1adb0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1adc0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1add0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46 6f 72   "NoVs2005", For
1ae00 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 35  Display(noVs2005
1ae10 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1ae20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ae30 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1ae60 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1ae70 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1ae80 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1aea0 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70  Vs2008", ForDisp
1aeb0 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d  lay(noVs2008)),.
1aec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aed0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1aee0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1af10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1af20 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af40 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
1af50 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  10", ForDisplay(
1af60 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20  noVs2010)),..   
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1af90 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1afb0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1afc0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1afd0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20       "NoTrace", 
1b000 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61  ForDisplay(noTra
1b010 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ce)),..         
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b030 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b050 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b060 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1b070 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1b080 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b0a0 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44  NoConsole", ForD
1b0b0 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65  isplay(noConsole
1b0c0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b0e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1b0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b100 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1b110 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1b120 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1b130 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1b150 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  Log", ForDisplay
1b160 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20  (noLog)),..     
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b180 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1b190 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b1a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b1b0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1b1c0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1b1d0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69     "ThrowOnMissi
1b200 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ng", ForDisplay(
1b210 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29  throwOnMissing))
1b220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b230 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1b240 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b260 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1b270 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1b280 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1b290 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b2a0 20 20 20 20 20 20 20 20 20 20 20 22 57 68 61 74             "What
1b2b0 49 66 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  If", ForDisplay(
1b2c0 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20  whatIf)),..     
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1b2f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b300 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b310 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1b320 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1b330 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b350 20 20 20 22 44 65 62 75 67 22 2c 20 46 6f 72 44     "Debug", ForD
1b360 69 73 70 6c 61 79 28 64 65 62 75 67 29 29 2c 0d  isplay(debug)),.
1b370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b380 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b390 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1b3c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1b3d0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1b3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b3f0 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f 73           "Verbos
1b400 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76  e", ForDisplay(v
1b410 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20  erbose)),..     
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b430 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1b440 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b450 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b460 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1b470 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1b480 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4a0 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f     "Confirm", Fo
1b4b0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d  rDisplay(confirm
1b4c0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b4e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1b510 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
1b540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b550 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
1b560 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
1b570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b580 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b5a0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
1b5b0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
1b5c0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
1b5f0 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20  blyTitle",..    
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b610 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1b620 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 54 69  ay(GetAssemblyTi
1b630 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 29 29 2c  tle(assembly))),
1b640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1b660 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1b670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b680 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b690 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1b6a0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1b6b0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6d0 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 43        "AssemblyC
1b6e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a  onfiguration",..
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1b710 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62  isplay(GetAssemb
1b720 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  lyConfiguration(
1b730 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20  assembly))),..  
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b760 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b790 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b7a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1b7b0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1b7c0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1b810 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
1b820 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
1b830 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
1b840 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
1b850 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a  mbly assembly;..
1b860 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1b870 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73 73 65  ic Assembly Asse
1b880 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
1b890 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b8a0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1b8b0 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20  n assembly; }.. 
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b8d0 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20  et { assembly = 
1b8e0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1b8f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1b910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b950 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1b960 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65  e string logFile
1b970 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
1b980 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1b990 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20   LogFileName..  
1b9a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1b9c0 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c   { return logFil
1b9d0 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
1b9e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1b9f0 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  logFileName = va
1ba00 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1ba10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ba20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ba30 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1ba70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1ba80 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
1ba90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1baa0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 69 72  ublic string Dir
1bab0 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..        
1bac0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bad0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1bae0 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b 20 7d  urn directory; }
1baf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bb00 20 20 73 65 74 20 7b 20 64 69 72 65 63 74 6f 72    set { director
1bb10 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
1bb20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1bb30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1bb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1bb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1bb90 69 76 61 74 65 20 73 74 72 69 6e 67 20 63 6f 72  ivate string cor
1bba0 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  eFileName;..    
1bbb0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1bbc0 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61  tring CoreFileNa
1bbd0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1bbe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bbf0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1bc00 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  coreFileName; }.
1bc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e   set { coreFileN
1bc30 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bcb0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
1bcc0 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  inqFileName;..  
1bcd0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1bce0 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65   string LinqFile
1bcf0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
1bd00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bd10 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1bd20 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20  n linqFileName; 
1bd30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1bd40 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c     set { linqFil
1bd50 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
1bd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1bd70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1bd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bd90 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1bdd0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1bde0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
1bdf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1be00 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65  public string De
1be10 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a  signerFileName..
1be20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1be40 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69  et { return desi
1be50 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  gnerFileName; }.
1be60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be70 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72 46   set { designerF
1be80 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
1be90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bea0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1beb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1bec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bef0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1bf00 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1bf10 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  ng debugFormat;.
1bf20 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1bf30 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  lic string Debug
1bf40 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
1bf50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1bf60 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1bf70 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  urn debugFormat;
1bf80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1bf90 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 46      set { debugF
1bfa0 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
1bfb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1bfc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1bfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bfe0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c020 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1c030 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20   traceFormat;.. 
1c040 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c050 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
1c060 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
1c070 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c080 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1c090 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
1c0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0b0 20 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72    set { traceFor
1c0c0 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mat = value; }..
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1c0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c140 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46  private InstallF
1c150 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67  lags installFlag
1c160 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1c170 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c  public InstallFl
1c180 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags InstallFlags
1c190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1c1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
1c1c0 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20  stallFlags; }.. 
1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c1e0 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67  et { installFlag
1c1f0 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
1c200 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c210 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1c260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1c270 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72  ivate TracePrior
1c280 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
1c290 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1c2a0 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f  public TracePrio
1c2b0 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69  rity DebugPriori
1c2c0 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
1c2d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c2e0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1c2f0 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d  debugPriority; }
1c300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c310 20 20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69    set { debugPri
1c320 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
1c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c360 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c3a0 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
1c3b0 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
1c3c0 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
1c3d0 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
1c3e0 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
1c3f0 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
1c400 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c410 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1c420 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
1c430 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
1c440 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
1c450 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
1c460 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1c470 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c480 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1c490 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1c4d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1c4e0 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20  ol install;..   
1c4f0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1c500 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20  bool Install..  
1c510 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1c530 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
1c540 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  l; }..          
1c550 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
1c560 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  all = value; }..
1c570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c580 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1c590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c5e0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77  private bool wow
1c5f0 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
1c600 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77   public bool Wow
1c610 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
1c620 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c630 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1c640 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20  wow64; }..      
1c650 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1c660 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d  wow64 = value; }
1c670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6a0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c6e0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1c6f0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
1c700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1c710 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74  blic bool NoRunt
1c720 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  imeVersion..    
1c730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c740 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1c750 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d   return noRuntim
1c760 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  eVersion; }..   
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1c780 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   { noRuntimeVers
1c790 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1c7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c810 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
1c820 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
1c830 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1c840 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
1c850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c860 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1c870 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
1c880 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
1c890 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
1c8a0 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
1c8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1c8c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1c8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8e0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1c920 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1c930 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
1c940 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1c950 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
1c960 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1c980 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
1c990 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
1c9a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1c9b0 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
1c9c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c9d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c9e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c9f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ca30 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1ca40 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
1ca50 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1ca60 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
1ca70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1ca90 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
1caa0 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
1cab0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1cac0 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
1cad0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1cae0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1caf0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cb00 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cb40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1cb50 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
1cb60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1cb70 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
1cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1cb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cba0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1cbb0 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1cbd0 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
1cbe0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1cbf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1cc00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1cc10 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1cc50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1cc60 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 3b 0d 0a  bool noVs2005;..
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1cc80 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 35  ic bool NoVs2005
1cc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1cca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ccb0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1ccc0 56 73 32 30 30 35 3b 20 7d 0d 0a 20 20 20 20 20  Vs2005; }..     
1ccd0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
1cce0 20 6e 6f 56 73 32 30 30 35 20 3d 20 76 61 6c 75   noVs2005 = valu
1ccf0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1cd00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1cd10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cd20 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1cd60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1cd70 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20  ol noVs2008;..  
1cd80 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1cd90 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d 0a   bool NoVs2008..
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1cdc0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
1cdd0 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2008; }..       
1cde0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
1cdf0 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75 65 3b  oVs2008 = value;
1ce00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ce10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ce20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ce30 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ce70 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1ce80 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20   noVs2010;..    
1ce90 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1cea0 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20 20  ool NoVs2010..  
1ceb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1ced0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
1cee0 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  10; }..         
1cef0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
1cf00 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b 20 7d  s2010 = value; }
1cf10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1cf20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1cf30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1cf80 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1cf90 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  oTrace;..       
1cfa0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1cfb0 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20 20 20   NoTrace..      
1cfc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1cfd0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1cfe0 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d  eturn noTrace; }
1cff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d000 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63 65 20    set { noTrace 
1d010 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1d020 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d030 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1d080 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1d090 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f  ate bool noConso
1d0a0 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le;..           
1d0b0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
1d0c0 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20  onsole..        
1d0d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d0e0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1d0f0 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d  urn noConsole; }
1d100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d110 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c    set { noConsol
1d120 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1d130 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d140 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1d150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1d190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1d1a0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67  ivate bool noLog
1d1b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1d1c0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67  ublic bool NoLog
1d1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d1f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
1d200 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  Log; }..        
1d210 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1d220 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  Log = value; }..
1d230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d240 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1d250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d2a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 74 68 72  private bool thr
1d2b0 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20  owOnMissing;..  
1d2c0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1d2d0 20 62 6f 6f 6c 20 54 68 72 6f 77 4f 6e 4d 69 73   bool ThrowOnMis
1d2e0 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
1d2f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d300 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1d310 6e 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n throwOnMissing
1d320 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1d330 20 20 20 20 20 73 65 74 20 7b 20 74 68 72 6f 77       set { throw
1d340 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 76 61 6c 75  OnMissing = valu
1d350 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1d360 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d370 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1d380 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d3c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1d3d0 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20  ol whatIf;..    
1d3e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1d3f0 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20  ool WhatIf..    
1d400 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d410 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1d420 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20   return whatIf; 
1d430 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1d440 20 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20     set { whatIf 
1d450 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1d460 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d470 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1d4d0 61 74 65 20 62 6f 6f 6c 20 64 65 62 75 67 3b 0d  ate bool debug;.
1d4e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d4f0 6c 69 63 20 62 6f 6f 6c 20 44 65 62 75 67 0d 0a  lic bool Debug..
1d500 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1d520 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  et { return debu
1d530 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  g; }..          
1d540 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
1d550 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  g = value; }..  
1d560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1d580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1d5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1d5d0 69 76 61 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f  ivate bool verbo
1d5e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d5f0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72   public bool Ver
1d600 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
1d610 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d620 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1d630 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20  n verbose; }..  
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1d650 74 20 7b 20 76 65 72 62 6f 73 65 20 3d 20 76 61  t { verbose = va
1d660 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1d670 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d680 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1d690 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1d6d0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1d6e0 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20  bool confirm;.. 
1d6f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1d700 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a  c bool Confirm..
1d710 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1d730 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66  et { return conf
1d740 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  irm; }..        
1d750 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f          set { co
1d760 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d  nfirm = value; }
1d770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d780 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
1d790 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
1d7a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1d7b0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1d7c0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d7d0 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
1d810 20 20 20 20 20 23 72 65 67 69 6f 6e 20 46 72 61       #region Fra
1d820 6d 65 77 6f 72 6b 4c 69 73 74 20 43 6c 61 73 73  meworkList Class
1d830 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1d840 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 46  e sealed class F
1d850 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20  rameworkList..  
1d860 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d870 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d880 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  lic Constructors
1d890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1d8a0 62 6c 69 63 20 46 72 61 6d 65 77 6f 72 6b 4c 69  blic FrameworkLi
1d8b0 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
1d8c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d8d0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1d8e0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1d8f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1d900 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1d910 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1d960 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
1d970 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
1d980 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1d990 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
1d9a0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1d9b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1d9c0 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
1d9d0 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20  ryKey RootKey.. 
1d9e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
1da00 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b  t { return rootK
1da10 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
1da20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72 6f 6f         set { roo
1da30 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  tKey = value; }.
1da40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1da50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1da60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1dab0 20 70 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c   private StringL
1dac0 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20  ist names;..    
1dad0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
1dae0 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d  tringList Names.
1daf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d  get { return nam
1db20 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  es; }..         
1db30 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 61 6d         set { nam
1db40 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  es = value; }.. 
1db50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1db60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
1dbb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1dbc0 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4d 61  rivate VersionMa
1dbd0 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  p versions;..   
1dbe0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1dbf0 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72 73 69  VersionMap Versi
1dc00 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ons..           
1dc10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dc20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
1dc30 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20   versions; }..  
1dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1dc50 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20 76  t { versions = v
1dc60 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
1dc70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1dc80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1dc90 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
1dcd0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
1dce0 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c 61 74   StringList plat
1dcf0 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20  formNames;..    
1dd00 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
1dd10 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f  tringList Platfo
1dd20 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  rmNames..       
1dd30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1dd40 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
1dd50 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  turn platformNam
1dd60 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  es; }..         
1dd70 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 6c 61         set { pla
1dd80 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c  tformNames = val
1dd90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
1dda0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ddb0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
1ddc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ddd0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1dde0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ddf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1de30 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1de40 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a  n VsList Class..
1de50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1de60 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 73 4c  sealed class VsL
1de70 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ist..        {..
1de80 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1de90 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
1dea0 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
1deb0 20 20 20 20 20 70 75 62 6c 69 63 20 56 73 4c 69       public VsLi
1dec0 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
1ded0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1dee0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
1def0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
1df00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1df10 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1df20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1df70 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
1df80 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
1df90 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
1dfa0 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b      private Mock
1dfb0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
1dfc0 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Key;..          
1dfd0 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
1dfe0 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79  istryKey RootKey
1dff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e010 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f   get { return ro
1e020 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20  otKey; }..      
1e030 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
1e040 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b  rootKey = value;
1e050 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1e060 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e070 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e080 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e0c0 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73      private Vers
1e0d0 69 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f 6e 73  ionList versions
1e0e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1e0f0 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
1e100 74 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20  t Versions..    
1e110 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e120 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1e130 20 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73   return versions
1e140 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1e150 20 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69       set { versi
1e160 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
1e170 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1e180 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1e190 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1e1a0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1e1b0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
1e1c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1e1d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e1e0 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
1e220 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
1e230 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20  rivate Constant 
1e240 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72  Data..        pr
1e250 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1e260 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng CoreFileName 
1e270 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
1e280 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20  QLite.dll";..   
1e290 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1e2a0 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  st string LinqFi
1e2b0 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
1e2c0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
1e2d0 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  q.dll";..       
1e2e0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1e2f0 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
1e300 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  leName = "SQLite
1e310 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d  .Designer.dll";.
1e320 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1e330 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
1e340 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51  oviderName = "SQ
1e350 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64  Lite Data Provid
1e360 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  er";..        pr
1e370 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1e380 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  ng ProjectName =
1e390 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1e3a0 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
1e3b0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1e3c0 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65  ring LegacyProje
1e3d0 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  ctName = "SQLite
1e3e0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1e3f0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1e400 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d   InvariantName =
1e410 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1e420 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
1e430 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1e440 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
1e450 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
1e460 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
1e470 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20  eFactory";..    
1e480 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1e490 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70  t string Descrip
1e4a0 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61  tion = ".NET Fra
1e4b0 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76  mework Data Prov
1e4c0 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22  ider for SQLite"
1e4d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1e4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e530 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1e540 72 69 6e 67 20 43 4c 52 76 32 49 6d 61 67 65 52  ring CLRv2ImageR
1e550 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
1e560 22 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20  "v2.0.50727";.. 
1e570 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1e580 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76  onst string CLRv
1e590 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1e5a0 73 69 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33  sion = "v4.0.303
1e5b0 31 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  19";....        
1e5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5d0 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e610 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1e620 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56   string NameAndV
1e630 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30  alueFormat = "{0
1e640 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20  }: {1}";..      
1e650 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1e660 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75  string LogFileSu
1e670 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a  ffix = ".log";..
1e680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1e6e0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1e6f0 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20  g RootKeyName = 
1e700 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20  "Software";..   
1e710 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1e720 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53  st string Wow64S
1e730 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77  ubKeyName = "Wow
1e740 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20  6432Node";....  
1e750 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1e760 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1e7a0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
1e7b0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
1e7c0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1e7d0 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74   has both 32-bit
1e7e0 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74   and 64-bit edit
1e7f0 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ions...        /
1e800 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
1e810 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
1e820 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33  ly bool NetFxIs3
1e830 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  2BitOnly = false
1e840 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
1e850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e8a0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
1e8b0 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69  OTE: For now, Vi
1e8c0 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61  sual Studio is a
1e8d0 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61  lways a 32-bit a
1e8e0 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
1e8f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1e900 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1e910 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73  readonly bool Vs
1e920 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72  Is32BitOnly = tr
1e930 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ue;....        /
1e940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e950 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e990 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1e9a0 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
1e9b0 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42   VsIdFormat = "B
1e9c0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
1e9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ea20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1ea30 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
1ea40 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
1ea50 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
1ea60 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
1ea70 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
1ea80 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
1ea90 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
1eaa0 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
1eab0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1eac0 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
1ead0 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
1eae0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
1eaf0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
1eb00 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
1eb10 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
1eb20 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
1eb30 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
1eb40 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
1eb50 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1eb60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1eb70 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1ebb0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1ebc0 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
1ebd0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
1ebe0 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73 65  vate static Asse
1ebf0 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c  mbly thisAssembl
1ec00 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74  y = Assembly.Get
1ec10 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c  ExecutingAssembl
1ec20 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
1ec30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
1ec40 74 72 69 6e 67 20 74 72 61 63 65 43 61 74 65 67  tring traceCateg
1ec50 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ory = Path.GetFi
1ec60 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
1ec70 20 20 20 20 20 74 68 69 73 41 73 73 65 6d 62 6c       thisAssembl
1ec80 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 20 2f 2a 20  y.Location); /* 
1ec90 4e 4f 54 45 3a 20 53 61 6d 65 20 66 6f 72 20 64  NOTE: Same for d
1eca0 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 2e 20  ebug and trace. 
1ecb0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  */....        pr
1ecc0 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61  ivate static Tra
1ecd0 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67  ceCallback debug
1ece0 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65  Callback = AppDe
1ecf0 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  bug;..        pr
1ed00 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61  ivate static Tra
1ed10 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
1ed20 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72  Callback = AppTr
1ed30 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65  ace;..        #e
1ed40 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1ed50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1ed60 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
1eda0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
1edb0 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  race Handling.. 
1edc0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1edd0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
1ede0 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  LogFileName(..  
1edf0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ee00 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20   typeName..     
1ee10 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f         ) /* thro
1ee20 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
1ee30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1ee40 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50  ing fileName = P
1ee50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e  ath.GetTempFileN
1ee60 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame();..        
1ee70 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
1ee80 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
1ee90 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c  irectoryName(fil
1eea0 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
1eeb0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1eec0 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e  NameOnly = Path.
1eed0 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f  GetFileNameWitho
1eee0 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65  utExtension(file
1eef0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1ef00 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
1ef10 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
1ef20 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
1ef30 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  y, String.Format
1ef40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ef50 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
1ef60 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21  traceCategory, !
1ef70 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1ef80 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f  mpty(typeName) ?
1ef90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1efa0 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65        "." + type
1efb0 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d  Name : String.Em
1efc0 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e  pty, "." + fileN
1efd0 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20  ameOnly +..     
1efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
1eff0 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d  ogFileSuffix));.
1f000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ...            F
1f010 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d  ile.Move(fileNam
1f020 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b  e, newFileName);
1f030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f040 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61  return newFileNa
1f050 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me;..        }..
1f060 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1f070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1f0c0 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
1f0d0 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20   AppDebug(..    
1f0e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
1f0f0 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
1f100 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
1f110 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
1f120 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1f130 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1f140 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53  eOps.DebugCore(S
1f150 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1f170 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
1f180 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
1f190 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20  xtDebugId(),..  
1f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1f1b0 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
1f1c0 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
1f1d0 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
1f1e0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1f1f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1f200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f250 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1f260 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a  void AppTrace(..
1f270 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1f280 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
1f290 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1f2a0 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
1f2b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1f2c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f2d0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f  TraceOps.TraceCo
1f2e0 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  re(String.Format
1f2f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f300 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1f310 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  eFormat, TraceOp
1f320 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c  s.NextTraceId(),
1f330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f340 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53    TraceOps.TimeS
1f350 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74  tamp(DateTime.Ut
1f360 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c  cNow), message),
1f370 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
1f380 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f390 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1f3a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f3b0 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1f3f0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1f400 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72   Generic Platfor
1f410 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  m Handling..    
1f420 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1f430 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50  ic bool Is64BitP
1f440 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20  rocess()..      
1f450 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f460 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1f470 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
1f480 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  s true if the cu
1f490 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73  rrent process is
1f4a0 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69   64-bit.  If thi
1f4b0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
1f4c0 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65 2c  /       is true,
1f4d0 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20   we *know* that 
1f4e0 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69  we must be runni
1f4f0 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a  ng on a 64-bit..
1f500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1f510 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73       operating s
1f520 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20  ystem as well.  
1f530 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69 73  However, if this
1f540 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20   is false, we.. 
1f550 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f560 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73      do not neces
1f570 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74  sarily know that
1f580 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20   we are running 
1f590 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20  on a 32-bit..   
1f5a0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1f5b0 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74    operating syst
1f5c0 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34  em, due to WoW64
1f5d0 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34   (Win32-on-Win64
1f5e0 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  ), etc...       
1f5f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1f600 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
1f610 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65  Ptr.Size == size
1f620 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f  of(long)); // NO
1f630 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36  TE: Pointer is 6
1f640 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20  4-bits?..       
1f650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f6b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1f6c0 73 74 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65  string GetRootKe
1f6d0 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
1f6e0 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1f700 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f710 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
1f720 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b  ing.Format("{0}{
1f730 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65  1}", RootKeyName
1f740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f750 20 20 20 77 6f 77 36 34 20 26 26 20 49 73 36 34     wow64 && Is64
1f760 42 69 74 50 72 6f 63 65 73 73 28 29 20 3f 0d 0a  BitProcess() ?..
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f780 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f 77 36 34      "\\" + Wow64
1f790 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20 53 74 72  SubKeyName : Str
1f7a0 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20  ing.Empty);..   
1f7b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1f7c0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1f7d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1f7e0 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1f820 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
1f830 20 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20   Generic String 
1f840 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1f850 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1f860 20 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c   string ForDispl
1f870 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
1f880 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
1f890 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1f8a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f8b0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
1f8c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f8d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f8e0 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20  "<null>";....   
1f8f0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1f900 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
1f910 20 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d       Type type =
1f920 20 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29   value.GetType()
1f930 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f940 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
1f950 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29  eof(XmlElement))
1f960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f980 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d   XmlElement elem
1f990 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e  ent = (XmlElemen
1f9a0 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  t)value;....    
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1f9c0 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74  lt = element.Out
1f9d0 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20  erXml;..        
1f9e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1f9f0 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
1fa00 20 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69   == typeof(Versi
1fa10 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
1fa20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fa30 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72       Version ver
1fa40 73 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29  sion = (Version)
1fa50 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
1fa60 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1fa70 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
1fa80 28 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e  ("v{0}", version
1fa90 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1faa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
1fab0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1fac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fad0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 76 61 6c      result = val
1fae0 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  ue.ToString();..
1faf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fb00 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e    if (result.Len
1fb10 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
1fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1fb30 65 74 75 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b  eturn "<empty>";
1fb40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fb50 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
1fb60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb80 20 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73   type.IsSubclass
1fb90 4f 66 28 74 79 70 65 6f 66 28 56 61 6c 75 65 54  Of(typeof(ValueT
1fba0 79 70 65 29 29 20 3f 20 22 7b 30 7d 22 20 3a 20  ype)) ? "{0}" : 
1fbb0 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20 20 20 20  "\"{0}\"",..    
1fbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbd0 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20  result);..      
1fbe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fbf0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
1fc00 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
1fc10 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1fc20 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc40 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1fc80 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
1fc90 62 6c 79 20 41 74 74 72 69 62 75 74 65 20 48 61  bly Attribute Ha
1fca0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
1fcb0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
1fcc0 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
1fcd0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a  Configuration(..
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
1fcf0 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mbly assembly.. 
1fd00 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1fd10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fd20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
1fd30 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
1fd40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fd50 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1fd80 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
1fd90 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a  bly.IsDefined(..
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
1fdc0 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  of(AssemblyConfi
1fdd0 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74  gurationAttribut
1fde0 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  e), false))..   
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
1fe20 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
1fe30 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69  nAttribute confi
1fe40 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20  guration =..    
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c          (Assembl
1fe70 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
1fe80 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20  tribute)..      
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fea0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47        assembly.G
1feb0 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
1fec0 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
1fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fee0 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
1fef0 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
1ff00 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20  nAttribute),..  
1ff10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
1ff30 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20  lse)[0];....    
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff50 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69      return confi
1ff60 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75  guration.Configu
1ff70 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ration;..       
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1ffb0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
1ffc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffe0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
1fff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20000 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20010 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20020 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
20030 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20040 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20060 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 0d 0a 0d 0a 20  ///////////.... 
20090 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
200a0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41  atic string GetA
200b0 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20  ssemblyTitle(.. 
200c0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
200d0 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  bly assembly..  
200e0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
200f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20100 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
20110 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
20120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20130 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
20150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20160 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
20170 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20  ly.IsDefined(.. 
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20190 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
201a0 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41  f(AssemblyTitleA
201b0 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65  ttribute), false
201c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
201d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201f0 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65     AssemblyTitle
20200 41 74 74 72 69 62 75 74 65 20 74 69 74 6c 65 20  Attribute title 
20210 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
20220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
20230 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
20240 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20  ribute)..       
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20260 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65       assembly.Ge
20270 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
20280 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202a0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
202b0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
202c0 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a  e), false)[0];..
202d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
202e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
202f0 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20   title.Title;.. 
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20310 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20320 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20330 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20350 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20360 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
20370 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
20380 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
20390 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
203a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
203b0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
203c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
203d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
203e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
20430 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72   #region .NET Fr
20440 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67  amework Handling
20450 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20460 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
20470 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74  GetFrameworkRoot
20480 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
20490 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
204a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
204b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
204c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
204d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
204e0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e  }\\Microsoft\\.N
204f0 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20  ETFramework",.. 
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
20510 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  etRootKeyName(wo
20520 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
20530 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
20540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20590 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
205a0 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
205b0 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
205c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
205d0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
205e0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
205f0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
20600 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
20610 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
20620 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
20630 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
20640 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
20650 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20660 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
20670 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73  mat = !String.Is
20680 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74  NullOrEmpty(plat
20690 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  formName) ?..   
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
206b0 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31  }\\Microsoft\\{1
206c0 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d  }\\v{2}\\{3}" :.
206d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206e0 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74   "{0}\\Microsoft
206f0 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d  \\{1}\\v{2}";...
20700 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
20710 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  urn String.Forma
20720 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f  t(format, GetRoo
20730 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c  tKeyName(wow64),
20740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20750 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
20760 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
20770 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  n, platformName)
20780 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
20790 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
207a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
207e0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
207f0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
20800 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
20810 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
20820 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
20830 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
20840 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
20850 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
20860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20880 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
20890 6c 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  ly =..          
208a0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
208b0 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
208c0 79 4c 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61  yLoadFrom(fileNa
208d0 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
208e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
208f0 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
20900 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20920 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49  eturn assembly.I
20930 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
20940 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
20950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
20960 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
20970 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20980 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
20990 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
209a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
209b0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
209c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
209d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
209e0 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
20a20 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20a30 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
20a40 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
20a50 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
20a60 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
20a70 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
20a80 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
20a90 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
20aa0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
20ab0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
20ac0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
20ad0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20ae0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
20af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
20b00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20b10 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
20b20 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
20b30 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
20b40 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74      rootKey, Get
20b70 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  FrameworkRootKey
20b80 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 66 61 6c  Name(wow64), fal
20b90 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
20ba0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
20bb0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
20bc0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20bd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
20be0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
20c30 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
20c40 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
20c60 79 2c 20 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22  y, "InstallRoot"
20c70 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
20c80 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20ca0 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
20cb0 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
20cc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20cd0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
20ce0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20cf0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 20 20 28 73 74 72 69 6e 67 29 76 61 6c 75      (string)valu
20d20 65 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  e, String.Format
20d30 28 22 76 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f  ("v{0}", framewo
20d40 72 6b 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20  rkVersion));..  
20d50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20d60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
20d70 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
20d80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20d90 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
20dd0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
20de0 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50   Per-Framework/P
20df0 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67  latform Handling
20e00 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20e10 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
20e20 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72  itializeFramewor
20e30 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20  kList(..        
20e40 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
20e50 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
20e60 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
20e70 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
20e80 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
20e90 20 20 20 20 72 65 66 20 46 72 61 6d 65 77 6f 72      ref Framewor
20ea0 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
20eb0 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ist..           
20ec0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
20ed0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
20ee0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
20ef0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20f00 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
20f10 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61 6d 65  List = new Frame
20f20 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  workList();.... 
20f30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
20f40 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
20f50 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
20f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
20f70 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
20f80 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
20f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fb0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
20ff0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
21000 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
21010 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
21020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21030 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
21040 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72  .Names = new Str
21050 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21070 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
21080 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
21090 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
210a0 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
210b0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
210c0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
210d0 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f  Add(".NETFramewo
210e0 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rk");....       
210f0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
21100 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
21110 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
21120 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
21130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21140 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21150 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
21160 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
21170 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
21180 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
21190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
211b0 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
211c0 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
211d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
211e0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
211f0 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
21200 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
21210 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
21220 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21230 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21240 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
21290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
212a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
212b0 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
212c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
212e0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
212f0 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73  sions = new Vers
21300 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20  ionMap();....   
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21320 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
21330 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
21340 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
21350 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
21360 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
21380 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f  rsionList deskto
21390 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e  pVersionList = n
213a0 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
213b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
213c0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
213d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
213e0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
213f0 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30  ration.NoNetFx20
21400 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21410 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
21420 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
21430 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c  d(new Version(2,
21440 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a   0, 50727));....
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
21470 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
21480 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
21490 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20  n.NoNetFx40)..  
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214b0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
214c0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
214d0 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33   Version(4, 0, 3
214e0 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0319));....     
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
21500 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
21510 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46  sions.Add(".NETF
21520 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
21530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21540 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
21550 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20  onList);..      
21560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21580 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
21590 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
215a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
215b0 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
215c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
215f0 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54  rsions.Add(".NET
21600 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
21610 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
21620 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
21630 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20  VersionList(new 
21640 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20  Version[] {..   
21650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21660 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
21670 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65  (2, 0, 0, 0), ne
21680 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20  w Version(3, 5, 
21690 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  0, 0)..         
216a0 20 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d             }));.
216b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
216c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
216d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
216e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
216f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
21730 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
21740 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
21750 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
21760 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21770 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
21780 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
21790 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  ormNames = new S
217a0 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
217b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217c0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
217d0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
217e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
217f0 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
21810 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
21820 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75  formNames.Add(nu
21830 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
21840 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
21850 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
21860 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
21870 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
21880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21890 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
218a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
218b0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
218c0 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74  ames.Add("Pocket
218d0 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  PC");..         
218e0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
218f0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
21900 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72  mNames.Add("Smar
21910 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20  tphone");..     
21920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
21930 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
21940 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
21950 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20  WindowsCE");..  
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21980 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21990 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
219a0 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
219e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
219f0 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
21a00 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20  Framework(..    
21a10 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
21a20 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
21a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21a40 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
21a50 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
21a60 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
21a70 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
21a80 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
21a90 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
21aa0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
21ab0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
21ac0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
21ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21ae0 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
21af0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
21b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21b10 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
21b20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  = GetFrameworkKe
21b30 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
21b40 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
21b50 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
21b60 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
21b70 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29 3b 0d 0a  mName, wow64);..
21b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
21b90 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
21ba0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
21bb0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
21bc0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
21bd0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21be0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
21bf0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
21c00 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
21c10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21c20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
21c30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21c40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21c50 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
21c60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21c70 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d  (platformName !=
21c80 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20   null) // NOTE: 
21c90 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70  Skip non-desktop
21ca0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21cb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
21cc0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
21cd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
21ce0 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61  rectory = GetFra
21cf0 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
21d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21d10 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
21d20 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
21d30 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
21d40 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21d60 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
21d70 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
21d80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21d90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21da0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
21db0 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
21dc0 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
21dd0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21df0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
21e20 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
21e30 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
21e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e50 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
21e60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
21e70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
21e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e90 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
21ea0 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e 20  rk {0} found in 
21eb0 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c  directory {1}.",
21ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21ed0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
21ee0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
21ef0 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  n), ForDisplay(d
21f00 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21f40 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
21f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21f60 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
21f70 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21f80 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
21fc0 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64  .        [Method
21fd0 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
21fe0 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
21ff0 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  g)]..        pri
22000 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
22010 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
22020 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20  kConfig(..      
22030 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
22040 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry registry,..  
22050 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
22060 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
22070 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  kList,..        
22080 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e      FrameworkCon
22090 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  figCallback call
220a0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
220b0 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
220c0 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
220d0 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
220e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
220f0 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
22100 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
22110 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
22120 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
22130 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
22140 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
22150 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
22160 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
22170 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
22180 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22190 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
221a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
221b0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
221c0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
221d0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
221e0 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
221f0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
22200 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
22210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
22220 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
22230 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
22240 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
22250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
22270 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
22280 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
22290 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
222a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
222b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
222c0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
222d0 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
222e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
222f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22300 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
22310 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
22320 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
22330 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22340 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22350 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22360 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
22370 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
22380 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
22390 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
223a0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
223b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
223c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
223d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
223e0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
223f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22400 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
22410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
22430 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72  f (!Object.Refer
22440 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
22450 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75 72  ey, registry.Cur
22460 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20  rentUser) &&..  
22470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f                !O
22480 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
22490 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72  quals(rootKey, r
224a0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
224b0 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  hine))..        
224c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
224d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
224e0 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
224f0 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
22500 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
22510 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22520 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
22530 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22540 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
22550 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
22560 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
22570 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22580 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
22590 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e   "no framework n
225a0 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
225c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
225d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
225e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
225f0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
22600 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
22610 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
22630 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
22640 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75  ork versions fou
22650 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
22660 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
22670 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
22680 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22690 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
226a0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
226b0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
226c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
226d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
226e0 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
226f0 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22710 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
22720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22730 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
22740 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
22750 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d  es.Count != fram
22760 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
22770 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a  rmNames.Count)..
22780 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
227a0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
227b0 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
227c0 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
227d0 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
22800 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
22810 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  , frameworkList.
22820 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20  Names.Count,..  
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
22850 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
22860 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
22870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22880 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
22890 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
228a0 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
228b0 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
228c0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
228d0 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65  ames.Count; inde
228e0 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
228f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22900 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
22910 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
22920 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20  : Grab the name 
22930 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
22940 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d   (e.g. ".NETFram
22950 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20  ework")..       
22960 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
22970 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f    and the name o
22980 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28  f the platform (
22990 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22  e.g. "WindowsCE"
229a0 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
229b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
229c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
229d0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66  rameworkName = f
229e0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
229f0 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  es[index];..    
22a00 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
22a10 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
22a20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
22a30 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e  PlatformNames[in
22a40 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
22a50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
22a60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22a70 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e  NOTE: Skip all n
22a80 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65  on-desktop frame
22a90 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74  works (i.e. if t
22aa0 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  he platform..   
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
22ac0 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f        name is no
22ad0 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20  t null)...      
22ae0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22b00 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
22b10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
22b30 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
22b40 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
22b60 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
22b70 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
22b80 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
22b90 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
22ba0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
22bb0 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22be0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
22bf0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
22c00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22c10 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
22c20 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
22c30 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c50 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
22c60 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
22c70 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
22c80 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
22c90 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
22ca0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
22cb0 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
22cc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
22cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
22d20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
22d30 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
22d40 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
22d50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d70 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
22d80 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
22d90 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22db0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
22dc0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
22dd0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
22de0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
22e00 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
22e10 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
22e20 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
22e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e40 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
22e50 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
22e60 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
22e70 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
22ea0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
22eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22ec0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
22ed0 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
22ee0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
22ef0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22f00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22f10 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d  !HaveFramework(.
22f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
22f40 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
22f50 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
22f60 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
22f90 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
22fa0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22fd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
22fe0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
22ff0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
23000 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
23030 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
23040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
23060 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74  ET Framework not
23070 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
23080 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
23090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
230b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
230d0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
230f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23100 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
23110 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
23140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23150 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
23160 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
23170 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
23180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23190 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
231a0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
231b0 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
231c0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231e0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
231f0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
23200 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23230 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
23240 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
23250 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
23260 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
23290 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
232a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
232d0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
232e0 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c  rectory is inval
232f0 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  id, " +..       
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
23320 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
23330 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
23340 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
23370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23380 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
23390 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
233a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233c0 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
233d0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
233e0 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29  ctory, "Config")
233f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23400 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
23410 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
23420 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23440 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23450 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
23460 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
23470 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
23480 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
234b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
234c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
234f0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
23500 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f  directory {1} do
23510 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23530 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20          "exist, 
23540 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
23550 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
23560 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
23590 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
235a0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
235b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
235c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
235d0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
235e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
23610 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
23620 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
23630 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b  achine.config");
23640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23650 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c          if (!Fil
23660 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d  e.Exists(fileNam
23670 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
23680 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
236b0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
236c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236e0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
236f0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
23700 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
23710 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23730 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
23740 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31  work {0} file {1
23750 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  } does not exist
23760 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23780 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
23790 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
237a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
237b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
237d0 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65  Display(fileName
237e0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
237f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
23810 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23830 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23840 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61         bool loca
23850 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d  lSaved = false;.
23860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23870 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
23880 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
238b0 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65  ariant, name, de
238c0 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e  scription, typeN
238d0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238f0 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20    assemblyName, 
23900 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36  clientData, wow6
23910 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
23920 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23940 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
23950 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c   ref localSaved,
23960 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
239a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
239b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
239d0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23a00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23a10 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73  localSaved && !s
23a20 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  aved)..         
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a40 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
23a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23a60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23a70 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
23aa0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
23ab0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
23ac0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ae0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
23af0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
23b00 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
23b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20    "localSaved = 
23b40 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d  {0}, saved = {1}
23b50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
23b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b70 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c      ForDisplay(l
23b80 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44  ocalSaved), ForD
23b90 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d  isplay(saved)),.
23ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
23bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23bf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23c00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23c10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23c20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
23c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b  ///....        [
23c90 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
23ca0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
23cb0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
23cc0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
23cd0 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72  c bool ForEachFr
23ce0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
23cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
23d00 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
23d10 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
23d20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
23d30 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
23d40 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
23d50 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c  eworkRegistryCal
23d60 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
23d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
23d80 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
23d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23da0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
23db0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
23dc0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
23dd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
23de0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
23df0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
23e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
23e10 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
23e20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23e30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23e40 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74 72       if (registr
23e50 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23e60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23e70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23e80 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67 69   = "invalid regi
23e90 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  stry";..        
23ea0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23eb0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23ec0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23ed0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
23ee0 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  kList == null)..
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23f10 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
23f20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b  framework list";
23f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23f40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
23f70 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
23f80 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72  otKey = framewor
23f90 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a  kList.RootKey;..
23fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23fb0 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
23fc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23fe0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
23ff0 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
24020 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24030 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24040 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
24050 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
24060 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   registry.Curren
24070 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20  tUser) &&..     
24080 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65             !Obje
24090 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
240a0 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69  ls(rootKey, regi
240b0 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
240c0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
240d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
240e0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
240f0 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
24100 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
24110 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
24120 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24130 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
24140 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24150 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
24160 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20  rkList.Names == 
24170 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24190 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
241a0 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  o framework name
241b0 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
241c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
241d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
241e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
241f0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
24200 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
24210 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
24220 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24230 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
24240 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
24250 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
24260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24270 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
24280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24290 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
242a0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
242b0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
242c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
242d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
242e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
242f0 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
24300 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
24310 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24320 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
24330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24340 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
24350 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
24360 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f  Count != framewo
24370 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
24380 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20  ames.Count)..   
24390 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
243a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
243b0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
243c0 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  t("framework nam
243d0 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73  e count {0} does
243e0 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
24400 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61  atch platform na
24410 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66  me count {1}", f
24420 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
24430 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  es.Count,..     
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
24450 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
24460 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
24470 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24480 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
24490 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
244a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
244b0 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
244c0 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
244d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
244e0 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b  s.Count; index++
244f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24510 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
24520 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
24530 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rab the name of 
24540 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65  the framework (e
24550 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  .g. ".NETFramewo
24560 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rk")..          
24570 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
24580 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
24590 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67  he platform (e.g
245a0 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d  . "WindowsCE")..
245b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
245c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
245d0 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
245e0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d  eworkName = fram
245f0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b  eworkList.Names[
24600 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
24610 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24620 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66  platformName = f
24630 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
24640 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78  tformNames[index
24650 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
24660 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
24670 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
24680 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70  E: Grab the supp
24690 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f  orted versions o
246a0 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  f this particula
246b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
246c0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d     //       fram
246d0 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20  ework...        
246e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
246f0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
24700 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  ionList framewor
24710 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  kVersionList;...
24720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24730 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c   if (!frameworkL
24740 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79  ist.Versions.Try
24750 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24770 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
24780 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56  , out frameworkV
24790 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a  ersionList) ||..
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247b0 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65      (frameworkVe
247c0 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c  rsionList == nul
247d0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
247e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
247f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
24800 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
24810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24820 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
24830 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
24840 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
24850 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
24860 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
24870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
24890 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
248a0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
248b0 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248d0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
248e0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
248f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
24900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24910 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
24920 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
24930 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
24940 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
24970 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
24980 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
24990 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
249b0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
249c0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249e0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
249f0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
24a00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
24a30 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20  eFramework(..   
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
24a60 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
24a70 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
24a80 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f  platformName, wo
24ab0 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
24ac0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24af0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
24b00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
24b10 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
24b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
24b40 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
24b50 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b70 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
24b80 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75  ramework not fou
24b90 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22  nd, skipping..."
24ba0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24bc0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
24bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24be0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
24bf0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
24c00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d    if (callback =
24c30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c50 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c70 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
24c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
24ca0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
24cb0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
24cc0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ce0 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
24cf0 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77  e, clientData, w
24d00 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
24d10 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
24d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d30 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
24d40 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
24d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24da0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
24db0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24dc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24dd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
24de0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
24df0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
24e00 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
24e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24e60 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75  #region Per-Visu
24e70 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f  al Studio Versio
24e80 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  n Handling..    
24e90 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
24ea0 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  ic void Initiali
24eb0 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20  zeVsList(..     
24ec0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
24ed0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
24ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
24ef0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
24f00 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
24f10 20 20 20 20 20 20 20 72 65 66 20 56 73 4c 69 73         ref VsLis
24f20 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20  t vsList..      
24f30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24f50 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75  if (vsList == nu
24f60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24f70 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65       vsList = ne
24f80 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  w VsList();.... 
24f90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
24fa0 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d  sList.RootKey ==
24fb0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24fc0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52          vsList.R
24fd0 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ootKey = rootKey
24fe0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24ff0 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73   if (vsList.Vers
25000 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
25010 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
25030 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
25040 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
25050 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25060 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
25070 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
25080 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
25090 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20  ion.NoVs2005).. 
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f     vsList.Versio
250c0 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  ns.Add(new Versi
250d0 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 56 69  on(8, 0)); // Vi
250e0 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35  sual Studio 2005
250f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25100 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
25110 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
25120 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
25130 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20  n.NoVs2008)..   
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
25160 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
25170 28 39 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73 75  (9, 0)); // Visu
25180 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38 0d 0a  al Studio 2008..
25190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251a0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
251b0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
251c0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
251d0 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20  NoVs2010)..     
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
251f0 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  sList.Versions.A
25200 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
25210 30 2c 20 30 29 29 3b 2f 2f 20 56 69 73 75 61 6c  0, 0));// Visual
25220 20 53 74 75 64 69 6f 20 32 30 31 30 0d 0a 20 20   Studio 2010..  
25230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25240 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25250 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25260 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
252a0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
252b0 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56  tic bool HaveVsV
252c0 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
252d0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
252e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
252f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
25300 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
25310 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
25320 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
25330 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
25340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
25350 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
25360 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
25370 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25380 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
25390 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
253a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
253b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
253c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
253d0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
253e0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20  Name(vsVersion, 
253f0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
25400 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
25410 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
25420 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
25430 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
25440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25450 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
25460 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
25470 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
25480 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
254a0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
254b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
254c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
254d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
254e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
254f0 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ue = RegistryHel
25500 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20  per.GetValue(.. 
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c     key, "Install
25530 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  Dir", null, what
25540 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
25550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25560 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20   if (!(value is 
25570 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20  string))..      
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25590 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
255b0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
255c0 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b  = (string)value;
255d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
255e0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
255f0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
25600 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25620 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
25630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25640 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78  f (!Directory.Ex
25650 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29  ists(directory))
25660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25670 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25680 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
25690 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
256a0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
256b0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
256c0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
256d0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
256e0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
256f0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
25700 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25710 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61            "Visua
25720 6c 20 53 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75  l Studio {0} fou
25730 6e 64 20 69 6e 20 64 69 72 65 63 74 6f 72 79 20  nd in directory 
25740 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  {1}.",..        
25750 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
25760 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
25770 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69  ), ForDisplay(di
25780 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20  rectory)),..    
25790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
257b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
257c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
257d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
257e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
257f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25800 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
25840 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
25850 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
25860 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
25870 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
25880 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
25890 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e  ForEachVsVersion
258a0 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
258b0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
258c0 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
258d0 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73             VsLis
258e0 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20  t vsList,..     
258f0 20 20 20 20 20 20 20 56 69 73 75 61 6c 53 74 75         VisualStu
25900 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62  dioRegistryCallb
25910 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
25920 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
25930 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
25940 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
25950 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
25960 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
25970 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
25980 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
25990 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
259a0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
259b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
259c0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
259d0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
259e0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
259f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
25a00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25a10 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d   if (registry ==
25a20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25a30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25a40 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
25a50 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79  invalid registry
25a60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
25a70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
25a80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25aa0 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75  if (vsList == nu
25ab0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
25ac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25ad0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
25ae0 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a  alid VS list";..
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25b10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25b20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
25b30 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
25b40 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f  Key = vsList.Roo
25b50 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
25b60 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
25b70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25b80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25b90 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25ba0 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
25bb0 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
25bc0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
25bd0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
25be0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25bf0 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52     if (!Object.R
25c00 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
25c10 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72 79  ootKey, registry
25c20 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26  .CurrentUser) &&
25c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c40 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65    !Object.Refere
25c50 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
25c60 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
25c70 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20  lMachine))..    
25c80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25c90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25ca0 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
25cb0 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
25cc0 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25d10 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
25d20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25d30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25d40 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25d50 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73   "no VS versions
25d60 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
25d70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25d80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25d90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25da0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
25db0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
25dc0 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69   in vsList.Versi
25dd0 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
25de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25df0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
25e00 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
25e10 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
25e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25e30 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
25e40 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
25e50 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
25e60 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25e70 20 20 20 20 20 20 20 20 22 76 73 56 65 72 73 69          "vsVersi
25e80 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  on = {0}", ForDi
25e90 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
25ea0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
25eb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
25ec0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
25ed0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
25ee0 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 72 6f  HaveVsVersion(ro
25ef0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
25f00 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
25f10 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
25f20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
25f50 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
25f60 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f80 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
25f90 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
25fa0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69               "Vi
25fc0 73 75 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73  sual Studio vers
25fd0 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73  ion not found, s
25fe0 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20  kipping...",..  
25ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26000 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
26010 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
26020 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
26030 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
26040 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
26060 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
26070 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26080 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
26090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
260a0 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
260b0 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
260d0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
260e0 20 70 61 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74   package, client
260f0 44 61 74 61 2c 20 77 6f 77 36 34 2c 0d 0a 20 20  Data, wow64,..  
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26110 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69 73        throwOnMis
26120 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
26130 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
26140 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26150 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26160 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26170 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
26190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
261a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
261b0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
261c0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
261d0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
261e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
261f0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
26230 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66      #region Conf
26240 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65 20 48  iguration File H
26250 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
26260 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
26270 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
26280 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
26290 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
262a0 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72  tic bool AddDbPr
262b0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
262c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
262d0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
262e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
262f0 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
26300 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
26310 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
26320 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
26330 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
26340 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
26350 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
26360 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
26370 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
26380 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
26390 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
263a0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
263b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
263c0 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
263d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
263e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
263f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
26400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26410 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d      bool dirty =
26420 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
26430 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74       XmlDocument
26440 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20   document = new 
26450 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a  XmlDocument();..
26460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
26470 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57  cument.PreserveW
26480 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65  hitespace = true
26490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
264a0 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c  ocument.Load(fil
264b0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
264c0 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
264d0 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64  t addElement = d
264e0 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69  ocument.SelectSi
264f0 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20  ngleNode(..     
26500 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
26510 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f  g.Format(XPathFo
26520 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76  rAddElement, inv
26530 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45  ariant)) as XmlE
26540 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
26550 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c         if (addEl
26560 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
26570 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26590 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e  tring[] elementN
265a0 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  ames = {..      
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c    "system.data",
265d0 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74   "DbProviderFact
265e0 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20  ories"..        
265f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
26600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26610 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65    XmlElement pre
26620 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a  viousElement =..
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63      document.Doc
26650 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a  umentElement; /*
26660 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
26670 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
26680 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
26690 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65  ring elementName
266a0 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73   in elementNames
266b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
266c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
266d0 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
266e0 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45  ment = previousE
266f0 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  lement.SelectSin
26700 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61    elementName) a
26730 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
26740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26750 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
26760 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
26770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26780 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
267a0 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
267b0 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
267c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
267e0 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69  lementName, Stri
267f0 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
26820 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c  ement.AppendChil
26830 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26860 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
26870 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61  viousElement = a
26880 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20  ddElement;..    
26890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
268a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268b0 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f   addElement = do
268c0 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65  cument.CreateEle
268d0 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20  ment(..         
268e0 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22             "add"
268f0 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  , String.Empty);
26900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26910 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
26920 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28  ent.AppendChild(
26930 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a  addElement);....
26940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26950 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
26960 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26970 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26980 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
26990 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
269a0 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d  ribute("name"),.
269b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
269c0 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e       name, Strin
269d0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
269e0 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
269f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26a00 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
26a10 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e  .SetAttribute("n
26a20 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20  ame", name);..  
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
26a40 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
26a50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26a60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
26a70 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
26a80 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
26a90 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
26aa0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26ab0 20 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e          invarian
26ac0 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  t, StringCompari
26ad0 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
26ae0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
26b00 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
26b10 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74  ibute("invariant
26b20 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a  ", invariant);..
26b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b40 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
26b50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26b60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26b70 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
26b80 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
26b90 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74  ribute("descript
26ba0 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion"),..        
26bb0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63              desc
26bc0 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43  ription, StringC
26bd0 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
26be0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
26bf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26c00 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
26c10 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
26c20 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72  cription", descr
26c30 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  iption);..      
26c40 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
26c50 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
26c60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26c70 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c        string ful
26c80 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69  lTypeName = Stri
26c90 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
26ca0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
26cb0 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
26cc0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d   assemblyName);.
26cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
26ce0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
26cf0 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74  s(addElement.Get
26d00 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22  Attribute("type"
26d10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
26d20 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65          fullType
26d30 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  Name, StringComp
26d40 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29  arison.Ordinal))
26d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26d70 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41   addElement.SetA
26d80 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c  ttribute("type",
26d90 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d   fullTypeName);.
26da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26db0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
26dc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26de0 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66  (dirty || whatIf
26df0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e10 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e30 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
26e40 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
26e50 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
26e60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26e70 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
26e80 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
26e90 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
26ea0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ec0 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b   "addElement = {
26ed0 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
26ee0 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20  addElement)),.. 
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
26f10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
26f20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
26f30 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
26f40 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
26f50 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
26f60 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
26f70 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
26f80 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
26f90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26fa0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
26fb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
26fc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27010 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
27020 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
27030 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
27040 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
27050 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
27060 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  l RemoveDbProvid
27070 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
27080 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
27090 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
270a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
270b0 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
270c0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
270d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
270e0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
270f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
27100 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
27110 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
27120 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
27130 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
27140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  {..            b
27150 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73  ool dirty = fals
27160 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27170 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75  XmlDocument docu
27180 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f  ment = new XmlDo
27190 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  cument();....   
271a0 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
271b0 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65 73  t.PreserveWhites
271c0 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  pace = true;..  
271d0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
271e0 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65  nt.Load(fileName
271f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27200 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64    XmlElement add
27210 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  Element = docume
27220 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
27230 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ode(..          
27240 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72        String.For
27250 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64 64 45  mat(XPathForAddE
27260 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
27270 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
27280 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
27290 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74    if (addElement
272a0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
272b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
272c0 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
272d0 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
272e0 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45  RemoveChild(addE
272f0 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
27300 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
27310 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
27320 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27330 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
27340 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d   removeElement =
27350 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
27360 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
27370 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
27380 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68  ing.Format(XPath
27390 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  ForRemoveElement
273a0 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73  , invariant)) as
273b0 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
273c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
273d0 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 21 3d  removeElement !=
273e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
273f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27400 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45 6c 65         removeEle
27410 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e  ment.ParentNode.
27420 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65 6d 6f  RemoveChild(remo
27430 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  veElement);..   
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
27450 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
27460 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27470 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72           if (dir
27480 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20  ty || whatIf).. 
27490 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
274b0 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
274c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
274e0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
274f0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
27520 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
27530 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
27540 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
27560 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 2c 20  dElement = {0}, 
27570 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20  removeElement = 
27580 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
275a0 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c 65  orDisplay(addEle
275b0 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70 6c 61  ment), ForDispla
275c0 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29  y(removeElement)
275d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
275e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
275f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
27600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27610 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27630 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66   document.Save(f
27640 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
27650 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
27660 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
27670 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27680 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27690 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
276a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
276b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
27700 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
27710 6f 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76  ol ProcessDbProv
27720 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
27730 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27740 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
27750 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
27760 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
27770 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
27780 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
27790 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
277a0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
277b0 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
277c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
277d0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
277e0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
277f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
27800 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
27810 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
27820 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
27830 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
27840 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
27850 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
27860 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27870 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
27880 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
27890 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
278a0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
278b0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
278c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
278d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
278e0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
278f0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
27900 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
27910 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
27920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27930 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
27940 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
27970 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e 66 69   framework confi
27980 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  g callback data"
27990 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
279a0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
279b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
279c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
279d0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
279e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
279f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27a00 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64  n RemoveDbProvid
27a10 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
27a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a30 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
27a40 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ant, whatIf, ver
27a50 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
27a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27a70 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
27a80 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
27a90 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69 64       AddDbProvid
27aa0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
27ad0 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
27ae0 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
27af0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27b00 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e         assemblyN
27b10 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
27b20 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
27b30 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
27b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27b50 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
27b60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27b80 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f  turn RemoveDbPro
27b90 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
27bc0 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20  ariant, whatIf, 
27bd0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
27be0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
27bf0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
27c00 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
27c10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
27c20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
27c30 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
27c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27c90 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
27ca0 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69  y Folders Handli
27cb0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
27cc0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
27cd0 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  g GetAssemblyFol
27ce0 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
27cf0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
27d00 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
27d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
27d20 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
27d30 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
27d40 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
27d50 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
27d60 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
27d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
27d80 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
27d90 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27da0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
27db0 20 54 68 69 73 20 72 65 67 69 73 74 72 79 20 6b   This registry k
27dc0 65 79 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c  ey appears to al
27dd0 77 61 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f  ways be 32-bit o
27de0 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nly..           
27df0 20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20   //       (i.e. 
27e00 70 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65  probably because
27e10 20 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   it is only used
27e20 20 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20   by Visual..    
27e30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
27e40 20 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69   Studio, which i
27e50 73 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61  s currently alwa
27e60 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e  ys 32-bit only).
27e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
27e90 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
27ea0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
27eb0 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
27ec0 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
27ed0 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
27ee0 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
27ef0 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f  \{3}\\AssemblyFo
27f00 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20  ldersEx" :..    
27f10 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
27f20 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
27f30 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79  \\v{2}\\Assembly
27f40 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20  FoldersEx";.... 
27f50 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27f60 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
27f70 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b  format, GetRootK
27f80 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 0d 0a  eyName(wow64),..
27f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fa0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
27fb0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
27fc0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
27fd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
27fe0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28030 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
28040 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
28050 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ToAssemblyFolder
28060 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
28070 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
28080 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
28090 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
280a0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
280b0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
280c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
280d0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
280e0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
280f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
28100 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
28110 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
28120 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
28130 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
28140 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
28150 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
28160 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
28170 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
28180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
28190 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
281a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
281b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
281c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
281d0 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
281e0 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
281f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
28200 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
28210 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
28220 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
28230 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  e, wow64);....  
28240 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
28250 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
28260 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
28270 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
28280 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28290 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
282a0 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77  keyName, true, w
282b0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
282c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
282d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
282e0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
282f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28300 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28310 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
28320 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
28330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28340 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
28350 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
28360 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
28370 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28380 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
28390 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
283a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
283b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
283c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
283d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
283e0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
283f0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
28400 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
28410 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
28420 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
28430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28440 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
28450 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
28460 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
28470 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28480 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
28490 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
284d0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
284e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
284f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28500 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
28510 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
28520 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28540 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
28550 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
28560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28570 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
28580 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
28590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285b0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
285c0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e 75        subKey, nu
285f0 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 77  ll, directory, w
28600 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
28610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28620 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28630 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28640 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
28650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28660 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
286b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
286c0 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
286d0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
286e0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
286f0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
28700 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
28710 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28720 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
28730 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
28740 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
28750 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
28760 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
28770 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
28780 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
28790 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
287a0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
287b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
287c0 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
287d0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
287e0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
287f0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28800 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
28810 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
28820 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
28830 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
28840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
28850 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
28860 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
28870 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
28880 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
28890 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
288a0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
288b0 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29  formName, wow64)
288c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
288d0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
288e0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
288f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
28900 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
28910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
28920 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
28930 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
28940 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
28950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28960 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
28970 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
28980 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289a0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
289b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
289c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289d0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
289e0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
289f0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a10 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
28a20 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
28a30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28a40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28a50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a70 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
28a80 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28aa0 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
28ab0 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
28ac0 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
28ad0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
28ae0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28af0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
28b00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
28b10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28b60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
28b70 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
28b80 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
28b90 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
28ba0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
28bb0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
28bc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
28bd0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
28be0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
28bf0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
28c00 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
28c10 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
28c20 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
28c30 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
28c40 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
28c50 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
28c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28c70 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
28c80 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
28c90 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
28ca0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
28cb0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
28cc0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
28cd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
28ce0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
28d00 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
28d10 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
28d20 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
28d30 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
28d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28d50 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
28d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d80 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
28d90 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62   framework callb
28da0 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
28db0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28dc0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
28dd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
28de0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
28df0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
28e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28e10 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
28e20 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
28e30 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
28e40 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
28e50 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
28e60 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
28e70 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
28e80 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28e90 20 20 20 20 20 20 20 20 4c 65 67 61 63 79 50 72          LegacyPr
28ea0 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34  ojectName, wow64
28eb0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
28ec0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
28ee0 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
28f00 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  dToAssemblyFolde
28f10 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
28f20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
28f30 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
28f40 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
28f50 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
28f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f70 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d        ProjectNam
28f80 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34  e, pair.X, wow64
28f90 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
28fa0 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
28fb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
28fc0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
28fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
29000 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
29010 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29020 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
29030 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
29040 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
29050 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c      ProjectName,
29080 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
29090 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
290a0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
290c0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
290d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
290e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
290f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
29100 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29150 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
29160 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64  sual Studio Hand
29170 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
29180 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
29190 69 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79  ing GetVsRootKey
291a0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
291b0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
291c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
291d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
291e0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
291f0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c  ng.Format("{0}\\
29200 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61  Microsoft\\Visua
29210 6c 53 74 75 64 69 6f 22 2c 0d 0a 20 20 20 20 20  lStudio",..     
29220 20 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f             GetRo
29230 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77 36 34 29  otKeyName(wow64)
29240 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
29250 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
292b0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
292c0 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d  g GetVsKeyName(.
292d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
292e0 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
292f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
29300 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
29310 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
29320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
29330 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
29340 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
29360 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
29370 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
29380 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
29390 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c            "{0}\\
293a0 7b 31 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b  {1}", GetVsRootK
293b0 65 79 4e 61 6d 65 28 77 6f 77 36 34 29 2c 20 76  eyName(wow64), v
293c0 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20  sVersion);..    
293d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
293e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
293f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29430 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
29440 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 53  al Studio Data S
29450 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ource Handling..
29460 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29470 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
29480 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
29490 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
294a0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
294b0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
294c0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
294d0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
294e0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
294f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29500 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
29510 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
29520 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
29530 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
29540 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
29550 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
29560 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
29570 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29580 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
29590 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
295a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
295b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
295c0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
295d0 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
295e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
295f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
29600 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29610 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
29620 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
29630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29640 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29650 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
29660 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
29670 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29680 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
29690 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
296a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
296b0 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
296c0 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 77  ame(vsVersion, w
296d0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
296e0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
296f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
29700 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
29710 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
29740 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
29750 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
29760 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29780 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
297b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
297c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
297d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297e0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
297f0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
29800 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
29810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29820 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
29830 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
29840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29850 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
29860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29870 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29880 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
29890 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
298a0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
298b0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
298c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
298d0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
298e0 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
298f0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
29900 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
29910 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29930 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
29940 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29970 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
29980 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
29990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299a0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
299b0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
299c0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
299d0 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299f0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
29a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
29a20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
29a30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
29a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a50 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
29a60 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75  istryKey dataSou
29a70 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  rceKey =..      
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
29aa0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
29ab0 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
29ae0 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
29af0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
29b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
29b20 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
29b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29b40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b60 20 69 66 20 28 64 61 74 61 53 6f 75 72 63 65 4b   if (dataSourceK
29b70 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
29bc0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
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 20 20 22 63 6f 75              "cou
29bf0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
29c00 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
29c10 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20  \{1}", key,..   
29c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c30 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
29c40 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
29c50 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
29c60 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
29c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
29c90 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
29ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
29cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
29cd0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
29ce0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
29cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d00 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c    dataSourceKey,
29d10 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f   null, String.Fo
29d20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d40 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73 65     "{0} Database
29d50 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e   File", ProjectN
29d60 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ame), whatIf,.. 
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d80 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
29d90 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
29da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29db0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
29dc0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
29dd0 53 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20  SourceKey,..    
29de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29df0 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
29e00 6f 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e  ormat("Supportin
29e10 67 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22  gProviders\\{0}"
29e20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
29e40 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
29e50 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
29e60 73 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  sIdFormat)),..  
29e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e80 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
29e90 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
29ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29eb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
29ec0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
29ed0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29ee0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
29ef0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
29f00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29f50 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
29f60 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
29f70 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
29f80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
29f90 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
29fa0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
29fb0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
29fc0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
29fd0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
29fe0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
29ff0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2a000 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a010 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2a020 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2a030 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2a040 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
2a050 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
2a060 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2a070 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
2a080 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
2a090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0b0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2a0c0 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a0e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2a0f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a100 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
2a110 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
2a120 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a140 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2a150 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
2a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a170 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2a180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a190 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a1a0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
2a1b0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
2a1c0 6f 6e 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  on, wow64);.... 
2a1d0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2a1e0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2a1f0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2a200 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2a210 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2a220 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2a230 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2a240 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2a250 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2a260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2a270 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2a280 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a290 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a2a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a2b0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2a2c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2a2e0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2a2f0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2a300 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2a320 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
2a330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2a350 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2a360 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a370 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
2a380 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
2a390 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
2a3a0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2a3b0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3d0 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65  key, "DataSource
2a3e0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
2a3f0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2a400 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a420 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
2a430 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2a440 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2a470 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a490 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2a4a0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2a4b0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
2a4c0 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20  ataSources",..  
2a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4e0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
2a4f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a510 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a540 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2a550 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
2a560 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
2a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a580 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
2a590 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
2a5a0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2a5b0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2a5d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2a600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a610 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2a620 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a630 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a680 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a690 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2a6a0 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  sVsDataSource(..
2a6b0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2a6c0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2a6d0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2a6e0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
2a6f0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2a700 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
2a710 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a720 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2a730 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2a740 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2a750 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
2a760 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2a770 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a780 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
2a790 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
2a7a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2a7b0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2a7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2a7d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2a7e0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2a7f0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2a800 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2a820 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2a830 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2a840 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2a850 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2a860 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a870 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
2a880 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
2a890 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
2a8a0 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
2a8b0 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
2a8c0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
2a8d0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
2a8e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2a8f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2a900 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
2a910 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a930 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2a940 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a950 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a960 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
2a970 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a980 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
2a990 64 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  ddVsDataSource(.
2a9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a9b0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
2a9c0 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
2a9d0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2a9e0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2aa00 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2aa10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2aa20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2aa30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2aa50 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  rn RemoveVsDataS
2aa60 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2aa80 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2aa90 70 61 63 6b 61 67 65 2c 20 77 6f 77 36 34 2c 20  package, wow64, 
2aaa0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aac0 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2aad0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2aae0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2aaf0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2ab00 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2ab10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2ab60 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
2ab70 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65  dio Data Provide
2ab80 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  r Handling..    
2ab90 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2aba0 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74  ic bool AddVsDat
2abb0 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
2abc0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2abd0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2abe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2abf0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2ac00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
2ac10 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ac30 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
2ac40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2ac50 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2ac60 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
2ac70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2ac80 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
2ac90 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2aca0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2acb0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2acc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2acd0 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
2ace0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2acf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad00 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ad10 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
2ad20 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
2ad30 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2ad40 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2ad50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ad60 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
2ad70 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ad80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ad90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ada0 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
2adb0 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
2adc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2add0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2ade0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2adf0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
2ae00 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
2ae10 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34  vsVersion, wow64
2ae20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ae30 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2ae40 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2ae50 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2ae60 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ae80 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2ae90 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
2aea0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2aeb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2aec0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2aed0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2aee0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af00 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2af10 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af30 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2af40 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2af50 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
2af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af70 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2af80 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
2af90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2afa0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2afc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2afd0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2afe0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
2aff0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2b000 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b020 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
2b030 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
2b040 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
2b050 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2b060 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b070 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2b080 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
2b090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b0a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0c0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2b0d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2b100 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2b110 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
2b120 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
2b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b140 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
2b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b160 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2b170 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2b180 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2b1b0 69 73 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f  istryKey dataPro
2b1c0 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20  viderKey =..    
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1e0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2b1f0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2b200 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b220 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2b230 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
2b240 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2b250 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
2b260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b270 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2b280 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2b290 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2b0 20 20 20 20 20 69 66 20 28 64 61 74 61 50 72 6f       if (dataPro
2b2c0 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c  viderKey == null
2b2d0 29 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 7b 0d 0a 20 20             {..  
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b300 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2b310 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2b320 0d 0a 20 20 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 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
2b350 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
2b360 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
2b370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
2b3a0 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
2b3b0 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
2b3c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b420 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2b430 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
2b440 20 20 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 64 61 74 61 50 72            dataPr
2b460 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c  oviderKey, null,
2b470 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68   Description, wh
2b480 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4a0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4c0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2b4d0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
2b4e0 0d 0a 20 20 20 20 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 64 61                da
2b500 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
2b510 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20  InvariantName", 
2b520 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a  InvariantName,..
2b530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b540 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2b550 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2b560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b570 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2b580 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2b590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2b5b0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2b5c0 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20  "Technology",.. 
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5e0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
2b5f0 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c  ge.AdoNetTechnol
2b600 6f 67 79 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ogyId.ToString(V
2b610 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
2b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b630 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2b640 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b660 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2b670 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
2b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b690 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
2b6a0 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 43 6f  ProviderKey, "Co
2b6b0 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e 61 6d  deBase", fileNam
2b6c0 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  e, whatIf,..    
2b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b6e0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
2b6f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b700 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2b710 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
2b720 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b740 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
2b750 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65 72 76  ey, "FactoryServ
2b760 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ice",..         
2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b780 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69     package.Servi
2b790 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
2b7a0 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
2b7b0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7d0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
2b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2b800 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2b810 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
2b820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2b840 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
2b850 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e  \\DataConnection
2b860 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20  UIControl",..   
2b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b880 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2b890 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8b0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2b8c0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2b8d0 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
2b8e0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b900 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
2b910 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f  s\\DataConnectio
2b920 6e 50 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20  nProperties",.. 
2b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b940 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2b950 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
2b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b970 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2b980 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2b990 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
2b9a0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b9c0 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
2b9d0 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74  cts\\DataConnect
2b9e0 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77 68 61  ionSupport", wha
2b9f0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba10 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
2ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba30 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2ba40 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2ba50 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
2ba60 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba80 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
2ba90 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53 75  ts\\DataObjectSu
2baa0 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
2bab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2bad0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2baf0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2bb00 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
2bb10 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
2bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb30 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
2bb40 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
2bb50 61 74 61 56 69 65 77 53 75 70 70 6f 72 74 22 2c  ataViewSupport",
2bb60 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb80 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
2bb90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bba0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2bbb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2bbc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2bbd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2bbe0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
2bbf0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2bc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2bc50 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2bc60 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72  l RemoveVsDataPr
2bc70 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
2bc80 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2bc90 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
2bca0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2bcb0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
2bcc0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2bcd0 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2bce0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2bcf0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2bd00 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2bd20 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2bd30 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2bd40 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2bd50 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2bd60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2bd70 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
2bd80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2bd90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2bda0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2bdb0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
2bdc0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
2bdd0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2bde0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2bdf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2be00 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2be10 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2be20 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77 36 34 29  sVersion, wow64)
2be30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2be40 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2be50 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2be60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2be70 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2be90 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2bea0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
2beb0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2bec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bed0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
2bee0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2bef0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf10 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
2bf20 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2bf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf40 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2bf50 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2bf60 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
2bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf80 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2bf90 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
2bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2bfb0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2bfd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bfe0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2bff0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
2c000 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
2c010 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
2c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c030 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61        key, "Data
2c040 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65  Providers", true
2c050 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2c060 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2c070 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c080 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2c090 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c0b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0d0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2c0e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c100 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2c110 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2c120 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69  : {0}\\DataProvi
2c130 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ders",..        
2c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c150 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2c180 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2c190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1b0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2c1c0 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
2c1d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c1e0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
2c1f0 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50  y, package.DataP
2c200 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
2c210 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
2c220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c230 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2c240 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2c250 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2c260 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2c270 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2c280 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2c290 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2c2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2c2f0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2c300 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44   bool ProcessVsD
2c310 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
2c320 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2c330 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2c340 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2c350 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
2c360 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2c370 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
2c380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
2c390 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
2c3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2c3b0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2c3c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
2c3d0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
2c3e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2c3f0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2c400 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2c410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2c420 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2c430 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2c440 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2c450 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
2c460 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
2c470 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
2c480 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
2c490 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
2c4a0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
2c4b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c4c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c4d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2c4e0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
2c4f0 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2c510 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2c520 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2c530 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
2c540 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
2c550 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2c560 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
2c570 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
2c580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c590 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
2c5a0 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
2c5b0 2c 20 70 61 69 72 2e 58 2c 20 77 6f 77 36 34 2c  , pair.X, wow64,
2c5c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2c5e0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
2c5f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2c600 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2c610 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2c620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c630 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
2c640 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  eVsDataProvider(
2c650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c660 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
2c670 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
2c680 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  e, wow64, whatIf
2c690 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
2c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6b0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2c6c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c6d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2c6e0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2c6f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2c740 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2c750 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 50 61  Visual Studio Pa
2c760 63 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ckage Handling..
2c770 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2c780 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74  static void Init
2c790 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28  ializeVsPackage(
2c7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2c7b0 66 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67  f Package packag
2c7c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
2c7d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2c7e0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
2c7f0 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
2c800 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
2c820 63 6b 61 67 65 20 3d 20 6e 65 77 20 50 61 63 6b  ckage = new Pack
2c830 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  age();....      
2c840 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2c850 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  e.AdoNetTechnolo
2c860 67 79 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  gyId = new Guid(
2c870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c880 20 20 20 20 20 20 22 37 37 41 42 39 41 39 44 2d        "77AB9A9D-
2c890 37 38 42 39 2d 34 42 41 37 2d 39 31 41 43 2d 38  78B9-4BA7-91AC-8
2c8a0 37 33 46 35 33 33 38 46 31 44 32 22 29 3b 0d 0a  73F5338F1D2");..
2c8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c8c0 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
2c8d0 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  eId = new Guid(.
2c8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c8f0 20 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30       "DCBE6C8D-0
2c900 45 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38  E57-4099-A183-98
2c910 46 46 37 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d  FF74C64D9C");...
2c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c930 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
2c940 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
2c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c960 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45      "DCBE6C8D-0E
2c970 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46  57-4099-A183-98F
2c980 46 37 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a  F74C64D9D");....
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9a0 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72  package.DataSour
2c9b0 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  ceId = new Guid(
2c9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c9d0 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d        "0EBAAB6E-
2c9e0 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43  CA80-4B4A-8DDF-C
2c9f0 42 45 36 42 46 30 35 38 43 37 31 22 29 3b 0d 0a  BE6BF058C71");..
2ca00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca10 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72    package.DataPr
2ca20 6f 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47  oviderId = new G
2ca30 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
2ca40 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41            "0EBAA
2ca50 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44  B6E-CA80-4B4A-8D
2ca60 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 30 22  DF-CBE6BF058C70"
2ca70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2ca80 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2ca90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2caa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2cae0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2caf0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
2cb00 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20  ddVsPackage(..  
2cb10 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2cb20 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2cb30 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2cb40 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
2cb50 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2cb60 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
2cb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2cb80 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
2cb90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2cba0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2cbb0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2cbc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2cbd0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2cbe0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2cbf0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2cc00 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2cc10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cc20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
2cc30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2cc40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cc50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2cc60 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
2cc70 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
2cc80 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2cc90 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2cca0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ccb0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
2ccc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ccd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cce0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2ccf0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
2cd00 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
2cd10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2cd20 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2cd30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cd40 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2cd50 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
2cd60 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 77 6f 77  e(vsVersion, wow
2cd70 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
2cd80 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2cd90 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
2cda0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2cdb0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
2cde0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
2cdf0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2ce00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ce20 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2ce40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ce50 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2ce60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce80 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2ce90 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
2cea0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cec0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2ced0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cef0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cf20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
2cf30 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
2cf40 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2cf50 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2cf60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf70 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50           key, "P
2cf80 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20  ackages", true, 
2cf90 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
2cfa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2cfb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2cfc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
2cfd0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2d010 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2d020 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d040 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
2d050 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
2d060 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d  {0}\\Packages",.
2d070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d080 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2d090 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d0b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2d0e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d100 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41 52 4e    // NOTE: *WARN
2d110 49 4e 47 2a 20 43 68 61 6e 67 69 6e 67 20 61 6e  ING* Changing an
2d120 79 20 6f 66 20 74 68 65 73 65 20 76 61 6c 75 65  y of these value
2d130 73 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20  s will likely.. 
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 71 75     //       requ
2d160 69 72 65 20 61 20 6e 65 77 20 22 70 61 63 6b 61  ire a new "packa
2d170 67 65 20 6c 6f 61 64 20 6b 65 79 22 20 28 50 4c  ge load key" (PL
2d180 4b 29 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  K) to be..      
2d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d1a0 20 20 20 20 20 20 20 67 65 6e 65 72 61 74 65 64         generated
2d1b0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 6f   in order to pro
2d1c0 70 65 72 6c 79 20 73 75 70 70 6f 72 74 20 6c 6f  perly support lo
2d1d0 61 64 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  ading the..     
2d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d1f0 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20  /       package 
2d200 69 6e 74 6f 20 56 69 73 75 61 6c 20 53 74 75 64  into Visual Stud
2d210 69 6f 20 32 30 30 38 20 61 6e 64 20 65 61 72 6c  io 2008 and earl
2d220 69 65 72 20 77 69 74 68 6f 75 74 0d 0a 20 20 20  ier without..   
2d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d240 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6d 61   //       the ma
2d250 74 63 68 69 6e 67 20 56 69 73 75 61 6c 20 53 74  tching Visual St
2d260 75 64 69 6f 20 53 44 4b 20 62 65 69 6e 67 20 69  udio SDK being i
2d270 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  nstalled...     
2d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d290 2f 20 20 20 20 20 20 20 50 6c 65 61 73 65 20 72  /       Please r
2d2a0 65 66 65 72 20 74 6f 20 74 68 65 20 22 53 51 4c  efer to the "SQL
2d2b0 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 70 6c 6b  ite.Designer\plk
2d2c0 2e 74 78 74 22 20 66 69 6c 65 0d 0a 20 20 20 20  .txt" file..    
2d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2e0 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 74 68 65  //       for the
2d2f0 20 65 78 69 73 74 69 6e 67 20 6f 66 66 69 63 69   existing offici
2d300 61 6c 20 76 61 6c 75 65 73 20 61 6e 64 20 75 70  al values and up
2d310 64 61 74 65 20 74 68 65 6d 20 69 66 0d 0a 20 20  date them if..  
2d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d330 20 20 2f 2f 20 20 20 20 20 20 20 6e 65 63 65 73    //       neces
2d340 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 74 68 65  sary.  Also, the
2d350 20 6e 65 77 6c 79 20 67 65 6e 65 72 61 74 65 64   newly generated
2d360 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 0d 0a 20   package load.. 
2d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d380 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20     //       key 
2d390 69 74 73 65 6c 66 2c 20 77 68 69 63 68 20 69 73  itself, which is
2d3a0 20 61 20 31 32 38 20 63 68 61 72 61 63 74 65 72   a 128 character
2d3b0 20 61 6c 70 68 61 6e 75 6d 65 72 69 63 0d 0a 20   alphanumeric.. 
2d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3d0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69     //       stri
2d3e0 6e 67 2c 20 6d 75 73 74 20 62 65 20 70 6c 61 63  ng, must be plac
2d3f0 65 64 20 69 6e 20 74 68 65 20 72 65 73 6f 75 72  ed in the resour
2d400 63 65 20 73 74 72 69 6e 67 20 6e 61 6d 65 64 0d  ce string named.
2d410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d420 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 34       //       "4
2d430 30 30 22 20 69 6e 20 74 68 65 20 22 53 51 4c 69  00" in the "SQLi
2d440 74 65 2e 44 65 73 69 67 6e 65 72 5c 56 53 50 61  te.Designer\VSPa
2d450 63 6b 61 67 65 2e 72 65 73 78 22 20 66 69 6c 65  ckage.resx" file
2d460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d470 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
2d480 6e 64 20 74 68 65 6e 20 74 68 65 20 64 65 73 69  nd then the desi
2d490 67 6e 65 72 20 61 73 73 65 6d 62 6c 79 20 69 74  gner assembly it
2d4a0 73 65 6c 66 20 6d 75 73 74 20 62 65 0d 0a 20 20  self must be..  
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4c0 20 20 2f 2f 20 20 20 20 20 20 20 72 65 63 6f 6d    //       recom
2d4d0 70 69 6c 65 64 2e 20 20 41 73 20 6f 66 20 74 68  piled.  As of th
2d4e0 69 73 20 77 72 69 74 69 6e 67 20 28 69 6e 20 46  is writing (in F
2d4f0 65 62 72 75 61 72 79 20 32 30 31 32 29 2c 0d 0a  ebruary 2012),..
2d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d510 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
2d520 20 66 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c 20 69   following URL i
2d530 73 20 74 68 65 20 70 72 6f 70 65 72 20 70 6c 61  s the proper pla
2d540 63 65 20 74 6f 20 67 65 6e 65 72 61 74 65 0d 0a  ce to generate..
2d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d560 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63      //       pac
2d570 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 73 3a 0d  kage load keys:.
2d580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d590 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d5b0 20 20 20 20 20 20 68 74 74 70 3a 2f 2f 6d 73 64        http://msd
2d5c0 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f  n.microsoft.com/
2d5d0 65 6e 2d 75 73 2f 76 73 74 75 64 69 6f 2f 63 63  en-us/vstudio/cc
2d5e0 36 35 35 37 39 35 0d 0a 20 20 20 20 20 20 20 20  655795..        
2d5f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d610 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2d620 65 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61  egistryKey packa
2d630 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  geKey =..       
2d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d650 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2d660 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
2d670 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
2d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d690 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
2d6a0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
2d6b0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
2d6c0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d6e0 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
2d6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d700 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d710 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2d720 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e  (packageKey == n
2d730 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d770 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
2d780 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7a0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
2d7b0 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
2d7c0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
2d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d7f0 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61   key, package.Pa
2d800 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
2d810 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
2d820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d840 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d860 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d880 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2d890 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
2d8a0 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  eKey, null,..   
2d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8c0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2d8d0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
2d8e0 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50  gner Package", P
2d8f0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
2d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d910 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
2d920 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
2d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d940 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2d950 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
2d960 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73  ackageKey, "Clas
2d970 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
2d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d990 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
2d9a0 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22  r.SQLitePackage"
2d9b0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2d9c0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2d9e0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2d9f0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
2da00 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a  y, "CodeBase",..
2da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
2da30 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
2da40 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da60 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2da70 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
2da80 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30  geKey, "ID", 400
2da90 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dab0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2dac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dad0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2dae0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2daf0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2db00 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22  "InprocServer32"
2db10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
2db30 61 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e 76 69  ath.Combine(Envi
2db40 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69  ronment.SystemDi
2db50 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
2db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db70 20 20 20 20 20 20 20 20 20 20 22 6d 73 63 6f 72            "mscor
2db80 65 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74 49 66  ee.dll"), whatIf
2db90 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
2dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbb0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2dbc0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
2dbd0 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70  ackageKey, "Comp
2dbe0 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  anyName",..     
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73         "http://s
2dc10 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74  ystem.data.sqlit
2dc20 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c  e.org/", whatIf,
2dc30 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc50 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2dc60 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
2dc70 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64  ckageKey, "MinEd
2dc80 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  ition",..       
2dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dca0 20 20 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c       "standard",
2dcb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2dcc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2dce0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2dcf0 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
2dd00 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c  , "ProductName",
2dd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
2dd30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
2dd40 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67   Designer Packag
2dd50 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29  e", ProjectName)
2dd60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
2dd80 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
2dd90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dda0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2ddb0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2ddc0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
2ddd0 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22  "ProductVersion"
2dde0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2de00 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65  1.0", whatIf, ve
2de10 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
2de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de30 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2de40 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f  gistryKey toolbo
2de50 78 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20  xKey =..        
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de70 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2de80 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2de90 4b 65 79 28 70 61 63 6b 61 67 65 4b 65 79 2c 0d  Key(packageKey,.
2dea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dec0 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74   "Toolbox", what
2ded0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
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 7b 0d 0a 20 20 20 20 20 20         {..      
2df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df10 20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f        if (toolbo
2df20 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  xKey == null).. 
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 7b 0d 0a 20 20             {..  
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2df70 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
2df80 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfa0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2dfb0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
2dfc0 73 74 72 79 20 6b 65 79 3a 20 22 20 2b 0d 0a 20  stry key: " +.. 
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dff0 20 20 20 22 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78     "{0}\\Toolbox
2e000 22 2c 20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d  ", packageKey);.
2e010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e030 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e060 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2e080 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2e090 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
2e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e0b0 20 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78           toolbox
2e0c0 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49 74  Key, "Default It
2e0d0 65 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66 2c  ems", 3, whatIf,
2e0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e100 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
2e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e120 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2e130 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e160 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2e170 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
2e180 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2e190 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1b0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65          key, "Me
2e1c0 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  nus", true, what
2e1d0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e200 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2e210 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e240 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e250 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2e260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2e280 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2e290 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2e2a0 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20  \Menus",..      
2e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2c0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
2e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2e2f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2e300 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e320 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
2e330 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
2e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e350 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
2e360 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
2e370 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2e380 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
2e3a0 20 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74 49   1000, 3", whatI
2e3b0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2e3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e3d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2e3e0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2e3f0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
2e400 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2e410 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e430 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72         key, "Ser
2e440 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  vices", true, wh
2e450 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2e460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e480 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2e490 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2e4d0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2e4e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2e510 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2e520 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20  }\\Services",.. 
2e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e540 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2e550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e560 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2e570 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2e590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e5a0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2e5b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
2e5c0 65 72 76 69 63 65 4b 65 79 20 3d 0d 0a 20 20 20  erviceKey =..   
2e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5e0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2e5f0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
2e600 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20  bKey(subKey,..  
2e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e620 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
2e630 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
2e640 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2e650 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e670 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29         verbose))
2e680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e690 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6b0 20 69 66 20 28 73 65 72 76 69 63 65 4b 65 79 20   if (serviceKey 
2e6c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e700 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2e710 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
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 20 20 22 63 6f 75 6c 64 20           "could 
2e740 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
2e750 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
2e760 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
2e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e780 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67       key, packag
2e790 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
2e7a0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2e7b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e7d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e7f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e810 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2e820 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65  lper.SetValue(se
2e830 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d  rviceKey, null,.
2e840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e850 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
2e860 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
2e870 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
2e880 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
2e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e8a0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
2e8b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2e8d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
2e8e0 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65  tValue(serviceKe
2e8f0 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20  y, "Name",..    
2e900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e910 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
2e920 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67  ormat("{0} Desig
2e930 6e 65 72 20 53 65 72 76 69 63 65 22 2c 20 50 72  ner Service", Pr
2e940 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20  ojectName),..   
2e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e960 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
2e970 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
2e980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e990 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2e9a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2e9b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e9c0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2e9d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2e9e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2ea30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
2ea40 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
2ea50 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  oveVsPackage(.. 
2ea60 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2ea70 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2ea80 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2ea90 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
2eaa0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2eab0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2eac0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2ead0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2eae0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2eaf0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2eb00 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2eb10 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2eb20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2eb30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2eb40 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
2eb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2eb60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2eb70 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
2eb80 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
2eb90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2ebb0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2ebc0 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
2ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ebe0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2ebf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ec00 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
2ec10 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
2ec20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ec30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2ec40 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
2ec50 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
2ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2ec70 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2ec80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2ec90 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2eca0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
2ecb0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
2ecc0 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
2ecd0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2ece0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2ecf0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2ed00 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2ed10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2ed30 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2ed40 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2ed50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ed60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed70 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2ed80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ed90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2eda0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2edb0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2edc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2edd0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2ede0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2edf0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2ee00 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2ee20 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
2ee30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ee40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2ee50 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2ee60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ee70 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2ee80 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2ee90 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2eea0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2eeb0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2eed0 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
2eee0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
2eef0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2ef00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ef20 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
2ef30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ef40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef60 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2ef70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef90 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
2efa0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
2efb0 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
2efc0 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
2efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2efe0 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
2eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f000 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2f010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f020 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
2f040 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
2f050 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
2f060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f070 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
2f080 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
2f090 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
2f0a0 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0c0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
2f0d0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
2f0e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f0f0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2f100 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2f110 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2f120 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2f130 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2f150 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
2f160 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2f170 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2f180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2f1a0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
2f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f1c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1e0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
2f1f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
2f220 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
2f230 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
2f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f250 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
2f260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2f270 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f280 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f2b0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2f2c0 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61  yHelper.DeleteVa
2f2d0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2f2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
2f2f0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
2f300 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
2f310 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2f320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f330 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69         throwOnMi
2f340 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
2f350 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2f360 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
2f380 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2f390 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
2f3a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2f3b0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2f3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3d0 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
2f3e0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
2f3f0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
2f400 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
2f430 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f440 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f460 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f470 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f490 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
2f4a0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
2f4b0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
2f4c0 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
2f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f500 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f510 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f520 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f540 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
2f550 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
2f560 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
2f580 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65  bKey, package.Se
2f590 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
2f5a0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5c0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
2f5d0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
2f5e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2f5f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f600 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2f610 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2f620 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2f630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f670 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2f680 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2f690 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63  ool ProcessVsPac
2f6a0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
2f6b0 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
2f6c0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2f6d0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2f6e0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2f6f0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
2f700 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
2f710 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
2f720 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
2f730 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2f740 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2f750 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2f760 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2f770 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2f780 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2f790 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2f7a0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2f7b0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2f7c0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2f7d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
2f7e0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2f7f0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
2f800 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
2f810 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
2f820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f830 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
2f840 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2f850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f860 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2f870 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
2f880 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
2f890 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2f8a0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2f8b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2f8c0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
2f8d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f8f0 65 74 75 72 6e 20 41 64 64 56 73 50 61 63 6b 61  eturn AddVsPacka
2f900 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
2f910 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2f920 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63  , vsVersion, pac
2f930 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20 77 6f  kage, pair.X, wo
2f940 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
2f970 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
2f980 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2f990 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
2f9a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f9b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
2f9c0 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d  emoveVsPackage(.
2f9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f9e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
2f9f0 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
2fa00 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
2fa10 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
2fa30 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
2fa40 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
2fa50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2fa60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2fa70 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
2fa80 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2fa90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2fae0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2faf0 6f 6e 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 45  on Application E
2fb00 6e 74 72 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20  ntry Point..    
2fb10 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2fb20 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2fb30 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2fb40 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2fb50 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e 28  static int Main(
2fb60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2fb70 72 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20 20  ring[] args..   
2fb80 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2fb90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fba0 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
2fbb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fbc0 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
2fbd0 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
2fbe0 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  on = null;..    
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2fc00 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b  ng error = null;
2fc10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2fc20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2fc70 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
2fc80 65 62 75 67 67 65 72 20 48 6f 6f 6b 0d 0a 20 20  ebugger Hook..  
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2fca0 20 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 47 65   (Environment.Ge
2fcb0 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  tEnvironmentVari
2fcc0 61 62 6c 65 28 22 42 72 65 61 6b 22 29 20 21 3d  able("Break") !=
2fcd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2fce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
2fd00 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
2fd10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2fd20 20 20 20 20 20 20 20 20 20 20 20 22 41 74 74 61             "Atta
2fd30 63 68 20 61 20 64 65 62 75 67 67 65 72 20 74 6f  ch a debugger to
2fd40 20 70 72 6f 63 65 73 73 20 7b 30 7d 20 61 6e 64   process {0} and
2fd50 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70                "p
2fd70 72 65 73 73 20 61 6e 79 20 6b 65 79 20 74 6f 20  ress any key to 
2fd80 63 6f 6e 74 69 6e 75 65 2e 22 2c 0d 0a 20 20 20  continue.",..   
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fda0 20 20 20 20 20 50 72 6f 63 65 73 73 2e 47 65 74       Process.Get
2fdb0 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
2fdc0 2e 49 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  .Id);....       
2fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
2fde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fdf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe10 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
2fe20 28 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77  (true); /* throw
2fe30 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
2fe40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe60 63 61 74 63 68 20 28 49 6e 76 61 6c 69 64 4f 70  catch (InvalidOp
2fe70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
2fe80 29 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61  ) // Console.Rea
2fe90 64 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  dKey..          
2fea0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fec0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
2fed0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
2fee0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff00 20 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b    Debugger.Break
2ff10 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2ff20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ff30 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2ff40 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2ff50 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2ff60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2ffa0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
2ffb0 20 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72   Command Line Pr
2ffc0 6f 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  ocessing..      
2ffd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43            if (!C
2ffe0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f  onfiguration.Fro
2fff0 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  mArgs(..        
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30010 61 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20  args, true, ref 
30020 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72  configuration, r
30030 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20  ef error) ||..  
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30050 20 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e    !Configuration
30060 2e 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20 20  .Process(..     
30070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30080 20 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67 75     args, configu
30090 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65  ration, true, re
300a0 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20  f error) ||..   
300b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300c0 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !Configuration.
300d0 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73  CheckRuntimeVers
300e0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
300f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
30100 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75  nfiguration, tru
30110 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30140 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
30150 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
30160 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
30170 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
30180 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
30190 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
301a0 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
301b0 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
301c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301d0 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
301e0 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
301f0 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
30200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30210 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
30220 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30240 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
30250 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
30260 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
30270 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
30280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
30290 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
302a0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69  ceCallback, "Fai
302b0 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lure.",..       
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
302e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
302f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
30300 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
30310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30320 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30330 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
30340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30350 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
30360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30390 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
303a0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
303b0 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
303c0 79 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  y = new MockRegi
303d0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
303e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
303f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
30400 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  tIf, false, fals
30410 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
30420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30430 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
30440 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ion .NET Framewo
30450 72 6b 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64  rk / Visual Stud
30460 69 6f 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  io Data..       
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63               Pac
30480 6b 61 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e  kage package = n
30490 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
304a0 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
304b0 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
304c0 6b 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  kList = null;.. 
304d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
304e0 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74     VsList vsList
304f0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
30500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
30550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30560 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50     InitializeVsP
30570 61 63 6b 61 67 65 28 72 65 66 20 70 61 63 6b 61  ackage(ref packa
30580 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ge);....        
30590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
305a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
305d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
305e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
305f0 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f  nitializeFramewo
30600 72 6b 4c 69 73 74 28 72 65 67 69 73 74 72 79 2e  rkList(registry.
30610 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 0d 0a 20  LocalMachine,.. 
30620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30630 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
30640 74 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77  tion, ref framew
30650 6f 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a 20 20 20  orkList);....   
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30670 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73   InitializeVsLis
30680 74 28 72 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  t(registry.Local
30690 4d 61 63 68 69 6e 65 2c 20 63 6f 6e 66 69 67 75  Machine, configu
306a0 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306c0 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a 20   ref vsList);.. 
306d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
306e0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
306f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30700 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
30710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30750 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
30760 43 6f 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61  Core Assembly Na
30770 6d 65 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20  me Check..      
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
307a0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44        // NOTE: D
307b0 6f 20 74 68 69 73 20 66 69 72 73 74 2c 20 62 65  o this first, be
307c0 66 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20  fore making any 
307d0 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a  changes to the..
307e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307f0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73      //       sys
30800 74 65 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20  tem, because it 
30810 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78  will throw an ex
30820 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a  ception if the..
30830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30840 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c      //       fil
30850 65 20 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20  e name does not 
30860 72 65 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69  represent a vali
30870 64 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20  d managed..     
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30890 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  /       assembly
308a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
308b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
308c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
308d0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
308e0 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d  mblyName = Assem
308f0 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d  blyName.GetAssem
30900 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
30910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30920 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
30930 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f  CoreFileName); /
30940 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
30950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30960 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
30970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30980 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
30990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
309b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
309c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
309d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61       #region Sha
309e0 72 65 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20  red Client Data 
309f0 43 72 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  Creation..      
30a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
30a10 6a 65 63 74 20 64 69 72 65 63 74 6f 72 79 44 61  ject directoryDa
30a20 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72  ta = new AnyPair
30a30 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d  <string, bool>(.
30a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30a50 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
30a60 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79  ration.Directory
30a70 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
30a80 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  Install);....   
30a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30aa0 20 6f 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65   object fileName
30ab0 44 61 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61  Data = new AnyPa
30ac0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
30ad0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30ae0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
30af0 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65  guration.Designe
30b00 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69  rFileName, confi
30b10 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c  guration.Install
30b20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
30b30 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
30b40 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
30b50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
30b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b90 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
30ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65               #re
30bb0 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e  gion .NET GAC In
30bc0 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20  stall/Remove..  
30bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30be0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
30bf0 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73  ion.HasFlags(Ins
30c00 74 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74  tallFlags.GAC, t
30c10 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
30c20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c40 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70 75        Publish pu
30c50 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  blish = null;...
30c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c70 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
30c80 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
30c90 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
30ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30cb0 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20 50   publish = new P
30cc0 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20  ublish();....   
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ce0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
30cf0 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d  ration.Install).
30d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d30 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
30d40 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
30d50 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
30d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d70 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d      /* throw */.
30d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
30db0 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
30dc0 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
30dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
30e00 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
30e10 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
30e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
30e40 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
30e50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
30e60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
30e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61               "Ga
30e90 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62  cInstall: assemb
30ea0 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
30eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ed0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
30ee0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
30ef0 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
30f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
30f20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 69 66 20 28 21 63 6f           if (!co
30f50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
30f60 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
30f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f80 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f       /* throw */
30f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fb0 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73    publish.GacIns
30fc0 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69  tall(configurati
30fd0 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
30fe0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31000 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
31010 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
31020 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
31030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31050 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
31060 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
31070 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
310a0 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d  acInstall: assem
310b0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
310c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
310d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310e0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
310f0 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
31100 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
31110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31120 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
31130 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
31140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31150 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
31170 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
311b0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
311c0 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311e0 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77          /* throw
311f0 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63       publish.Gac
31220 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61  Remove(configura
31230 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  tion.LinqFileNam
31240 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
31250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31260 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
31270 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
31280 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
31290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
312a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312b0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
312c0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
312d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
312e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
312f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31300 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65  "GacRemove: asse
31310 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
31320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31340 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e    ForDisplay(con
31350 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
31360 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
31370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31380 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
31390 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
313a0 20 20 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 69 66 20 28 21             if (!
313c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
313d0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
313e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313f0 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f 77 20         /* throw 
31400 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
31410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31420 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52      publish.GacR
31430 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74  emove(configurat
31440 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.CoreFileName
31450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
31480 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
31490 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
314a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314c0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
314d0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
314e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31510 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d  GacRemove: assem
31520 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
31530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31550 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
31560 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
31570 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31590 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
315a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
315d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
315e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315f0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31610 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
31650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31660 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
31670 4e 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64  NET AssemblyFold
31680 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
31690 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
316a0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
316b0 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
316c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316d0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41    InstallFlags.A
316e0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20  ssemblyFolders, 
316f0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
31700 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31720 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
31730 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  achFrameworkRegi
31740 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a  stry(registry,..
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31770 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50  frameworkList, P
31780 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f  rocessAssemblyFo
31790 6c 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20  lders,..        
317a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317b0 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
317c0 79 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  yData,..        
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 4e 65 74 46 78 49 73 33          NetFxIs3
317f0 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66  2BitOnly || conf
31800 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c  iguration.Wow64,
31810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
31840 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  ThrowOnMissing,.
31850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31870 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
31880 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61  hatIf, configura
31890 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20  tion.Verbose,.. 
318a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
318c0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
318d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
318f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31900 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
31910 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
31920 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31950 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
31960 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68  raceCallback, th
31970 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20  isAssembly,..   
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31990 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
319a0 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
319b0 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
319c0 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319e0 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
319f0 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
31a00 0d 0a 0d 0a 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 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
31a30 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
31a40 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
31a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a70 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
31a80 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
31a90 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20 20  "Failure.",..   
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
31ac0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
31ad0 20 20 20 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 72 65 74 75              retu
31af0 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
31b00 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
31b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
31b40 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
31b50 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f               ///
31b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ba0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bc0 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50  #region .NET DbP
31bd0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a  roviderFactory..
31be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bf0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
31c00 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d  ation.HasFlags(.
31c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
31c30 74 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76  tallFlags.DbProv
31c40 69 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75  iderFactory, tru
31c50 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
31c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c80 20 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d      bool saved =
31c90 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46     if (!ForEachF
31cc0 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 72  rameworkConfig(r
31cd0 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
31d00 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73  orkList, Process
31d10 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
31d20 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
31d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d40 20 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d      InvariantNam
31d50 65 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c  e, ProviderName,
31d60 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   Description,.. 
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
31d90 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20  actoryTypeName, 
31da0 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69  assemblyName, di
31db0 72 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20 20  rectoryData,..  
31dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 65                Ne
31de0 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c  tFxIs32BitOnly |
31df0 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  | configuration.
31e00 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  Wow64,..        
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
31e30 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73  ation.ThrowOnMis
31e40 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
31e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e60 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
31e70 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e  tion.WhatIf, con
31e80 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
31e90 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
31ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31eb0 20 20 20 20 20 72 65 66 20 73 61 76 65 64 2c 20       ref saved, 
31ec0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
31ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f00 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
31f10 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72  wMessage(TracePr
31f20 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
31f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f50 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
31f60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
31f70 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
31fa0 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
31fb0 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
31fc0 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
31ff0 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
32000 3b 0d 0a 0d 0a 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 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
32030 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
32040 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
32050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32070 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
32080 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
32090 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20 20   "Failure.",..  
320a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
320c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
320d0 0a 20 20 20 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 72 65 74               ret
320f0 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
32100 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
32140 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
32150 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
32160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
321a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 20 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b   #region VS Pack
321d0 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  age..           
321e0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
321f0 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
32200 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
32210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32220 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
32230 73 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29  sPackage, true))
32240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32250 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32270 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56   if (!ForEachVsV
32280 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72  ersionRegistry(r
32290 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
322a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322b0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
322c0 2c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61  , ProcessVsPacka
322d0 67 65 2c 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  ge, package,..  
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
32300 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a 20 20 20  leNameData,..   
32310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32320 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73 49               VsI
32330 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f  s32BitOnly || co
32340 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36  nfiguration.Wow6
32350 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
32360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32370 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
32380 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  n.ThrowOnMissing
32390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
323a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
323c0 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
323d0 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
323e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
323f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32400 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
32410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32420 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
32450 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63 65 50  owMessage(TraceP
32460 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
32470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32490 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
324a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
324b0 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
324c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
324e0 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
324f0 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
32500 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
32510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32520 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
32530 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
32540 29 3b 0d 0a 0d 0a 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 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
32570 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
32580 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
32590 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325b0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
325c0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
325d0 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c 0d 0a 20  , "Failure.",.. 
325e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
32600 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
32610 0d 0a 20 20 20 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 72 65                re
32630 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
32640 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
32650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
32660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32670 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
32690 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
326a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
326b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
326c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
326d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
326e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32700 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74    #region VS Dat
32710 61 53 6f 75 72 63 65 0d 0a 20 20 20 20 20 20 20  aSource..       
32720 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
32730 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
32740 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
32750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32760 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
32770 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c  gs.VsDataSource,
32780 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
32790 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
327a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327b0 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
327c0 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
327d0 69 73 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d  istry(registry,.
327e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
327f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32800 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73   vsList, Process
32810 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61  VsDataSource, pa
32820 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
32830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32840 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
32850 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
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 56 73 49 73 33 32 42 69 74         VsIs32Bit
32880 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72  Only || configur
32890 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20  ation.Wow64,..  
328a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
328c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f  nfiguration.Thro
328d0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
328e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
32900 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
32910 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
32920 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
32930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32940 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
32950 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
32960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
32990 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
329a0 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
329b0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
329c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329d0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
329e0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
329f0 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
32a00 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
32a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
32a30 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
32a40 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
32a50 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
32a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a70 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
32a80 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
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 54 72 61 63              Trac
32ab0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
32ac0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
32ad0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
32ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
32b00 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
32b10 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69  ceCallback, "Fai
32b20 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lure.",..       
32b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b40 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
32b50 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 72 65 74 75 72 6e 20 31          return 1
32b80 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
32b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32ba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
32bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
32bd0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
32be0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
32bf0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
32c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32c30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
32c40 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
32c50 69 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69  ion VS DataProvi
32c60 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  der..           
32c70 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
32c80 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
32c90 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cb0 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56    InstallFlags.V
32cc0 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74  sDataProvider, t
32cd0 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
32ce0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d00 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
32d10 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
32d20 74 72 79 28 72 65 67 69 73 74 72 79 2c 0d 0a 20  try(registry,.. 
32d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
32d50 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73  sList, ProcessVs
32d60 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 70 61  DataProvider, pa
32d70 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
32d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d90 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
32da0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
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 56 73 49 73 33 32 42 69 74         VsIs32Bit
32dd0 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72  Only || configur
32de0 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20  ation.Wow64,..  
32df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
32e10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f  nfiguration.Thro
32e20 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
32e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
32e50 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
32e60 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
32e70 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e90 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
32ea0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ec0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
32ee0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
32ef0 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  age(TracePriorit
32f00 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
32f30 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
32f40 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
32f50 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
32f80 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
32f90 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
32fa0 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
32fd0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
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 54 72 61 63              Trac
33000 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
33010 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
33020 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
33030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
33050 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
33060 63 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69  ceCallback, "Fai
33070 6c 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  lure.",..       
33080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33090 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
330a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
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 72 65 74 75 72 6e 20 31          return 1
330d0 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
330e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
330f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33110 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
33120 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
33130 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
33140 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
33150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33180 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
33190 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
331a0 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72 79 0d  ion Log Summary.
331b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
331c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
331d0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
331e0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
331f0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
33200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
33210 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
33220 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
33230 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
33240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33250 20 20 20 20 20 22 73 75 62 4b 65 79 73 43 72 65       "subKeysCre
33260 61 74 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  ated = {0}, subK
33270 65 79 73 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d  eysDeleted = {1}
33280 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
33290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
332a0 6b 65 79 56 61 6c 75 65 73 53 65 74 20 3d 20 7b  keyValuesSet = {
332b0 32 7d 2c 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  2}, keyValuesDel
332c0 65 74 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20  eted = {3}",..  
332d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332e0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
332f0 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
33300 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 29 2c  SubKeysCreated),
33310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33320 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
33330 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c  play(RegistryHel
33340 70 65 72 2e 53 75 62 4b 65 79 73 44 65 6c 65 74  per.SubKeysDelet
33350 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ed),..          
33360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
33370 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72  rDisplay(Registr
33380 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65  yHelper.KeyValue
33390 73 53 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  sSet),..        
333a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333b0 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73  ForDisplay(Regis
333c0 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c  tryHelper.KeyVal
333d0 75 65 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20  uesDeleted)),.. 
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
33400 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
33410 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
33420 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33470 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
33480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33490 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
334a0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
334b0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
334c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
334d0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
334e0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
334f0 61 6c 6c 62 61 63 6b 2c 20 22 53 75 63 63 65 73  allback, "Succes
33500 73 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  s.",..          
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
33520 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
33530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33540 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f       return 0; /
33550 2a 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a 20 20  * SUCCESS */..  
33560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
33570 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33580 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
33590 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
335a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
335d0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
335e0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
335f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33600 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
33610 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
33620 20 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72   e, traceCategor
33630 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
33640 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a 20         throw;.. 
33650 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
33660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
33670 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
33680 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
33690 6f 6e 0d 0a 7d 0d 0a                             on..}..