System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 6efbc594b345c2d5c2ecde9fad4804f84cbbdf8c:


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 0d 0a 23 69 66 20 57 49 4e  ices;....#if WIN
0150: 44 4f 57 53 0d 0a 75 73 69 6e 67 20 53 79 73 74  DOWS..using Syst
0160: 65 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72  em.Runtime.Inter
0170: 6f 70 53 65 72 76 69 63 65 73 3b 0d 0a 23 65 6e  opServices;..#en
0180: 64 69 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73  dif....using Sys
0190: 74 65 6d 2e 53 65 63 75 72 69 74 79 3b 0d 0a 0d  tem.Security;...
01a0: 0a 23 69 66 20 4e 45 54 5f 32 30 20 7c 7c 20 4e  .#if NET_20 || N
01b0: 45 54 5f 33 35 0d 0a 75 73 69 6e 67 20 53 79 73  ET_35..using Sys
01c0: 74 65 6d 2e 53 65 63 75 72 69 74 79 2e 50 65 72  tem.Security.Per
01d0: 6d 69 73 73 69 6f 6e 73 3b 0d 0a 23 65 6e 64 69  missions;..#endi
01e0: 66 0d 0a 0d 0a 75 73 69 6e 67 20 53 79 73 74 65  f....using Syste
01f0: 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 75 73  m.Threading;..us
0200: 69 6e 67 20 53 79 73 74 65 6d 2e 57 69 6e 64 6f  ing System.Windo
0210: 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73 69 6e 67  ws.Forms;..using
0220: 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d 0a 75 73   System.Xml;..us
0230: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 2e 57 69  ing Microsoft.Wi
0240: 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63  n32;....namespac
0250: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
0260: 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20 23 72 65  Lite..{..    #re
0270: 67 69 6f 6e 20 50 75 62 6c 69 63 20 44 65 6c 65  gion Public Dele
0280: 67 61 74 65 73 0d 0a 20 20 20 20 69 6e 74 65 72  gates..    inter
0290: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 76 6f 69  nal delegate voi
02a0: 64 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28  d TraceCallback(
02b0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
02c0: 20 6d 65 73 73 61 67 65 2c 20 2f 2a 20 69 6e 20   message, /* in 
02d0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  */..        stri
02e0: 6e 67 20 63 61 74 65 67 6f 72 79 20 2f 2a 20 69  ng category /* i
02f0: 6e 20 2a 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a  n */..    );....
0300: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
0310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0350: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
0360: 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46 72  delegate bool Fr
0370: 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
0380: 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
0390: 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
03a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
03b0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
03c0: 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 20 20  ing invariant,  
03d0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
03e0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
03f0: 20 6e 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20   name,          
0400: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0410: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
0420: 73 63 72 69 70 74 69 6f 6e 2c 20 20 20 20 20 20  scription,      
0430: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0440: 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
0450: 61 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 2f  ame,           /
0460: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0470: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
0480: 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 2f 2a 20 69  semblyName, /* i
0490: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62  n */..        ob
04a0: 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
04b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
04c0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
04d0: 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20  wow64,          
04e0: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
04f0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
0500: 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 20 20 20  owOnMissing,    
0510: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0520: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
0530: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
0540: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0550: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 20    bool verbose, 
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72  in */..        r
0580: 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 20 20  ef bool saved,  
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
05a0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66   */..        ref
05b0: 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20   string error   
05c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 20 2a          /* out *
05d0: 2f 0d 0a 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20  /..    );....   
05e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
05f0: 2f 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 0d 0a 0d 0a  ////////////....
0630: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c      internal del
0640: 65 67 61 74 65 20 62 6f 6f 6c 20 46 72 61 6d 65  egate bool Frame
0650: 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c  workRegistryCall
0660: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49  back(..        I
0670: 6e 73 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67  nstaller.MockReg
0680: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
0690: 2c 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20  , /* in */..    
06a0: 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
06b0: 77 6f 72 6b 4e 61 6d 65 2c 20 20 20 20 20 20 20  workName,       
06c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
06d0: 0a 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e  .        Version
06e0: 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
06f0: 6e 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  n,          /* i
0700: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0710: 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
0720: 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e,              
0730: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0740: 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
0750: 44 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20  Data,           
0760: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0770: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
0780: 36 34 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  64,             
0790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
07a0: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f   */..        boo
07b0: 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
07c0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
07d0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07e0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20    bool whatIf,  
07f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0800: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0810: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
0820: 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20 20 20  ose,            
0830: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0840: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  */..        ref 
0850: 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20 20 20  string error    
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0870: 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 29 3b  * out */..    );
0880: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
08d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  ///....    inter
08e0: 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f 6f  nal delegate boo
08f0: 6c 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65  l VisualStudioRe
0900: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
0910: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
0920: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
0930: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
0940: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 56 65  n */..        Ve
0950: 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0970: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0980: 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
0990: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
09a0: 20 20 20 20 20 20 2f 2a 20 69 6e 2c 20 6f 70 74        /* in, opt
09b0: 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20 20 20 20 20  ional */..      
09c0: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 50 61 63 6b    Installer.Pack
09d0: 61 67 65 20 70 61 63 6b 61 67 65 2c 20 20 20 20  age package,    
09e0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
09f0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
0a00: 69 65 6e 74 44 61 74 61 2c 20 20 20 20 20 20 20  ientData,       
0a10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0a20: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0a30: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0a50: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0a60: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0a70: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0a80: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
0a90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
0aa0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
0ab0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ac0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
0ad0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
0ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0af0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0b00: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b20: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0b30: 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65    );..    #endre
0b40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
0b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23  ///////....    #
0ba0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e  region Public En
0bb0: 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20  umerations..    
0bc0: 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70  [Flags()]..    p
0bd0: 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61  ublic enum Insta
0be0: 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a  llFlags..    {..
0bf0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0c00: 4e 6f 72 6d 61 6c 20 46 6c 61 67 73 0d 0a 20 20  Normal Flags..  
0c10: 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30        None = 0x0
0c20: 2c 0d 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61  ,..        Globa
0c30: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d  lAssemblyCache =
0c40: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41   0x1,..        A
0c50: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d  ssemblyFolders =
0c60: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x2,..        D
0c70: 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
0c80: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0c90: 20 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38   VsPackage = 0x8
0ca0: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 50 61 63  ,..        VsPac
0cb0: 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
0cc0: 6c 79 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d  lyCache = 0x10,.
0cd0: 0a 20 20 20 20 20 20 20 20 56 73 44 61 74 61 53  .        VsDataS
0ce0: 6f 75 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20  ource = 0x20,.. 
0cf0: 20 20 20 20 20 20 20 56 73 44 61 74 61 50 72 6f         VsDataPro
0d00: 76 69 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20  vider = 0x40,.. 
0d10: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
0d20: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
0d80: 23 72 65 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74  #region Composit
0d90: 65 20 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  e Flags..       
0da0: 20 46 72 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f   Framework = Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 7c 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65   | AssemblyFolde
0dd0: 72 73 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  rs |..          
0de0: 20 20 20 20 20 20 20 20 20 20 44 62 50 72 6f 76            DbProv
0df0: 69 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a  iderFactory,....
0e00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
0e50: 0a 0d 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20  ...        Vs = 
0e60: 56 73 50 61 63 6b 61 67 65 20 7c 20 56 73 50 61  VsPackage | VsPa
0e70: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
0e80: 62 6c 79 43 61 63 68 65 20 7c 20 56 73 44 61 74  blyCache | VsDat
0e90: 61 53 6f 75 72 63 65 20 7c 0d 0a 20 20 20 20 20  aSource |..     
0ea0: 20 20 20 20 20 20 20 20 56 73 44 61 74 61 50 72          VsDataPr
0eb0: 6f 76 69 64 65 72 2c 0d 0a 0d 0a 20 20 20 20 20  ovider,....     
0ec0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0f10: 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d        All = Fram
0f20: 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20  ework | Vs,.... 
0f30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0f80: 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63  ..        AllExc
0f90: 65 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  eptGlobalAssembl
0fa0: 79 43 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e  yCache = All & ~
0fb0: 28 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  (GlobalAssemblyC
0fc0: 61 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  ache |..        
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
0ff0: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
1000: 73 65 6d 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20  semblyCache),.. 
1010: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
1020: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
1030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1070: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1080: 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20  Default = All.. 
1090: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b  ///////....    [
10f0: 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75  Flags()]..    pu
1100: 62 6c 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50  blic enum TraceP
1110: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a  riority..    {..
1120: 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30          None = 0
1130: 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77  x0,..        Low
1140: 65 73 74 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20  est = 0x1,..    
1150: 20 20 20 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c      Lower = 0x2,
1160: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 20 3d 20  ..        Low = 
1170: 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65  0x4,..        Me
1180: 64 69 75 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a  diumLow = 0x8,..
1190: 20 20 20 20 20 20 20 20 4d 65 64 69 75 6d 20 3d          Medium =
11a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
11b0: 4d 65 64 69 75 6d 48 69 67 68 20 3d 20 30 78 32  MediumHigh = 0x2
11c0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68  0,..        High
11d0: 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20 20   = 0x40,..      
11e0: 20 20 48 69 67 68 65 72 20 3d 20 30 78 38 30 2c    Higher = 0x80,
11f0: 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 65 73  ..        Highes
1200: 74 20 3d 20 30 78 31 30 30 2c 0d 0a 20 20 20 20  t = 0x100,..    
1210: 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65      Default = Me
1220: 64 69 75 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  dium..    }..   
1230: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1240: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1290: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e  ..    #region In
12a0: 73 74 61 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23  staller Class..#
12b0: 69 66 20 4e 45 54 5f 34 30 0d 0a 20 20 20 20 5b  if NET_40..    [
12c0: 53 65 63 75 72 69 74 79 43 72 69 74 69 63 61 6c  SecurityCritical
12d0: 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ()]..#else..    
12e0: 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69 73 73  [SecurityPermiss
12f0: 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63 74 69  ion(SecurityActi
1300: 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c 20 55  on.LinkDemand, U
1310: 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d 20 74  nmanagedCode = t
1320: 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20  rue)]..#endif.. 
1330: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
1340: 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61 6c 6c  ic class Install
1350: 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  er..    {..     
1360: 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73 61 66     #region Unsaf
1370: 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f 64 73  e Native Methods
1380: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
1390: 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e 61 67  [SuppressUnmanag
13a0: 65 64 43 6f 64 65 53 65 63 75 72 69 74 79 28 29  edCodeSecurity()
13b0: 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
13c0: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
13d0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13e0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ods..        {..
13f0: 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
1400: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1410: 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20 43 6f   Native Win32 Co
1420: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
1430: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1440: 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54 48 20  st int MAX_PATH 
1450: 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  = 260;....      
1460: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
14b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
14c0: 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49 44 4c   const int CSIDL
14d0: 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30 78 30  _SYSTEMX86 = 0x0
14e0: 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  029;....        
14f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1530: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1540: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
1550: 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50 5f 54  onst int SHGFP_T
1560: 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20 30 3b  YPE_CURRENT = 0;
1570: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
15d0: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
15e0: 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f   int S_OK = 0; /
15f0: 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a 20 20  * HRESULT */..  
1600: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1610: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1620: 20 20 20 20 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 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1670: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e         #region N
1680: 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20 4d 65  ative Windows Me
1690: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
16a0: 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28 22 73     [DllImport("s
16b0: 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20  hfolder.dll",.. 
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
16d0: 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e  allingConvention
16e0: 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e   = CallingConven
16f0: 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a 20 20  tion.Winapi,..  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
1710: 61 72 53 65 74 20 3d 20 43 68 61 72 53 65 74 2e  arSet = CharSet.
1720: 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d 61 70  Auto, BestFitMap
1730: 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d 0a 20  ping = false,.. 
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1750: 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62 6c 65  hrowOnUnmappable
1760: 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53 65 74  Char = true, Set
1770: 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72 75 65  LastError = true
1780: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
1790: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 65  private static e
17a0: 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65 74 46  xtern int SHGetF
17b0: 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20 20 20  olderPath(..    
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
17d0: 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20 69 6e  tr hWndOwner, in
17e0: 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74 50 74  t nFolder, IntPt
17f0: 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74 20 66  r hToken, uint f
1800: 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  lags,..         
1810: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 75         IntPtr bu
1820: 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50  ffer /* >= MAX_P
1830: 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20 20 20  ATH */);..      
1840: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
18b0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
18c0: 63 20 57 72 61 70 70 65 72 20 4d 65 74 68 6f 64  c Wrapper Method
18d0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
18e0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
18f0: 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69 72  ing GetSystemDir
1900: 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20 20 20  ectory()..      
1910: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1920: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1930: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
1940: 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Zero;....       
1950: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1980: 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 4d 61       buffer = Ma
1990: 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73  rshal.AllocCoTas
19a0: 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  kMem(..         
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19c0: 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20 28 4d  izeof(char) * (M
19d0: 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b 0d 0a  AX_PATH + 1));..
19e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f0: 20 20 20 20 20 20 69 66 20 28 62 75 66 66 65 72        if (buffer
1a00: 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   != IntPtr.Zero)
1a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64 65 72   if (SHGetFolder
1a50: 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65 72 6f  Path(IntPtr.Zero
1a60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a80: 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45 4d 58     CSIDL_SYSTEMX
1a90: 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c  86, IntPtr.Zero,
1aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac0: 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55 52    SHGFP_TYPE_CUR
1ad0: 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20 3d 3d  RENT, buffer) ==
1ae0: 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20 20 20   S_OK)..        
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b20: 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50 74  eturn Marshal.Pt
1b30: 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28 62 75  rToStringAuto(bu
1b40: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b60: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1b70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1ba0: 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bd0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74 68 69   // TODO: Is thi
1c00: 73 20 74 68 65 20 72 69 67 68 74 20 65 72 72 6f  s the right erro
1c10: 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c 75 74  r handling solut
1c20: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
1c30: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1c40: 20 20 74 6f 20 75 73 65 20 61 74 20 74 68 69 73    to use at this
1c50: 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20 20 20   point?..       
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c80: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1c90: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1ca0: 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1cb0: 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1cd0: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1ce0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1cf0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d10: 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f 74 20       "Could not 
1d20: 67 65 74 20 73 79 73 74 65 6d 20 64 69 72 65 63  get system direc
1d30: 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d  tory: {0}", e),.
1d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d50: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d60: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d80: 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20  throw;..        
1d90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1da0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
1db0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
1dc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1dd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62             if (b
1de0: 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74 72 2e  uffer != IntPtr.
1df0: 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
1e00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e20: 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 46 72        Marshal.Fr
1e30: 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75 66 66  eeCoTaskMem(buff
1e40: 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  er);..          
1e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75                bu
1e60: 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65  ffer = IntPtr.Ze
1e70: 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro;..           
1e80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
1ec0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ed0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
1ee0: 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  gion..#endif..  
1ef0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f00: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1f10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f60: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1f70: 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70 65 72  n Private Helper
1f80: 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20   Classes..      
1f90: 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69    #region AnyPai
1fa0: 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  r Class..       
1fb0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
1fc0: 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31  class AnyPair<T1
1fd0: 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b  , T2>..        {
1fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
1ff0: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
2000: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
2010: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2020: 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e         // WARNIN
2030: 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63  G: This construc
2040: 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20  tor produces an 
2050: 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79  immutable "empty
2060: 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20  " pair..        
2070: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20      //          
2080: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20  object...       
2090: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20a0: 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50       public AnyP
20b0: 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20  air()..         
20c0: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d         : base().
20d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
2100: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2160: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2170: 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54  public AnyPair(T
2180: 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20  1 x)..          
2190: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a        : this()..
21a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21c0: 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20  his.x = x;..    
21d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2230: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2240: 69 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c  ic AnyPair(T1 x,
2250: 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20   T2 y)..        
2260: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 78          : this(x
2270: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2290: 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20    this.y = y;.. 
22a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
22b0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
22c0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
22d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2310: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2320: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2330: 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
2340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2350: 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20  ivate T1 x;..   
2360: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2370: 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20  T1 X..          
2380: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2390: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23a0: 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  n x; }..        
23b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e0: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
2410: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2420: 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  T2 y;..         
2430: 20 20 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a     public T2 Y..
2440: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2460: 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d  et { return y; }
2470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2490: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
24a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
24b0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
24c0: 20 20 2f 2f 2f 2f 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 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
2520: 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20  ceOps Class..   
2530: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2540: 74 69 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f  tic class TraceO
2550: 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ps..        {.. 
2560: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2570: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
2580: 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ants..          
2590: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
25a0: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 44 65  string DefaultDe
25b0: 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  bugFormat = "#{0
25c0: 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a  } @ {1}: {2}";..
25d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25e0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
25f0: 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f 72   DefaultTraceFor
2600: 6d 61 74 20 3d 20 22 23 7b 30 7d 20 40 20 7b 31  mat = "#{0} @ {1
2610: 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {2}";....    
2620: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2630: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 73 6f  const string Iso
2640: 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70  8601DateTimeOutp
2650: 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20  utFormat =..    
2660: 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79 79              "yyy
2670: 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73  y.MM.ddTHH:mm:ss
2680: 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20 20 20  .fffffff";..    
2690: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
26a0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
26b0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
26c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2700: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2710: 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
2720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2730: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
2740: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
2750: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  ew object();..  
2760: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2770: 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65  e static long ne
2780: 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20 20 20  xtDebugId;..    
2790: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27a0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74  static long next
27b0: 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  TraceId;..      
27c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
27d0: 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61 63 65  atic IList<Trace
27e0: 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75 67 4c  Listener> debugL
27f0: 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20  isteners;..     
2800: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2810: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2820: 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
2830: 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74  y = TracePriorit
2840: 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20  y.Default;..    
2850: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2860: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2870: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
2880: 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69  ty = TracePriori
2890: 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20  ty.Default;..   
28a0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
28b0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 64   static string d
28c0: 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66  ebugFormat = Def
28d0: 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b  aultDebugFormat;
28e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
28f0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2900: 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20  ing traceFormat 
2910: 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f  = DefaultTraceFo
2920: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
2930: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29a0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
29b0: 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
29c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
29d0: 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63  blic static Trac
29e0: 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50  ePriority DebugP
29f0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
2a00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a10: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
2a20: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
2a30: 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
2a40: 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rity; } }..     
2a50: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
2a60: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2a70: 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   { debugPriority
2a80: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
2a90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2af0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2b00: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
2b10: 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65  cePriority Trace
2b20: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
2b30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b40: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
2b50: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
2b60: 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
2b70: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2b90: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2ba0: 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  ) { tracePriorit
2bb0: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
2bc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2c30: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2c40: 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
2c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c70: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
2c80: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
2c90: 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d  debugFormat; } }
2ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb0: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
2cc0: 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46  ncRoot) { debugF
2cd0: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
2ce0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2cf0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2d00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2d50: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2d60: 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
2d70: 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
2d80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d90: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
2da0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
2db0: 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
2dc0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2dd0: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2de0: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2df0: 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
2e00: 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  e; } }..        
2e10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2e20: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e90: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74  #region Interact
2ea0: 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68  ive Support Meth
2eb0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
2ec0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
2ed0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
2ee0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
2ef0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2f00: 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73  static DialogRes
2f10: 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28  ult ShowMessage(
2f20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f30: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
2f40: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f60: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
2f70: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2f90: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
2fa0: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
2fb0: 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2fc0: 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a  mbly assembly,..
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe0: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
2ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3000: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
3010: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3020: 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74     MessageBoxBut
3030: 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20  tons buttons,.. 
3040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
3050: 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 69 63  essageBoxIcon ic
3060: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
3070: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
3080: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3090: 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 73 75        DialogResu
30a0: 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 61 6c  lt result = Dial
30b0: 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a  ogResult.OK;....
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
30e0: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
30f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3100: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3110: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3120: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
3130: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3140: 20 20 20 20 20 20 20 69 66 20 28 53 79 73 74 65         if (Syste
3150: 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65  mInformation.Use
3160: 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d 0a 20  rInteractive).. 
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
3180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3190: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 69 74        string tit
31a0: 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  le = GetAssembly
31b0: 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b  Title(assembly);
31c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31d0: 20 20 20 20 20 20 20 20 69 66 20 28 74 69 74 6c          if (titl
31e0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
31f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3200: 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70 70 6c      title = Appl
3210: 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e  ication.ProductN
3220: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
3230: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3240: 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e  lt = MessageBox.
3250: 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20 74 69  Show(message, ti
3260: 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63  tle, buttons, ic
3270: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
3280: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
3290: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
32a0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
32d0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
32e0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3300: 20 20 20 20 20 20 20 20 22 55 73 65 72 20 63 68          "User ch
3310: 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46  oice of {0}.", F
3320: 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74  orDisplay(result
3330: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
3350: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
3360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3370: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33a0: 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63      DebugAndTrac
33b0: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
33c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
33e0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
33f0: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
3400: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
3410: 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c 74          "Default
3420: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
3430: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
3440: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
3450: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65              cate
3460: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
3470: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3480: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
3490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34a0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
34b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
34c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3510: 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69 6e    #region Tracin
3520: 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64  g Support Method
3530: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
3540: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3550: 64 20 53 65 74 75 70 44 65 62 75 67 4c 69 73 74  d SetupDebugList
3560: 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20 20 20  eners()..       
3570: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3580: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62 75          if (debu
3590: 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75  gListeners == nu
35a0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
35b0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69           debugLi
35c0: 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69  steners = new Li
35d0: 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72  st<TraceListener
35e0: 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  >();....        
35f0: 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69 73          debugLis
3600: 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
3610: 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
3620: 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
3630: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3640: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3690: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
36a0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74  static long Next
36b0: 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20 20 20  DebugId()..     
36c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
36e0: 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63   Interlocked.Inc
36f0: 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 44  rement(ref nextD
3700: 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20 20 20  ebugId);..      
3710: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3720: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3770: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3780: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78   static long Nex
3790: 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20 20 20  tTraceId()..    
37a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37b0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37c0: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e  n Interlocked.In
37d0: 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74  crement(ref next
37e0: 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20 20 20  TraceId);..     
37f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3800: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3850: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3860: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
3870: 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
3880: 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a 20 20  me dateTime)..  
3890: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
38a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
38b0: 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f 53  urn dateTime.ToS
38c0: 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44 61 74  tring(Iso8601Dat
38d0: 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61  eTimeOutputForma
38e0: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
38f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3900: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3940: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3950: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
3960: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
3970: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
3980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
3990: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
39a0: 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65  ng GetMethodName
39b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
39c0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
39d0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
39e0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
39f0: 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  evel..          
3a00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3a20: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
3a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
3a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a50: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3a70: 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20  OTE: If a valid 
3a80: 73 74 61 63 6b 20 74 72 61 63 65 20 77 61 73 20  stack trace was 
3a90: 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62 79 20  not supplied by 
3aa0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
3ab0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3ac0: 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65    caller, create
3ad0: 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f   one now based o
3ae0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20  n the current.. 
3af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b00: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63     //       exec
3b10: 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20  ution stack...  
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b30: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3b40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
3b50: 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c  ackTrace == null
3b60: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3b70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b90: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bb0: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
3bc0: 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f  current executio
3bd0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bf0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3c10: 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53  ackTrace = new S
3c20: 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a  tackTrace();....
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c40: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c60: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77      // NOTE: Alw
3c70: 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61  ays skip this ca
3c80: 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65  ll frame when we
3c90: 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20   capture..      
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cb0: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73    //       the s
3cc0: 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20  tack trace...   
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ce0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20   level++;..     
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3d20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3d30: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
3d60: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 63 6b   specified stack
3d70: 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61   frame (always a
3d80: 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20  dd one to..     
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3da0: 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74 68 69  /       skip thi
3db0: 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20  s method)...    
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dd0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3de0: 20 20 20 20 20 20 20 20 53 74 61 63 6b 46 72 61          StackFra
3df0: 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20  me stackFrame = 
3e00: 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72  stackTrace.GetFr
3e10: 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20  ame(level);.... 
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e30: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3e40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
3e50: 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68  TE: Get the meth
3e60: 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b  od for the stack
3e70: 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20   frame...       
3e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3ea0: 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20       MethodBase 
3eb0: 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61  methodBase = sta
3ec0: 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f  ckFrame.GetMetho
3ed0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f00: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
3f10: 20 74 68 65 20 74 79 70 65 20 66 6f 72 20 74 68   the type for th
3f20: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3f40: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3f50: 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
3f60: 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65   = methodBase.De
3f70: 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a  claringType;....
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f90: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
3fb0: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d  OTE: Get the nam
3fc0: 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e  e of the method.
3fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3fe0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4000: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68  ring name = meth
4010: 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a  odBase.Name;....
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4030: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4040: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4050: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the 
4060: 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74  properly formatt
4070: 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20  ed result...    
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4090: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
40a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
40b0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32         "{0}{1}{2
40e0: 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54  }", type.Name, T
40f0: 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e  ype.Delimiter, n
4100: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
4110: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4120: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
4130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4150: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
4160: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
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 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
41a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
41b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
41c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
41f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4200: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4210: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
4220: 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20  bugCore(..      
4230: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4240: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4250: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4260: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4270: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4280: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
42a0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
42c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42d0: 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c        if (debugL
42e0: 69 73 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c  isteners != null
42f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4320: 20 20 66 6f 72 65 61 63 68 20 28 54 72 61 63 65    foreach (Trace
4330: 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65 6e 65  Listener listene
4340: 72 20 69 6e 20 64 65 62 75 67 4c 69 73 74 65 6e  r in debugListen
4350: 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ers)..          
4360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4380: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
4390: 74 65 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65 28  tener.WriteLine(
43a0: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
43b0: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75 73 68 28   listener.Flush(
43e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4410: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4420: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4430: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4490: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
44a0: 73 74 61 74 69 63 20 76 6f 69 64 20 54 72 61 63  static void Trac
44b0: 65 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20  eCore(..        
44c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
44d0: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
44e0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
44f0: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4500: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4510: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4520: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
4530: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4560: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4580: 4f 54 45 3a 20 57 72 69 74 65 20 74 68 65 20 6d  OTE: Write the m
4590: 65 73 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68  essage to all th
45a0: 65 20 61 63 74 69 76 65 20 74 72 61 63 65 0d 0a  e active trace..
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
45d0: 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  teners...       
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
45f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4600: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
4610: 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61  Line(message, ca
4620: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
4630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4640: 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ace.Flush();..  
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
46d0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
46e0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
46f0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4700: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4710: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4720: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4740: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4750: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4760: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4770: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4780: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4790: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
47a0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
47b0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
47c0: 20 20 20 20 20 20 20 20 45 78 63 65 70 74 69 6f          Exceptio
47d0: 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20  n exception,..  
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
47f0: 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
4800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4830: 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e 20 21   if (exception !
4840: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4850: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4860: 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63  urn DebugAndTrac
4870: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
4880: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
48a0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
48b0: 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53 74 61 63  llback, new Stac
48c0: 6b 54 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e  kTrace(exception
48d0: 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20  , true), 0,..   
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48f0: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54       exception.T
4900: 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67  oString(), categ
4910: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
4920: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4930: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
4940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4950: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
49a0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
49b0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
49c0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
49d0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
49e0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
49f0: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
4a00: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
4a10: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
4a20: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
4a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4a40: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
4a50: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a70: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
4a80: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
4a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4aa0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
4ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
4ac0: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ae0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4b00: 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e    return DebugAn
4b10: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
4b30: 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75  cePriority, debu
4b40: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
4b50: 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20  Callback, null, 
4b60: 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
4b70: 20 20 20 20 20 20 20 20 6d 65 73 73 61 67 65 2c          message,
4b80: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
4b90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4ba0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
4c00: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
4c10: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
4c20: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
4c30: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
4c40: 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  tic string Debug
4c50: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
4c60: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4c70: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
4c80: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
4c90: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
4ca0: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
4cb0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
4cc0: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
4cd0: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
4ce0: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
4cf0: 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20       StackTrace 
4d00: 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20  stackTrace,..   
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
4d20: 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20   level,..       
4d30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4d40: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
4d50: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4d60: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
4d70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
4d80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4db0: 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73   // NOTE: Always
4dc0: 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20   skip this call 
4dd0: 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 74 61  frame if the sta
4de0: 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 20 20  ck trace is..   
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4e00: 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f 20 62        going to b
4e10: 65 20 63 61 70 74 75 72 65 64 20 62 79 20 47 65  e captured by Ge
4e20: 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20  tMethodName...  
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e50: 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63 65    if (stackTrace
4e60: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
4e80: 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  evel++;....     
4e90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4eb0: 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74  / NOTE: Format t
4ec0: 68 65 20 6d 65 73 73 61 67 65 20 66 6f 72 20 64  he message for d
4ed0: 69 73 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a  isplay (once)...
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ef0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4f00: 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
4f10: 74 74 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f  tted = String.Fo
4f20: 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c  rmat("{0}: {1}",
4f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f40: 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f 64 4e        GetMethodN
4f50: 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 2c 20  ame(stackTrace, 
4f60: 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 65 29  level), message)
4f70: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4f80: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4f90: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
4fa0: 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 20 63  : If the debug c
4fb0: 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c  allback is inval
4fc0: 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20  id or the trace 
4fd0: 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
4fe0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
4ff0: 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61     of this messa
5000: 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ge is less than 
5010: 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c  what we currentl
5020: 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20  y want to..     
5030: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5040: 20 20 20 20 64 65 62 75 67 2c 20 73 6b 69 70 20      debug, skip 
5050: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
5060: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5070: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 64 65           if ((de
5080: 62 75 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  bugCallback != n
5090: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
50a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72               (tr
50b0: 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 44  acePriority >= D
50c0: 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 0d 0a  ebugPriority))..
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
50f0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5110: 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74  / NOTE: Invoke t
5120: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5130: 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61  k with the forma
5140: 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  tted..          
5150: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5160: 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74     message and t
5170: 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63  he category spec
5180: 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
5190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51a0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
51b0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
51c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51e0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f  debugCallback(fo
51f0: 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72  rmatted, categor
5200: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
5210: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5220: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5240: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72   NOTE: If the tr
5250: 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  ace callback is 
5260: 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74  invalid or the t
5270: 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20  race priority.. 
5280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5290: 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69 73 20  /       of this 
52a0: 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73 20  message is less 
52b0: 74 68 61 6e 20 77 68 61 74 20 77 65 20 63 75 72  than what we cur
52c0: 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a  rently want to..
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 2f 2f 20 20 20 20 20 20 20 74 72 61 63 65 2c 20  //       trace, 
52f0: 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20  skip it...      
5300: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5320: 20 28 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b   ((traceCallback
5330: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5350: 20 20 28 74 72 61 63 65 50 72 69 6f 72 69 74 79    (tracePriority
5360: 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   >= TracePriorit
5370: 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
5380: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76      // NOTE: Inv
53c0: 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20 63 61  oke the trace ca
53d0: 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
53e0: 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20  formatted..     
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5400: 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67 65 20  /       message 
5410: 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f 72 79  and the category
5420: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
5430: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
5440: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5450: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20  caller...       
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
5470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5480: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
5490: 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61  ck(formatted, ca
54a0: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
54b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
54d0: 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a  eturn message;..
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
54f0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
5500: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
5510: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
5520: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
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 2f 2f  ////////////////
5570: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5580: 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52     #region MockR
5590: 65 67 69 73 74 72 79 20 43 6c 61 73 73 0d 0a 20  egistry Class.. 
55a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
55b0: 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b  ealed class Mock
55c0: 52 65 67 69 73 74 72 79 20 3a 20 49 44 69 73 70  Registry : IDisp
55d0: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
55e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
55f0: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
5600: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
5610: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5620: 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20  ockRegistry().. 
5630: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
5650: 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20  atIf = true;..  
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5670: 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a  adOnly = true;..
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5690: 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  safe = true;..  
56a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
56b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5710: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5720: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5730: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
5740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5750: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5760: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
5770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5790: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
57a0: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
57b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
57c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
57d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
57f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5800: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5810: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5820: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
5830: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
5840: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
5850: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
5860: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
5870: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5880: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
5890: 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  (whatIf)..      
58a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
58b0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
58c0: 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c  adOnly = readOnl
58d0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
58e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
58f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5930: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5940: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5950: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
5960: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
5970: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
5980: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
5990: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
59a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
59b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
59c0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
59d0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61        : this(wha
59e0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a  tIf, readOnly)..
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5a10: 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b  his.safe = safe;
5a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
5a40: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
5a50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5aa0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
5ab0: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
5ac0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
5ad0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68   private bool wh
5ae0: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
5af0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
5b00: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
5b10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5b20: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
5b30: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
5b40: 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5b60: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
5b70: 65 64 28 29 3b 20 77 68 61 74 49 66 20 3d 20 76  ed(); whatIf = v
5b80: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
5b90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5ba0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5bf0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
5c00: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d   bool readOnly;.
5c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5c20: 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c  lic bool ReadOnl
5c30: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
5c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5c50: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
5c60: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
5c70: 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20  readOnly; }..   
5c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
5c90: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5ca0: 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76  (); readOnly = v
5cb0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
5cc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5cd0: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5d20: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
5d30: 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20   bool safe;..   
5d40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5d50: 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20  bool Safe..     
5d60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5d70: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
5d80: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5d90: 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d   return safe; }.
5da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5db0: 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   set { CheckDisp
5dc0: 6f 73 65 64 28 29 3b 20 73 61 66 65 20 3d 20 76  osed(); safe = v
5dd0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
5de0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5df0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5e40: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
5e50: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
5e60: 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20   classesRoot;.. 
5e70: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5e80: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
5e90: 79 20 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20  y ClassesRoot.. 
5ea0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5ec0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
5ed0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5ee0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
5ef0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f10: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
5f20: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
5f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f40: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
5f50: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
5f60: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f80: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61      Registry.Cla
5f90: 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66  ssesRoot, whatIf
5fa0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
5fb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5fc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5fd0: 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20   classesRoot;.. 
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6000: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6060: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6070: 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e  gistryKey curren
6080: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
6090: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
60a0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72  kRegistryKey Cur
60b0: 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20  rentConfig..    
60c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
60d0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6100: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6110: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6130: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
6140: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6160: 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67     currentConfig
6170: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6180: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
61a0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75       Registry.Cu
61b0: 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61  rrentConfig, wha
61c0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
61d0: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
61e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
61f0: 75 72 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  urn currentConfi
6200: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6210: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6220: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6230: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6280: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
6290: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
62a0: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
62b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
62c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
62d0: 43 75 72 72 65 6e 74 55 73 65 72 0d 0a 20 20 20  CurrentUser..   
62e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
6300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6320: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6330: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6350: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20  if (currentUser 
6360: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6380: 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20    currentUser = 
6390: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
63a0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63c0: 20 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65    Registry.Curre
63d0: 6e 74 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20  ntUser, whatIf, 
63e0: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
63f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6400: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
6410: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6430: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
64a0: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
64b0: 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74 61 3b  stryKey dynData;
64c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
64d0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
64e0: 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a 20 20  yKey DynData..  
64f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6500: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6520: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6530: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
6540: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6560: 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d 3d 20   if (dynData == 
6570: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
6590: 79 6e 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63  ynData = new Moc
65a0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
65d0: 74 72 79 2e 44 79 6e 44 61 74 61 2c 20 77 68 61  try.DynData, wha
65e0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
65f0: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6610: 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  urn dynData;..  
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6690: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
66a0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
66b0: 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61  istryKey localMa
66c0: 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  chine;..        
66d0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
66e0: 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c  egistryKey Local
66f0: 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20  Machine..       
6700: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6710: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6720: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6750: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6760: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6770: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20  localMachine == 
6780: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
67a0: 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65  ocalMachine = ne
67b0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
67c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
67d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67e0: 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
67f0: 63 68 69 6e 65 2c 20 77 68 61 74 49 66 2c 20 72  chine, whatIf, r
6800: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6820: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f         return lo
6830: 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20  calMachine;..   
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
68c0: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
68d0: 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61  stryKey performa
68e0: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
68f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
6900: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 65 72  kRegistryKey Per
6910: 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20  formanceData..  
6920: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6960: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
6970: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6990: 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65   if (performance
69a0: 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Data == null).. 
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69c0: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
69d0: 63 65 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63  ceData = new Moc
69e0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a00: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
6a10: 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44  try.PerformanceD
6a20: 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ata, whatIf, rea
6a30: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
6a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a50: 20 20 20 20 20 72 65 74 75 72 6e 20 70 65 72 66       return perf
6a60: 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20  ormanceData;..  
6a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6af0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6b00: 69 73 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d  istryKey users;.
6b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6b20: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
6b30: 4b 65 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20  Key Users..     
6b40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6b50: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b80: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
6b90: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6bb0: 20 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29   (users == null)
6bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6bd0: 20 20 20 20 20 20 20 20 20 20 75 73 65 72 73 20            users 
6be0: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
6bf0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 20 20 20 20 52 65 67 69 73 74 72 79 2e 55 73 65      Registry.Use
6c20: 72 73 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  rs, whatIf, read
6c30: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c50: 20 20 20 20 72 65 74 75 72 6e 20 75 73 65 72 73      return users
6c60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6c70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6c80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6c90: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
6ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
6d00: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 22 52 65  egion Public "Re
6d10: 67 69 73 74 72 79 22 20 4d 65 74 68 6f 64 73 0d  gistry" Methods.
6d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6d30: 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61  lic object GetVa
6d40: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
6d50: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
6d60: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
6d70: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
6d80: 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  lueName,..      
6d90: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
6da0: 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20   defaultValue.. 
6db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
6dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6de0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6df0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6e00: 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69       return Regi
6e10: 73 74 72 79 2e 47 65 74 56 61 6c 75 65 28 6b 65  stry.GetValue(ke
6e20: 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61 6d 65  yName, valueName
6e30: 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b  , defaultValue);
6e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6e50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6eb0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53 65    public void Se
6ec0: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
6ed0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
6ee0: 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  keyName,..      
6ef0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
6f00: 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20   valueName,..   
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
6f20: 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ect value..     
6f30: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
6f40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
6f60: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6f80: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
6f90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6fa0: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
6fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6fc0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 53 65       Registry.Se
6fd0: 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20  tValue(keyName, 
6fe0: 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65  valueName, value
6ff0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7000: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7010: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7060: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
7070: 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
7080: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
7090: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  g keyName,..    
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
70b0: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
70d0: 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20  bject value,..  
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
70f0: 67 69 73 74 72 79 56 61 6c 75 65 4b 69 6e 64 20  gistryValueKind 
7100: 76 61 6c 75 65 4b 69 6e 64 0d 0a 20 20 20 20 20  valueKind..     
7110: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
7120: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
7140: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
7160: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
7170: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7180: 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
7190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
71a0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 53 65       Registry.Se
71b0: 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c 20  tValue(keyName, 
71c0: 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c 75 65  valueName, value
71d0: 2c 20 76 61 6c 75 65 4b 69 6e 64 29 3b 0d 0a 20  , valueKind);.. 
71e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
71f0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7200: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7210: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7260: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
7270: 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
7280: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
7290: 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65  ate void CheckRe
72a0: 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20  adOnly()..      
72b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
72c0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
72e0: 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f  NOTE: In "read-o
72f0: 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69  nly" mode, we di
7300: 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65  sallow all write
7310: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20   access...      
7320: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7340: 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20   (!readOnly)..  
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7360: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
7380: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
7390: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
73a0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
73b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
73c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
73d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
73e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
7430: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
7440: 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
7450: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
7460: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
7470: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
7480: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
7490: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
74a0: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
74b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
74d0: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74f0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
7500: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
7510: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
7520: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7540: 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52      typeof(MockR
7550: 65 67 69 73 74 72 79 29 2e 4e 61 6d 65 29 3b 0d  egistry).Name);.
7560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
75d0: 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74   private /* prot
75e0: 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f  ected virtual */
75f0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a   void Dispose(..
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a  bool disposing..
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7630: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
7640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7650: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
7660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7670: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7680: 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73           if (dis
7690: 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20  posing)..       
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
76d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
76e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65        // dispose
7710: 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63   managed resourc
7720: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
7730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7740: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7760: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7780: 20 20 20 20 69 66 20 28 63 6c 61 73 73 65 73 52      if (classesR
7790: 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  oot != null)..  
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77d0: 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74       classesRoot
77e0: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52 6f         classesRo
7810: 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ot = null;..    
7820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7830: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 20 69 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66   if (currentConf
7860: 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ig != null)..   
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78a0: 20 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69      currentConfi
78b0: 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20  g.Close();..    
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 43          currentC
78e0: 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  onfig = null;.. 
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7900: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 55      if (currentU
7930: 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ser != null)..  
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7970: 20 20 20 20 20 63 75 72 72 65 6e 74 55 73 65 72       currentUser
7980: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55 73         currentUs
79b0: 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  er = null;..    
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
79e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79f0: 20 69 66 20 28 64 79 6e 44 61 74 61 20 21 3d 20   if (dynData != 
7a00: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 79                dy
7a40: 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d 0a  nData.Close();..
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 64 79 6e 44              dynD
7a70: 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ata = null;..   
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68 69    if (localMachi
7ac0: 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ne != null)..   
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ae0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65      localMachine
7b10: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b30: 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68         localMach
7b40: 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ine = null;..   
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b80: 20 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63    if (performanc
7b90: 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eData != null)..
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7be0: 63 65 44 61 74 61 2e 43 6c 6f 73 65 28 29 3b 0d  ceData.Close();.
7bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65 72               per
7c10: 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20 6e  formanceData = n
7c20: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7c50: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75             if (u
7c60: 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sers != null).. 
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ca0: 20 20 20 20 20 20 75 73 65 72 73 2e 43 6c 6f 73        users.Clos
7cb0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 75 73 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d    users = null;.
7ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7cf0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7d20: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7d60: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
7d70: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
7d80: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7da0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7de0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
7df0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
7e00: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
7e10: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
7e40: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
7e50: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7e70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7e80: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7e90: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7ea0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ee0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7ef0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
7f00: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
7f10: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
7f20: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
7f30: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
7f40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f50: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
7f60: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
7f70: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
7f80: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
7f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7fb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7fc0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8010: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8020: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
8030: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
8040: 65 67 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20  egistry()..     
8050: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8060: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
8070: 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  e(false);..     
8080: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8090: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
80a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
80b0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
80c0: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
80d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
8120: 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74  egion MockRegist
8130: 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20  ryKey Class..   
8140: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
8150: 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52  aled class MockR
8160: 65 67 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69  egistryKey : IDi
8170: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20  sposable..      
8180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8190: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
81a0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
81b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
81c0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
81d0: 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey()..          
81e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
81f0: 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72       whatIf = tr
8200: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8210: 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20       readOnly = 
8220: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
8230: 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72         safe = tr
8240: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8250: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8260: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
8270: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
82c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
82d0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
82e0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
82f0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
8300: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
8320: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8350: 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20     : this()..   
8360: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8370: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
8380: 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20  .key = key;..   
8390: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
83a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
83b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
83e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
83f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8400: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
8410: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8420: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8430: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8440: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8450: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
8460: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8480: 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20  this(key)..     
8490: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
84a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
84b0: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b  ubKeyName = subK
84c0: 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  eyName;..       
84d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
84e0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8530: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8540: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8560: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8570: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8580: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
8590: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
85a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
85b0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
85c0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
85d0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
85e0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d  ey, subKeyName).
85f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
8620: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
8630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8640: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8690: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
86a0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86c0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
86d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86e0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
86f0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8700: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
8710: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
8720: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
8730: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
8740: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8750: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8760: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8770: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
8780: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8790: 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f        this.readO
87a0: 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d  nly = readOnly;.
87b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
87c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8810: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8820: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8830: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8840: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8850: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8860: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8870: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8890: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
88b0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20  ol readOnly,..  
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
88d0: 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20  ol safe..       
88e0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
8900: 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61  is(key, subKeyNa
8910: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
8920: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
8930: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8940: 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20        this.safe 
8950: 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  = safe;..       
8960: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
8970: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
89c0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
89d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
89e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
89f0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8a00: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
8a10: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
8a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a30: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8a40: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
8a50: 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20  null, whatIf).. 
8a60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8a80: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
8a90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8aa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
8b00: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
8b10: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
8b20: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
8b30: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
8b40: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
8b50: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
8b60: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
8b70: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
8b80: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8b90: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
8ba0: 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49  key, null, whatI
8bb0: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
8bc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
8be0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
8bf0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
8c00: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
8c60: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
8c70: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8c80: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
8c90: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8ca0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
8cb0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
8cc0: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
8cd0: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
8ce0: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
8cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8d00: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8d10: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
8d20: 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65  null, whatIf, re
8d30: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20  adOnly, safe).. 
8d40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8d60: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
8d70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8d80: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
8d90: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
8da0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
8df0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
8e00: 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
8e10: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8e20: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20   void Close().. 
8e30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e60: 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69    // NOTE: No di
8e70: 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72  sposed check her
8e80: 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e  e because callin
8e90: 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20  g this method.. 
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8eb0: 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  /       should b
8ec0: 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c  e just like call
8ed0: 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20  ing Dispose...  
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f00: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
8f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8f20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f70: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8f80: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
8f90: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53  istryKey CreateS
8fa0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
8fb0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8fc0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
8fd0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8fe0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9000: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9020: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9030: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9040: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9050: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9060: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9070: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
9080: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
9090: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
90a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
90c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
90d0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74       // HACK: At
90e0: 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68  tempt to open th
90f0: 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62 2d  e specified sub-
9100: 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  key.  If this.. 
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9120: 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c     //       fail
9130: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
9140: 79 20 72 65 74 75 72 6e 20 74 68 65 20 77 72 61  y return the wra
9150: 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20  pped root key.. 
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9170: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65     //       itse
9180: 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74  lf since no writ
9190: 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69  es are allowed i
91a0: 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20  n 'what-if'..   
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61   //       mode a
91d0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9200: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
9210: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
9220: 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  nSubKey(subKeyNa
9230: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
9240: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
9250: 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75  rn (subKey != nu
9260: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
9270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
9280: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
9290: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 20 20 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61       subKey, wha
92c0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
92d0: 61 66 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  afe) :..        
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92f0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
9300: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9320: 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
9330: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72  yName, whatIf, r
9340: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
9350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9360: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9370: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
9380: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93a0: 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b   return new Mock
93b0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65        key.Create
93e0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
93f0: 65 29 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  e), whatIf, read
9400: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9480: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9490: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c   public void Del
94a0: 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
94c0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
94f0: 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
9500: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9510: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9520: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9530: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
9540: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
9550: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9570: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
9580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9590: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
95b0: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  key.DeleteSubKey
95e0: 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72  (subKeyName, thr
95f0: 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20  owOnMissing);.. 
9600: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
9620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9660: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
9670: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
9680: 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
96a0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
96b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96c0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
96d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
96e0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
96f0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
9700: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
9710: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
9720: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9730: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9750: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9760: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
9770: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
9780: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
9790: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
97a0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20  (subKeyName);.. 
97b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
97c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9810: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
9820: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
9830: 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  eValue(..       
9840: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
9850: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
9860: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
9870: 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20  wOnMissing..    
9880: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9890: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
98b0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98d0: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
98e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98f0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9900: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9910: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9920: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9930: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
9940: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9950: 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74         key.Delet
9960: 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72  eValue(name, thr
9970: 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 20  owOnMissing);.. 
9980: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
9990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
99e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
99f0: 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47  ublic string[] G
9a00: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d  etSubKeyNames().
9a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9a40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9a50: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9a60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9a70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9a80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9a90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9aa0: 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61   key.GetSubKeyNa
9ab0: 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  mes();..        
9ac0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9ad0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9b20: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
9b30: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d  bject GetValue(.
9b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b50: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
9b70: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
9b80: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
9b90: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9ba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9bb0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9bc0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
9bd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
9be0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c00: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c20: 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61  return key.GetVa
9c30: 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c  lue(name, defaul
9c40: 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  tValue);..      
9c50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9c60: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
9cb0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
9cc0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9cd0: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
9ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
9cf0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
9d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d10: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9d20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9d30: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
9d40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9d50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70         return Op
9d60: 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  enSubKey(subKeyN
9d70: 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  ame, false);..  
9d80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9d90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9df0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
9e00: 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28  yKey OpenSubKey(
9e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9e20: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
9e30: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
9e40: 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61        bool writa
9e50: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
9e60: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9e70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9e80: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9e90: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
9ea0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
9eb0: 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20  ritable)..      
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
9ed0: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ef0: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
9f00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
9f10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
9f20: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
9f30: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
9f40: 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79  Key subKey = key
9f50: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9f70: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
9f80: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
9f90: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9fb0: 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e  urn (subKey != n
9fc0: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
9fe0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
9ff0: 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20  subKey, whatIf, 
a000: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20  readOnly, safe) 
a010: 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
a020: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
a030: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a080: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
a090: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0b0: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
a0d0: 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a0f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
a110: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a130: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
a140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a150: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
a160: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a170: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a180: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a190: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
a1a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a1b0: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
a1c0: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
a1d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a1e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
a1f0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
a200: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a250: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
a260: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
a270: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
a280: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
a290: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
a2a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a2b0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
a2c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a2f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a300: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
a310: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
a340: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a350: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21 53         return !S
a360: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
a370: 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20  pty(subKeyName) 
a380: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
a390: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
a3a0: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b  g.Format("{0}\\{
a3b0: 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73  1}", key.Name, s
a3c0: 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20  ubKeyName) :..  
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3e0: 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d        key.Name;.
a3f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a400: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a410: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a420: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a460: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a470: 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67 69      private Regi
a480: 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20  stryKey key;..  
a490: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a4a0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79   RegistryKey Key
a4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a4d0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a4e0: 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66  osed(); CheckSaf
a4f0: 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b  e(); return key;
a500: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a510: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a520: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a570: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
a580: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a  ng subKeyName;..
a590: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a5a0: 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79  ic string SubKey
a5b0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
a5c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a5d0: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
a5e0: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
a5f0: 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d  rn subKeyName; }
a600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a610: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a620: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a670: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
a680: 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
a690: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
a6a0: 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
a6b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a6c0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
a6d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
a6e0: 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a760: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61  private bool rea
a770: 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  dOnly;..        
a780: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
a790: 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  ReadOnly..      
a7a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a7b0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
a7c0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
a7d0: 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b  return readOnly;
a7e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a7f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a800: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a850: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
a860: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
a870: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
a880: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
a890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a8a0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
a8b0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
a8c0: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
a8d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
a8e0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a950: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
a960: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
a970: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a980: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e  void CheckReadOn
a990: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly()..          
a9a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a9b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
a9c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
a9d0: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22  : In "read-only"
a9e0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
a9f0: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63  ow all write acc
aa00: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
aa10: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
aa20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72            if (!r
aa30: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
aa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
aa50: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
aa60: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
aa70: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
aa80: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
aa90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
aaa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaf0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ab00: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
ab10: 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20  eckSafe()..     
ab20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ab30: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ab50: 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22   NOTE: In "safe"
ab60: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
ab70: 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63  ow all direct ac
ab80: 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20  cess to the..   
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
aba0: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20        contained 
abb0: 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20  registry key... 
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
abd0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
abe0: 20 20 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20     if (!safe).. 
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ac20: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
ac30: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
ac40: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
ac50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
ac60: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ac70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
acb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
acc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
acd0: 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a  egion System.Obj
ace0: 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20  ect Overrides.. 
acf0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
ad00: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
ad10: 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20  g ToString()..  
ad20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
ad40: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
ad50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad60: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d   return this.Nam
ad70: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ad80: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
ad90: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
ada0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
adb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
add0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ade0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
adf0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
ae00: 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e  ion Implicit Con
ae10: 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72  version Operator
ae20: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
ae30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
ae40: 2f 20 42 55 47 42 55 47 3a 20 52 65 6d 6f 76 65  / BUGBUG: Remove
ae50: 20 6d 65 3f 20 20 54 68 69 73 20 73 68 6f 75 6c   me?  This shoul
ae60: 64 20 62 65 20 73 61 66 65 20 62 65 63 61 75 73  d be safe becaus
ae70: 65 20 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a  e in 'what-if'..
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
ae90: 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20         mode all 
aea0: 6b 65 79 73 20 61 72 65 20 6f 70 65 6e 65 64 20  keys are opened 
aeb0: 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20  read-only...    
aec0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
aed0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
aee0: 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74 20 6f  tatic implicit o
aef0: 70 65 72 61 74 6f 72 20 52 65 67 69 73 74 72 79  perator Registry
af00: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
af10: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
af20: 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20  ryKey key..     
af30: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
af40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
af60: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
af70: 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75  ) ? key.Key : nu
af80: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
af90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
afa0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
afb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
b010: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
b020: 20 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65   "Pattern" Membe
b030: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b040: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73  private bool dis
b050: 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  posed;..        
b060: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
b070: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
b080: 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
b090: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b0b0: 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20  (!disposed)..   
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
b0f0: 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70  w new ObjectDisp
b100: 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 0d 0a  osedException(..
b110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b120: 20 20 20 20 74 79 70 65 6f 66 28 4d 6f 63 6b 52      typeof(MockR
b130: 65 67 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65  egistryKey).Name
b140: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b150: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b160: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b1b0: 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
b1c0: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
b1d0: 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
b1e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b1f0: 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e     bool disposin
b200: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
b210: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
b220: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b230: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
b240: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
b250: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b260: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
b270: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b2a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b2e0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70           // disp
b2f0: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
b300: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b360: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 21         if (key !
b370: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3b0: 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  key.Close();..  
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3d0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20            key = 
b3e0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b410: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b450: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
b460: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65             // re
b470: 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20  lease unmanaged 
b480: 72 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e  resources here..
b490: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b4a0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b4e0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
b500: 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63  NOTE: This objec
b510: 74 20 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65  t is now dispose
b520: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
b530: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
b560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b570: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b580: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b590: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b5a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
b600: 67 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65  gion IDisposable
b610: 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20   Members..      
b620: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
b630: 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
b640: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b650: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
b660: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
b670: 20 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53              GC.S
b680: 75 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28  uppressFinalize(
b690: 74 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  this);..        
b6a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b6b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b720: 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74  #region Destruct
b730: 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
b740: 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  ~MockRegistryKey
b750: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
b760: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b770: 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65     Dispose(false
b780: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b790: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
b7a0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
b7b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
b7c0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
b7d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b820: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52         #region R
b830: 65 67 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c  egistryHelper Cl
b840: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
b850: 76 61 74 65 20 73 74 61 74 69 63 20 63 6c 61 73  vate static clas
b860: 73 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  s RegistryHelper
b870: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
b880: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b890: 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 50   Public Static P
b8a0: 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..     
b8b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b8c0: 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79  tatic int subKey
b8d0: 73 43 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20  sCreated;..     
b8e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
b8f0: 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73  atic int SubKeys
b900: 43 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20  Created..       
b910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b920: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
b930: 74 75 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61  turn subKeysCrea
b940: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
b950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b960: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b9b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b9c0: 73 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65  static int subKe
b9d0: 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20  ysDeleted;..    
b9e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
b9f0: 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79  tatic int SubKey
ba00: 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20  sDeleted..      
ba10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ba20: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
ba30: 65 74 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c  eturn subKeysDel
ba40: 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  eted; }..       
ba50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ba60: 20 20 20 20 20 20 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
bab0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
bac0: 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56   static int keyV
bad0: 61 6c 75 65 73 53 65 74 3b 0d 0a 20 20 20 20 20  aluesSet;..     
bae0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
baf0: 61 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75  atic int KeyValu
bb00: 65 73 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20  esSet..         
bb10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bb20: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
bb30: 72 6e 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b  rn keyValuesSet;
bb40: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bb50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
bb60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
bbb0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
bbc0: 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73  ic int keyValues
bbd0: 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20  Deleted;..      
bbe0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
bbf0: 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65  tic int KeyValue
bc00: 73 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20  sDeleted..      
bc10: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
bc20: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
bc30: 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 44  eturn keyValuesD
bc40: 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20  eleted; }..     
bc50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
bc60: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
bc70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcc0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bcd0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
bce0: 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73  c Static Methods
bcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
bd00: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
bd10: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
bd20: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
bd30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
bd40: 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  tic MockRegistry
bd50: 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key OpenSubKey(.
bd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd70: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
bd80: 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
bd90: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
bda0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
bdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
bdc0: 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20  ool writable,.. 
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
bde0: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
be00: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
be10: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
be20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
be40: 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  (rootKey == null
be50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
be60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
be70: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
be80: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
be90: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
bea0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
beb0: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
bec0: 77 72 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20  writable ?..    
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
bef0: 79 2e 48 69 67 68 65 73 74 20 3a 20 54 72 61 63  y.Highest : Trac
bf00: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72  ePriority.Higher
bf10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
bf20: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
bf30: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
bf40: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
bf50: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf70: 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c   "rootKey = {0},
bf80: 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31   subKeyName = {1
bf90: 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32  }, writable = {2
bfa0: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
bfc0: 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29  Display(rootKey)
bfd0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62  , ForDisplay(sub
bfe0: 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  KeyName),..     
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72     ForDisplay(wr
c010: 69 74 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43  itable)), traceC
c020: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c050: 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73   // HACK: Always
c060: 20 66 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65   forbid writable
c070: 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65   access when ope
c080: 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20  rating in..     
c090: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c0a0: 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f      'what-if' mo
c0b0: 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de...           
c0c0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c0d0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
c0e0: 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72  istryKey key = r
c0f0: 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65  ootKey.OpenSubKe
c100: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
c110: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61          subKeyNa
c120: 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c  me, whatIf ? fal
c130: 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d  se : writable);.
c140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c150: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21     return (key !
c160: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
c180: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
c190: 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20  ey(key, whatIf, 
c1a0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20  false, false) : 
c1b0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
c1c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
c1d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c210: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c220: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
c230: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
c240: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
c250: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
c260: 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63  ublic static Moc
c270: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65  kRegistryKey Cre
c280: 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  ateSubKey(..    
c290: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
c2a0: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
c2b0: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
c2c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
c2d0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
c2e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
c2f0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
c300: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
c310: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
c320: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
c330: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c340: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
c350: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
c360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c370: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
c380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c390: 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3b0: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
c3c0: 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
c3d0: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
c3e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c3f0: 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
c400: 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
c410: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
c420: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c   "rootKey = {0},
c450: 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31   subKeyName = {1
c460: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
c470: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c480: 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29  Display(rootKey)
c490: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62  , ForDisplay(sub
c4a0: 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  KeyName)),..    
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4c0: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
c4d0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c4e0: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c510: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c520: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
c530: 43 4b 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e 20  CK: Always open 
c540: 61 20 6b 65 79 2c 20 72 61 74 68 65 72 20 74 68  a key, rather th
c550: 61 6e 20 63 72 65 61 74 69 6e 67 20 6f 6e 65 20  an creating one 
c560: 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  when..          
c570: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
c580: 20 20 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 20     operating in 
c590: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d  'what-if' mode..
c5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c5b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c5d0: 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  (whatIf)..      
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c600: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c620: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74       // HACK: At
c630: 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68  tempt to open th
c640: 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62 2d  e specified sub-
c650: 6b 65 79 2e 20 20 49 66 0d 0a 20 20 20 20 20 20  key.  If..      
c660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c670: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20    //       this 
c680: 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73  fails, we will s
c690: 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65  imply return the
c6a0: 20 72 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20   root..         
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6c0: 2f 20 20 20 20 20 20 20 6b 65 79 20 69 74 73 65  /       key itse
c6d0: 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74  lf since no writ
c6e0: 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69  es are allowed i
c6f0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
c700: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c710: 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f      'what-if' mo
c720: 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20  de anyhow...    
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
c770: 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70  key = rootKey.Op
c780: 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  enSubKey(subKeyN
c790: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
c7c0: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 20 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d       key : new M
c7f0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
c800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79   rootKey, subKey
c830: 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 66 61  Name, whatIf, fa
c840: 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  lse, false);..  
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c860: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c870: 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
c8b0: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
c8c0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8e0: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43         rootKey.C
c8f0: 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
c900: 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c  eyName), whatIf,
c910: 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c930: 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20       false);..  
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c950: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
c960: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
c970: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d          finally.
c980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c9a0: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 43          subKeysC
c9b0: 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20  reated++;..     
c9c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c9d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
c9f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ca30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
ca40: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
ca50: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
ca60: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
ca70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
ca80: 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  tic void DeleteS
ca90: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
caa0: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
cab0: 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
cac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cad0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
cae0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
caf0: 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
cb00: 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
cb20: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
cb30: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
cb40: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
cb50: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
cb60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cb70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
cb80: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cbc0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
cbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbe0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
cbf0: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
cc00: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc20: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
cc30: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
cc40: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
cc50: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
cc70: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
cc80: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c  bKeyName = {1}",
cc90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cca0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
ccb0: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
ccc0: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
ccd0: 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
cd00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd10: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
cd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd30: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65        rootKey.De
cd40: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
cd50: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
cd60: 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssing);....     
cd70: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
cd80: 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  ysDeleted++;..  
cd90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
cda0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a  //////////////..
cdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
ce00: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
ce10: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
ce20: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
ce30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
ce40: 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  tic void DeleteS
ce50: 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
ce70: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
ce80: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
ce90: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
cea0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
ceb0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
cec0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
ced0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
cee0: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
cef0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
cf00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cf10: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
cf20: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf40: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
cf60: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
cf80: 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
cf90: 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
cfa0: 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfc0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
cfd0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
cfe0: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
cff0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
d000: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
d010: 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
d020: 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a  eyName = {1}",..
d030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d040: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d050: 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72  ay(rootKey), For
d060: 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
d070: 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
d090: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d0b0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0d0: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65      rootKey.Dele
d0e0: 74 65 53 75 62 4b 65 79 54 72 65 65 28 73 75 62  teSubKeyTree(sub
d0f0: 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  KeyName);....   
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
d110: 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a  KeysDeleted++;..
d120: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d160: 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d190: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
d1a0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
d1b0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
d1c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d1d0: 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47  tatic string[] G
d1e0: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a  etSubKeyNames(..
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d200: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
d210: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
d220: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
d230: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
d240: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
d250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d260: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
d270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d280: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
d290: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
d2a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d2b0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
d2c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
d2d0: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
d2f0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
d300: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
d310: 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20  .High,..        
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d330: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
d340: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
d350: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d370: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
d380: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65  ", ForDisplay(ke
d390: 79 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  y)), traceCatego
d3a0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
d3b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
d3c0: 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  ey.GetSubKeyName
d3d0: 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  s();..          
d3e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
d3f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
d440: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
d450: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
d460: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
d470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
d480: 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a 65  blic static obje
d490: 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  ct GetValue(..  
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
d4b0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
d4c0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
d4d0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
d4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4f0: 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
d500: 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  Value,..        
d510: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
d520: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
d530: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
d540: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
d550: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
d560: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d570: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
d580: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d590: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d5a0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d5c0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
d5e0: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
d5f0: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
d600: 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  ty.High,..      
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
d630: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
d640: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d660: 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b          "key = {
d670: 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20  0}, name = {1}, 
d680: 64 65 66 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b  defaultValue = {
d690: 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  2}",..          
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
d6b0: 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46  rDisplay(key), F
d6c0: 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c  orDisplay(name),
d6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d6e0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
d6f0: 70 6c 61 79 28 64 65 66 61 75 6c 74 56 61 6c 75  play(defaultValu
d700: 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
d710: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
d720: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b          return k
d730: 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65  ey.GetValue(name
d740: 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b  , defaultValue);
d750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d7b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d7c0: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d7d0: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d7e0: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d7f0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d800: 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74   static void Set
d810: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d820: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d830: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d850: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d860: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
d870: 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20  ct value,..     
d880: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
d890: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
d8a0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
d8b0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
d8c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
d8d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d8e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
d8f0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d910: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
d920: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
d930: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
d940: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
d950: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
d960: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
d970: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
d980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d990: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
d9a0: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
d9b0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
d9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d9d0: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
d9e0: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c  {0}, name = {1},
d9f0: 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a   value = {2}",..
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da10: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
da20: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
da30: 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69  lay(name), ForDi
da40: 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d 0a  splay(value)),..
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
da70: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
da80: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
da90: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
daa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
dab0: 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .SetValue(name, 
dac0: 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  value);....     
dad0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61             keyVa
dae0: 6c 75 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20  luesSet++;..    
daf0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
db00: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
db10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
db20: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
db50: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
db60: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
db70: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
db80: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
db90: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
dba0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c  c void DeleteVal
dbb0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
dbc0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
dbd0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
dbe0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
dbf0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
dc00: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
dc10: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
dc30: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
dc50: 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
dc60: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
dc70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
dc90: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
dcd0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
dd00: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
dd10: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd30: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
dd40: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
dd50: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
dd60: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
dd80: 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20  y = {0}, name = 
dd90: 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {1}", ForDisplay
dda0: 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20  (key),..        
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29  ForDisplay(name)
ddd0: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
dde0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ddf0: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
de00: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
de10: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
de20: 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68  teValue(name, th
de30: 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a  rowOnMissing);..
de40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
de50: 20 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74    keyValuesDelet
de60: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
de70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
de80: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
de90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
dea0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
deb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
dec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ded0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
def0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
df00: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
df10: 6e 20 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61  n StringList Cla
df20: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
df30: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
df40: 20 53 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69   StringList : Li
df50: 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  st<string>..    
df60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
df70: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
df80: 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
df90: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
dfa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
dfb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dfc0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
dfd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
dfe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
dff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e040: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
e050: 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73  st(IEnumerable<s
e060: 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f  tring> collectio
e070: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e080: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
e090: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
e0a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e0b0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e0c0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e0d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e0e0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e0f0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e140: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e150: 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67    #region String
e160: 44 69 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73  Dictionary Class
e170: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e180: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
e190: 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20  tringDictionary 
e1a0: 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  : Dictionary<str
e1b0: 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20  ing, string>..  
e1c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e1d0: 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
e1e0: 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a  ngDictionary()..
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e210: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e220: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
e230: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
e240: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
e250: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
e2a0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
e2b0: 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c  n VersionList Cl
e2c0: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
e2d0: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
e2e0: 73 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20  s VersionList : 
e2f0: 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20  List<Version>.. 
e300: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e310: 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
e320: 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20  sionList()..    
e330: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
e340: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
e350: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e360: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
e370: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
e380: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
e390: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
e3e0: 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
e3f0: 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61  ionList(IEnumera
e400: 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c  ble<Version> col
e410: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
e420: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
e430: 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20  (collection)..  
e440: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
e460: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
e470: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
e480: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
e490: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
e4a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e4f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
e500: 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73  VersionMap Class
e510: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e520: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
e530: 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74  ersionMap : Dict
e540: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56  ionary<string, V
e550: 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20  ersionList>..   
e560: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e570: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
e580: 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20  onMap()..       
e590: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e5a0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
e5b0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
e5c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
e5d0: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
e5e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
e5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
e640: 20 20 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61     #region Packa
e650: 67 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ge Class..      
e660: 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65    internal seale
e670: 64 20 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d  d class Package.
e680: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e690: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
e6a0: 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
e6b0: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
e6c0: 20 70 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28   public Package(
e6d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6f0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
e720: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
e730: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e780: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
e790: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
e7a0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
e7b0: 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
e7c0: 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
e7d0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
e7e0: 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
e7f0: 4e 61 6d 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  Name AssemblyNam
e800: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e820: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
e830: 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d 0d 0a  ssemblyName; }..
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 4e 61  set { assemblyNa
e860: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
e870: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e880: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e8d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e8e0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c 6f 62  rivate bool glob
e8f0: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e910: 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c  blic bool Global
e920: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 0d 0a 20  AssemblyCache.. 
e930: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
e950: 74 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f 62 61  t { return globa
e960: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 20  lAssemblyCache; 
e970: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
e980: 20 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 6c 41     set { globalA
e990: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 76  ssemblyCache = v
e9a0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
e9b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e9c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
e9d0: 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
ea10: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
ea20: 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b   Guid packageId;
ea30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ea40: 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67  blic Guid Packag
ea50: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
ea60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ea70: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
ea80: 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20   packageId; }.. 
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
eaa0: 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d  et { packageId =
eab0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
eac0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ead0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
eae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
eb20: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
eb30: 74 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49  te Guid serviceI
eb40: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
eb50: 70 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76  public Guid Serv
eb60: 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  iceId..         
eb70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eb80: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
eb90: 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d  rn serviceId; }.
eba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ebb0: 20 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64   set { serviceId
ebc0: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ebd0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ebe0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ebf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ec30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ec40: 76 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f  vate Guid dataSo
ec50: 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  urceId;..       
ec60: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
ec70: 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20   DataSourceId.. 
ec80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
eca0: 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53  t { return dataS
ecb0: 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  ourceId; }..    
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
ecd0: 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d  { dataSourceId =
ece0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
ecf0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ed00: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ed10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ed50: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ed60: 74 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76  te Guid dataProv
ed70: 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20  iderId;..       
ed80: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
ed90: 20 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d   DataProviderId.
eda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74  get { return dat
edd0: 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a  aProviderId; }..
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64  set { dataProvid
ee00: 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  erId = value; }.
ee10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ee20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ee30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee70: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ee80: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64   private Guid ad
ee90: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
eea0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
eeb0: 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65  ublic Guid AdoNe
eec0: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20  tTechnologyId.. 
eed0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
eef0: 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65  t { return adoNe
ef00: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d  tTechnologyId; }
ef10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef20: 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65    set { adoNetTe
ef30: 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c  chnologyId = val
ef40: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
ef50: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
ef60: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
ef70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ef80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
ef90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
efa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
efe0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
eff0: 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
f000: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
f010: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
f020: 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ass Configuratio
f030: 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  n..        {..  
f040: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
f050: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
f060: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
f070: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63   private const c
f080: 68 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27  har Switch = '-'
f090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
f0a0: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61  rivate const cha
f0b0: 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f  r AltSwitch = '/
f0c0: 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ';....          
f0d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f110: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f120: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
f130: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61  tic readonly cha
f140: 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20  r[] SwitchChars 
f150: 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
f160: 20 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74       Switch, Alt
f170: 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20  Switch..        
f180: 20 20 20 20 7d 3b 0d 0a 20 20 20 20 20 20 20 20      };..        
f190: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f1f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f200: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
f210: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
f220: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f230: 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te Configuration
f240: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f250: 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
f260: 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
f270: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
f280: 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  gFileName,..    
f290: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
f2a0: 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f2c0: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
f2d0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
f2e0: 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
f2f0: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
f300: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
f310: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
f320: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
f330: 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 67 69       string regi
f340: 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  stryVersion,..  
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f360: 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69  ring configVersi
f370: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
f380: 20 20 20 20 20 73 74 72 69 6e 67 20 76 73 56 65       string vsVe
f390: 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20 20  rsionSuffix,..  
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
f3b0: 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74  ring debugFormat
f3c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f3d0: 20 20 20 73 74 72 69 6e 67 20 74 72 61 63 65 46     string traceF
f3e0: 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
f3f0: 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
f400: 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67  lags installFlag
f410: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
f420: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
f430: 79 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c  y debugPriority,
f440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f450: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
f460: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
f4a0: 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20  ool install,..  
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f4c0: 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
f4d0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f4e0: 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
f4f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f500: 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f     bool noDeskto
f510: 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p,..            
f520: 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61      bool noCompa
f530: 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct,..           
f540: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
f550: 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x20,..          
f560: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
f570: 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx40,..         
f580: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
f590: 74 46 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20  tFx45,..        
f5a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
f5b0: 73 32 30 30 35 2c 0d 0a 20 20 20 20 20 20 20 20  s2005,..        
f5c0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
f5d0: 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20 20  s2008,..        
f5e0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
f5f0: 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20 20  s2010,..        
f600: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 56          bool noV
f610: 73 32 30 31 32 2c 0d 0a 20 20 20 20 20 20 20 20  s2012,..        
f620: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 54          bool noT
f630: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
f640: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f         bool noCo
f650: 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  nsole,..        
f660: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4c          bool noL
f670: 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og,..           
f680: 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
f690: 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
f6a0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
f6b0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
f6c0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 65           bool de
f6d0: 62 75 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bug,..          
f6e0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
f6f0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
f700: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72       bool confir
f710: 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
f720: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
f730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f740: 20 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62       this.assemb
f750: 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a  ly = assembly;..
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f770: 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  this.logFileName
f780: 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d   = logFileName;.
f790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7a0: 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20   this.directory 
f7b0: 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20  = directory;..  
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
f7d0: 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  is.coreFileName 
f7e0: 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d  = coreFileName;.
f7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f800: 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61   this.linqFileNa
f810: 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  me = linqFileNam
f820: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
f830: 20 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65      this.designe
f840: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69  rFileName = desi
f850: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  gnerFileName;.. 
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f870: 68 69 73 2e 72 65 67 69 73 74 72 79 56 65 72 73  his.registryVers
f880: 69 6f 6e 20 3d 20 72 65 67 69 73 74 72 79 56 65  ion = registryVe
f890: 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
f8a0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e          this.con
f8b0: 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 63 6f 6e  figVersion = con
f8c0: 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  figVersion;..   
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
f8e0: 73 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  s.vsVersionSuffi
f8f0: 78 20 3d 20 76 73 56 65 72 73 69 6f 6e 53 75 66  x = vsVersionSuf
f900: 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fix;..          
f910: 20 20 20 20 20 20 74 68 69 73 2e 64 65 62 75 67        this.debug
f920: 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67 46 6f  Format = debugFo
f930: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
f940: 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
f950: 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46  eFormat = traceF
f960: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
f970: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73          this.ins
f980: 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74  tallFlags = inst
f990: 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
f9a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
f9b0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
f9c0: 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a  debugPriority;..
f9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9e0: 74 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69  this.tracePriori
f9f0: 74 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69  ty = tracePriori
fa00: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
fa10: 20 20 20 20 20 74 68 69 73 2e 70 65 72 55 73 65       this.perUse
fa20: 72 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20 20  r = perUser;..  
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fa40: 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73  is.install = ins
fa50: 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
fa60: 20 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77 36         this.wow6
fa70: 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20  4 = wow64;..    
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
fa90: 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
faa0: 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  n = noRuntimeVer
fab0: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
fac0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65         this.noDe
fad0: 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f  sktop = noDeskto
fae0: 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
faf0: 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61      this.noCompa
fb00: 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d  ct = noCompact;.
fb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb20: 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20   this.noNetFx20 
fb30: 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20  = noNetFx20;..  
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fb50: 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e  is.noNetFx40 = n
fb60: 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20  oNetFx40;..     
fb70: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fb80: 6e 6f 4e 65 74 46 78 34 35 20 3d 20 6e 6f 4e 65  noNetFx45 = noNe
fb90: 74 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20  tFx45;..        
fba0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
fbb0: 73 32 30 30 35 20 3d 20 6e 6f 56 73 32 30 30 35  s2005 = noVs2005
fbc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
fbd0: 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30 38     this.noVs2008
fbe0: 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20   = noVs2008;..  
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
fc00: 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e 6f  is.noVs2010 = no
fc10: 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20  Vs2010;..       
fc20: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
fc30: 56 73 32 30 31 32 20 3d 20 6e 6f 56 73 32 30 31  Vs2012 = noVs201
fc40: 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
fc50: 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65      this.noTrace
fc60: 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20   = noTrace;..   
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fc80: 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f  s.noConsole = no
fc90: 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20  Console;..      
fca0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
fcb0: 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20  oLog = noLog;.. 
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fcd0: 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69  his.throwOnMissi
fce0: 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ng = throwOnMiss
fcf0: 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
fd00: 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
fd10: 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
fd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
fd30: 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75 67 3b  s.debug = debug;
fd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd50: 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65 20 3d    this.verbose =
fd60: 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
fd70: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
fd80: 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69 72  confirm = confir
fd90: 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
fda0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
fdb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
fdc0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
fe20: 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
fe30: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
fe40: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
fe50: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 44  static void GetD
fe60: 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
fe70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fe80: 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 69 72    ref string dir
fe90: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
fea0: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
feb0: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
fec0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fed0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 6c 69     ref string li
fee0: 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
ff00: 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
ff10: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
ff20: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
ff30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ff40: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ff50: 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20  thisAssembly == 
ff60: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
ff70: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
ff80: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
ff90: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
ffa0: 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74  = Path.GetDirect
ffb0: 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73 65  oryName(thisAsse
ffc0: 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d  mbly.Location);.
ffd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ffe0: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
fff0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
10000 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10020 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
10030 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
10040 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
10050 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f      Installer.Co
10080 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
100b0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
100c0 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
100d0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
100e0 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
100f0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
10100 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72          designer
10110 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
10120 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
10130 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
10140 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
10150 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  r.DesignerFileNa
10160 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
10170 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10180 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
10190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
101c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
101d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
101e0 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 4f  atic bool CheckO
101f0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
10200 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
10210 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20 20  ng arg..        
10220 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
10230 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10240 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10250 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d 0a   result = arg;..
10260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10270 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
10280 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75  NullOrEmpty(resu
10290 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lt))..          
102a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
102c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
102e0 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e 67  move all leading
102f0 20 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d 0a   switch chars...
10300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10310 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10320 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
10330 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69 6d  lt = result.Trim
10340 53 74 61 72 74 28 53 77 69 74 63 68 43 68 61 72  Start(SwitchChar
10350 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
10360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77 20     // NOTE: How 
10390 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72 65 20  many chars were 
103a0 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20 20  removed?..      
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
103c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
103d0 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 20        int count 
103e0 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20 72  = arg.Length - r
103f0 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  esult.Length;...
10400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10410 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
10430 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65 20  NOTE: Was there 
10440 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a 20  at least one?.. 
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10470 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
10480 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20 20  ount > 0)..     
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
104a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
104b0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f        // NOTE: O
104e0 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69 72  k, replace their
104f0 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20   original..     
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67 75     //       argu
10520 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ment...         
10530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10540 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
10550 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20 3d             arg =
10560 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20   result;....    
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68  // NOTE: Yes, th
105b0 69 73 20 69 73 20 61 20 73 77 69 74 63 68 2e 0d  is is a switch..
105c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
105d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
10600 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10610 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
10640 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
10650 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
10670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
106a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
106b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
106c0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
106d0 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d 0a  l MatchOption(..
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106f0 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20 20  string arg,..   
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
10710 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ing option..    
10720 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
10730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10750 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 20   ((arg == null) 
10760 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75  || (option == nu
10770 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
10780 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
10790 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
107a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
107b0 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  n String.Compare
107c0 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c  (arg, 0, option,
107d0 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0,..           
107e0 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65 6e           arg.Len
107f0 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  gth, StringCompa
10800 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
10810 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a  oreCase) == 0;..
10820 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
10830 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
10840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10890 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
108a0 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65 61  ool? ParseBoolea
108b0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
108c0 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d      string text.
108d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108e0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
108f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10900 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
10910 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78  sNullOrEmpty(tex
10920 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
10930 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10940 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10950 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20   value;....     
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
10970 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65  f (bool.TryParse
10980 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75 65  (text, out value
10990 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
109a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
109b0 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  rn value;..     
109c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
109f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10a00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
10a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
10a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
10a60 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
10a70 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  ect ParseEnum(..
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a90 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d 0a  Type enumType,..
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20 20  string text,..  
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10ad0 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20 20  ol noCase..     
10ae0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10af0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10b10 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e 75  ((enumType == nu
10b20 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70 65  ll) || !enumType
10b30 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20 20  .IsEnum)..      
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10b50 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
10b70 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
10b80 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a  OrEmpty(text))..
10b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10bb0 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10be0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10bf0 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e 75  n Enum.Parse(enu
10c00 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f 43  mType, text, noC
10c10 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ase);..         
10c20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c70 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
10c80 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
10c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10cc0 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
10cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
10ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
10cf0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
10d00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10d50 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
10d60 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
10d70 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
10d80 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
10d90 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ic Configuration
10da0 20 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29   CreateDefault()
10db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
10dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10dd0 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
10de0 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y = null;..     
10df0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10e00 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g coreFileName =
10e10 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
10e20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
10e30 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75  inqFileName = nu
10e40 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
10e50 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69       string desi
10e60 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 6e  gnerFileName = n
10e70 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
10e80 20 20 20 20 20 20 20 20 47 65 74 44 65 66 61 75          GetDefau
10e90 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20  ltFileNames(..  
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 20 72 65 66 20 64 69 72 65 63 74 6f 72 79 2c    ref directory,
10ec0 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e 61 6d   ref coreFileNam
10ed0 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c 65 4e  e, ref linqFileN
10ee0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
10ef0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64 65            ref de
10f00 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
10f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10f20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43      return new C
10f30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74 68 69  onfiguration(thi
10f40 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c  sAssembly, null,
10f50 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c   coreFileName, l
10f80 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73  inqFileName, des
10f90 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e  ignerFileName, n
10fa0 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 6e 75 6c 6c 2c 20 54 72 61 63 65 4f 70 73 2e 44  null, TraceOps.D
10fd0 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63  ebugFormat, Trac
10fe0 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
10ff0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11000 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
11010 61 67 73 2e 44 65 66 61 75 6c 74 2c 20 54 72 61  ags.Default, Tra
11020 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75  cePriority.Defau
11030 6c 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt,..           
11040 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11050 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20  iority.Default, 
11060 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 66 61 6c  false, true, fal
11070 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
11080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11090 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
110a0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
110b0 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
110c0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
110f0 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74  , false, true, t
11100 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
11110 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
11120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11130 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
11140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
11180 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
11190 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
111a0 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
111b0 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
111c0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
111d0 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28  c bool FromArgs(
111e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
111f0 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
11200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11210 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ref Configuratio
11240 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
11250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11260 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
11270 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
11280 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
11290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
112a0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
112b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75    if (args == nu
112e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11300 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
11330 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11350 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
11360 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69  on = Configurati
11370 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74  on.CreateDefault
11380 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
11390 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
113a0 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e  ength = args.Len
113b0 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
113c0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
113d0 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
113e0 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
113f0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11420 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
11430 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  arg = args[index
11440 5d 3b 0d 0a 0d 0a 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 2f 2f                //
11460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11470 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11480 45 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75  E: Skip any argu
11490 6d 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c  ment that is nul
114a0 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74  l (?) or an empt
114b0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
114c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
114d0 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...   
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
11520 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d  llOrEmpty(arg)).
11530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
11550 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11570 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11590 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f   NOTE: We are go
115a0 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ing to modify th
115b0 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
115c0 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
115e0 20 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e        by removin
115f0 67 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70  g any leading op
11600 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b  tion characters;
11610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11620 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
11630 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65     therefore, we
11640 20 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e   use a new strin
11650 67 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20  g to hold the.. 
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11680 6d 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e  modified argumen
11690 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
116a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
116d0 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a  ewArg = arg;....
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
11720 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
11730 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
11740 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e    //       begin
11770 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20   with an option 
11780 63 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20  character (e.g. 
11790 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20  a minus..       
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72   //       or for
117c0 77 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74  ward slash); att
117d0 65 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65  empt to validate
117e0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..         
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11800 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66  /       now.  If
11810 20 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69   we fail in stri
11820 63 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20  ct mode, we are 
11830 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  done;..         
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11850 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  /       otherwis
11860 65 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69  e, just skip thi
11870 73 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  s argument and a
11880 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118a0 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20  //       to the 
118b0 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  next one...     
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
118e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
118f0 66 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28  f (!CheckOption(
11900 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20  ref newArg))..  
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11940 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
11950 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
11960 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11990 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
119a0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
119d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
119e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
119f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a00 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
11a10 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11a20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b  line argument: {
11a30 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a50 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
11a60 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
11a70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
11aa0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
11ad0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11b50 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
11b60 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
11b70 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
11b80 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
11b90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11ba0 20 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65      have a value
11bb0 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74  ; therefore, att
11bc0 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d  empt to advance.
11bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11be0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11bf0 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66    to it now.  If
11c00 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65   we fail, we are
11c10 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20   done...        
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11c40 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
11c50 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c70 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e  if (index >= len
11c80 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gth)..          
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11cc0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
11cd0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11d00 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
11d10 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
11d20 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11d50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11d60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
11d90 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
11da0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
11dd0 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
11de0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
11e10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e30 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
11e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e60 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11eb0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
11ec0 3a 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75  : Grab the textu
11ed0 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  al value of this
11ee0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
11f10 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f30 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
11f50 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b  ing text = args[
11f60 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11fa0 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
11fb0 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
11fc0 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
11fd0 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11ff0 20 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e         (based on
12000 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20   a partial name 
12010 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20  match) and then 
12020 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12040 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72        to interpr
12050 65 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  et the textual v
12060 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72  alue as the corr
12070 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12090 20 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20        type...   
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
120e0 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67  (newArg, "config
120f0 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
12140 2e 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d  .configVersion =
12150 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 7d 0d 0a 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 65 6c 73 65 20             else 
12190 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
121a0 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d  newArg, "confirm
121b0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
121f0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
12200 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
12210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12230 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12280 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12290 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
122a0 0a 20 20 20 20 20 20 20 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 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
122d0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
122e0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12310 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12320 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
12360 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
12370 7d 22 2c 0d 0a 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 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
123a0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
123b0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
123f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
12420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12450 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12470 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
124a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
124c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
124d0 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  firm = (bool)val
124e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
12520 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12530 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61  Arg, "coreFileNa
12540 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
12550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
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 63 6f                co
12580 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
12590 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
125a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
125c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125d0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
125e0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
125f0 2c 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20  , "debug"))..   
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12630 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
12640 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
12650 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
12660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12670 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
12680 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 20 20 20 20 20 7b 0d 0a 20 20 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 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
126d0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
126e0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 20 20 54 72 61               Tra
12710 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
12720 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
12730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
12760 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
12770 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12790 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
127a0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
127b0 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
127c0 20 20 20 20 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 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
127f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12800 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12830 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12860 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12890 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 20 20 20 20 20 20 63                 c
128c0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
128d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 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 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12910 74 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f  tion.debug = (bo
12920 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
12960 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
12970 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
12980 67 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  gFormat"))..    
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
129b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
129d0 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74  .debugFormat = t
129e0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
12a10 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
12a20 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
12a30 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
12a70 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12a80 41 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72  Arg, "debugPrior
12a90 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
12ad0 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
12ae0 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
12b10 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
12b20 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
12b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12b50 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ba0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12bb0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
12bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12bf0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
12c00 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12c30 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12c40 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c70 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
12c80 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
12c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
12cc0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
12cd0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
12ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cf0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12d00 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12d30 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12d60 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12d90 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12db0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12de0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
12df0 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
12e00 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12e30 2e 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d  .DebugPriority =
12e40 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
12e50 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20  ebugPriority;.. 
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e90 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
12ea0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
12eb0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
12ec0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
12f00 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
12f10 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  erFileName = tex
12f20 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
12f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
12f60 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
12f70 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29  rg, "directory")
12f80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12f90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fb0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12fc0 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
12fd0 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
13000 20 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 2f 2f 20 4e 4f 54 45           // NOTE
13020 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74  : *SPECIAL* Must
13030 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c   refresh the fil
13040 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  e names..       
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65       //       he
13070 72 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75  re because the u
13080 6e 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74  nderlying direct
13090 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
130c0 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
130d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46      string coreF
13110 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
13120 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65  uration.coreFile
13130 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
13160 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
13170 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  oreFileName)).. 
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
131a0 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
131b0 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
131c0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
131d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
131f0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
13200 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61  Empty(coreFileNa
13210 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
13220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13230 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61        coreFileNa
13240 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43  me = Installer.C
13250 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  oreFileName;....
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13280 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
13290 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
132a0 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
132d0 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
132e0 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
132f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
13310 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61  tring linqFileNa
13320 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
13330 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  on.linqFileName;
13340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
13370 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
13380 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
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 6c 69 6e 71 46 69            linqFi
133b0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65  leName = Path.Ge
133c0 74 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69  tFileName(linqFi
133d0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
13400 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
13410 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
13420 0a 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 20 20 20 20                  
13440 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
13450 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69  Installer.LinqFi
13460 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13490 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
134a0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
134b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
134e0 2e 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71  .directory, linq
134f0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
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 73 74 72 69 6e 67            string
13520 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
13530 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
13540 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
13550 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13570 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
13580 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
13590 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
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 20 20 20 20 20 20 20                  
135c0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
135d0 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
135e0 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c  Name(designerFil
135f0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
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 69 66 20 28 53 74 72 69 6e         if (Strin
13620 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
13630 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13640 29 29 0d 0a 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 20 20 20                  
13660 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
13670 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
13680 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
13690 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
136c0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
136d0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
136e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
13710 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67  directory, desig
13720 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13760 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
13770 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
13780 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20  install"))..    
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
137d0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
137e0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13810 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13830 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13860 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13870 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
138a0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
138b0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
138c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
138f0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13900 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13930 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13940 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13970 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13980 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13990 29 29 2c 0d 0a 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 20 20 20                  
139b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
139c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
139d0 20 20 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 69 66 20 28              if (
139f0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
13a00 20 20 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 72 65 74               ret
13a20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13a50 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a90 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
13aa0 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62  ion.install = (b
13ab0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13af0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
13b00 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
13b10 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20  tallFlags"))..  
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
13b60 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b90 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c  typeof(InstallFl
13ba0 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ags), text, true
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 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
13be0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
13c30 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13c40 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
13c70 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
13c80 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13cc0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
13cd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
13d00 69 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61  install flags va
13d10 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  lue: {0}",..    
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
13d50 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
13d60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
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 73 74 72 69 63 74        if (strict
13d90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13dc0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13df0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
13e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
13e40 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e  stallFlags = (In
13e50 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65  stallFlags)value
13e60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13e70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
13ea0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
13eb0 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  g, "linqFileName
13ec0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13f00 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69  iguration.linqFi
13f10 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a  leName = text;..
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 7d 0d 0a 20 20 20 20 20          }..     
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
13f60 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
13f70 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d  "logFileName")).
13f80 0a 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 7b 0d 0a 20 20 20 20           {..    
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fb0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13fc0 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
13fd0 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14010 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14020 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f  on(newArg, "noCo
14030 6d 70 61 63 74 22 29 29 0d 0a 20 20 20 20 20 20  mpact"))..      
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
14080 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
14090 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
140c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14100 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
14110 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
14120 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
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 54 72 61 63 65 50            TraceP
14150 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14160 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14190 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
141a0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
141b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
141e0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
141f0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
14220 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
14230 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
14240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14270 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
142a0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
142d0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
142e0 20 20 20 20 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 63 6f 6e 74              cont
14300 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14350 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62  n.noCompact = (b
14360 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
143a0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
143b0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43  ion(newArg, "noC
143c0 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20  onsole"))..     
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
14410 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
14420 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14440 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
14450 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14470 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
144a0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
144b0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 20 54 72 61 63 65             Trace
144e0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
144f0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
14500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
14530 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
14540 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
14570 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
14580 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
14590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
145b0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
145c0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
145d0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
14600 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
14630 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
14660 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
14670 20 20 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 63 6f 6e               con
14690 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
146e0 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 28  on.noConsole = (
146f0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14730 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
14740 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
14750 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20 20 20  Desktop"))..    
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
147a0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
147b0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
147e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
14830 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
14840 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
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 20 20 20 54 72 61 63              Trac
14870 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
14880 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
14890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
148c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
148d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
14900 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
14910 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14940 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14950 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14960 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14990 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
149c0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 72 65 74               ret
149f0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14a00 20 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 63 6f                co
14a20 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14a70 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  ion.noDesktop = 
14a80 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
14ad0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
14ae0 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
14b30 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
14b40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
14b70 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
14bc0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
14bd0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 20 54 72 61 63 65 50 72           TracePr
14c00 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
14c10 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14c50 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
14c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
14c90 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
14ca0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
14cd0 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
14ce0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
14cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
14d20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
14d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
14d50 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
14d80 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
14db0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
14e00 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76  .noLog = (bool)v
14e10 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e40 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
14e50 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
14e60 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 32  ewArg, "noNetFx2
14e70 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
14e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
14eb0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
14ec0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
14ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
14ef0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
14f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
14f50 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
14f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
14f90 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
14fa0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fd0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
14fe0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15010 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
15020 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
15030 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15060 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15070 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
150b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
150e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72 6e 20 66 61         return fa
15110 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
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 63 6f 6e 74 69 6e 75 65          continue
15140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15180 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
15190 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29  NetFx20 = (bool)
151a0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
151d0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
151e0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
151f0 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
15200 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  40"))..         
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
15240 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
15250 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
15260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15280 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
15290 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
152b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
152e0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
152f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
15320 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
15330 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15360 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
15370 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
153b0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
153c0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
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 20 46 6f 72 44 69             ForDi
153f0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
15400 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15440 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
15470 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
15480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15490 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
154a0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
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 63 6f 6e 74 69 6e 75           continu
154d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 7d 0d 0a 0d 0a 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 20                  
15510 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
15520 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c  oNetFx40 = (bool
15530 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15560 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15570 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15580 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
15590 78 34 35 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x45"))..        
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 7b 0d 0a 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 62                 b
155d0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
155e0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
155f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15610 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
15620 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 7b 0d 0a 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 20 20 20 20 20                  
15660 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
15670 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
15680 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
156b0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
156c0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
15700 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
15710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15730 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
15740 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
15750 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
15760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15770 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
15780 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
15790 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
157a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
157b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
157d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
157e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157f0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
15800 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
15830 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
15860 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15880 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
158b0 6e 6f 4e 65 74 46 78 34 35 20 3d 20 28 62 6f 6f  noNetFx45 = (boo
158c0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
158d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15900 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
15910 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e  n(newArg, "noRun
15920 74 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a  timeVersion"))..
15930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15940 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
15970 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
15980 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
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 69 66 20 28 76 61 6c 75          if (valu
159b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
159e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15a00 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
15a10 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a40 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
15a50 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
15a60 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
15a90 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
15aa0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
15ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
15ad0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
15ae0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20 20                  
15b10 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
15b20 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
15b30 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
15b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15b60 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b90 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
15bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c30 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
15c40 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d  uration.noRuntim
15c50 65 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c  eVersion = (bool
15c60 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15c90 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
15ca0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
15cb0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63  (newArg, "noTrac
15cc0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15ce0 0a 20 20 20 20 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 62 6f 6f               boo
15d00 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15d10 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15d40 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
15d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15d70 0a 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15da0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
15db0 0d 0a 20 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 54 72 61 63 65 50 72 69 6f 72        TracePrior
15de0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15df0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
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 20 20                  
15e20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15e30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15e40 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
15e70 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
15e80 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15eb0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15ec0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15f00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
15f30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
15f60 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
15f90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
15fe0 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61  Trace = (bool)va
15ff0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16020 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
16030 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
16040 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22  wArg, "noVs2005"
16050 29 29 0d 0a 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 7b 0d 0a 20              {.. 
16070 20 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 62 6f 6f 6c 3f             bool?
16090 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
160a0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
160b0 20 20 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 69 66 20 28              if (
160d0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
16120 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
16130 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
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 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
16170 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16180 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
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 20 20 20 20 74 72                tr
161b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
161c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
16200 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
16210 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16230 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
16240 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
16250 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16280 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16290 0d 0a 0d 0a 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 20                  
162b0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
162c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
162f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
16320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16360 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
16370 32 30 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  2005 = (bool)val
16380 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
163a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163b0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
163c0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
163d0 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29  Arg, "noVs2008")
163e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
163f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 62 6f 6f 6c 3f 20            bool? 
16420 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
16430 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
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 69 66 20 28 76             if (v
16460 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20 20 20 20 65 72                er
164b0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
164c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20 20                  
164f0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
16500 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
16510 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
16520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16540 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
16550 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
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 20 20 20                  
16580 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
16590 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
165a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
165d0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
165e0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
165f0 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
16620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
16680 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
166d0 0a 20 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 63 6f 6e               con
166f0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
16700 30 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  008 = (bool)valu
16710 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16720 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
16750 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
16760 72 67 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29  rg, "noVs2010"))
16770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16780 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
167b0 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
167c0 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
167f0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16820 20 20 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 65 72 72               err
16840 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16850 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
16890 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
168a0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
168d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
168e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16910 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
16920 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16950 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16960 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16970 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
169a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
169b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169d0 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a00 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
16a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
16a80 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
16a90 31 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  10 = (bool)value
16aa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16ab0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ad0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
16ae0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
16af0 67 2c 20 22 6e 6f 56 73 32 30 31 32 22 29 29 0d  g, "noVs2012")).
16b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b30 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
16b40 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
16b50 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
16b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b70 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
16b80 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ba0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
16bd0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
16be0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
16c20 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
16c30 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16c60 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
16c70 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
16c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
16ca0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
16cb0 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
16cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
16cf0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
16d00 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16d30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
16da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
16dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16de0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
16e10 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
16e20 32 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  2 = (bool)value;
16e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e60 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16e70 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16e80 2c 20 22 70 65 72 55 73 65 72 22 29 29 0d 0a 20  , "perUser")).. 
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
16ed0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
16ee0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f00 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
16f10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16f60 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
16f70 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
16fa0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
16fb0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
16fc0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
16fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fe0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16ff0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17000 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
17030 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
17040 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
17080 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
17090 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
170c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
170f0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
17130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
17160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17170 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 20 20 63 6f 6e 66 69 67 75           configu
171a0 72 61 74 69 6f 6e 2e 70 65 72 55 73 65 72 20 3d  ration.perUser =
171b0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17200 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17210 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22  registryVersion"
17220 29 29 0d 0a 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 7b 0d 0a 20              {.. 
17240 20 20 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 63 6f 6e 66 69             confi
17260 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73 74 72  guration.registr
17270 79 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b  yVersion = text;
17280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17290 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
172c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
172d0 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20  , "strict"))..  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
17320 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
17330 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
17360 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
173b0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
173c0 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
173f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
17400 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
17410 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17440 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
17450 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17470 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
17480 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
17490 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
174a0 20 20 20 20 20 20 20 20 20 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
174d0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
174e0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
174f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17500 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17510 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 69 66                if
17540 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
17570 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
175b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17600 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
17610 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61   Allow the comma
17620 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74  nd line argument
17630 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20  s to..          
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72    //       overr
17660 69 64 65 20 74 68 65 20 22 73 74 72 69 63 74 6e  ide the "strictn
17670 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20  ess" setting..  
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
176a0 20 20 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f     provided by o
176b0 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...    
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 20 2f 2f 0d 0a 20 20 20 20          //..    
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176f0 20 20 20 20 20 20 20 20 73 74 72 69 63 74 20 3d          strict =
17700 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
17750 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
17760 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29  throwOnMissing")
17770 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17780 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
177b0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
177c0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
177f0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
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 7b 0d 0a 20 20             {..  
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
17840 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
17850 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
17890 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
178a0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
178d0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
178e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17920 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17930 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
17960 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
17970 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
179b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179d0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17a10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
17a80 66 69 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77  figuration.throw
17a90 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f  OnMissing = (boo
17aa0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
17ae0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17af0 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65  n(newArg, "trace
17b00 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20  Format"))..     
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
17b50 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65  traceFormat = te
17b60 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
17b90 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
17ba0 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61  ation.traceForma
17bb0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17bf0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17c00 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69  rg, "tracePriori
17c10 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ty"))..         
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
17c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
17c50 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
17c60 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
17c90 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20  TracePriority), 
17ca0 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17cd0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17d20 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17d30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17d70 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
17d80 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17db0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
17dc0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17df0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61   "Invalid {0} va
17e00 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
17e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
17e40 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
17e50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17e80 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17eb0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
17ee0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17f10 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
17f60 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
17f70 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69  y = (TracePriori
17f80 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ty)value;..     
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
17fb0 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  TracePriority = 
17fc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
17fd0 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
18020 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76  ption(newArg, "v
18030 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20  erbose"))..     
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
18080 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
18090 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
180c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
18110 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
18120 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
18150 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
18160 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
181a0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
181b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
181e0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
181f0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
18220 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
18230 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
18240 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
18270 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
182a0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
182d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18300 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18350 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f  on.verbose = (bo
18360 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
183a0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
183b0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 73 56 65  on(newArg, "vsVe
183c0 72 73 69 6f 6e 53 75 66 66 69 78 22 29 29 0d 0a  rsionSuffix"))..
183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
18410 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f 6e 53 75  tion.vsVersionSu
18420 66 66 69 78 20 3d 20 74 65 78 74 3b 0d 0a 20 20  ffix = text;..  
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
18470 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77  ption(newArg, "w
18480 68 61 74 49 66 22 29 29 0d 0a 20 20 20 20 20 20  hatIf"))..      
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
184b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184c0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
184d0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
184e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18510 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18560 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18570 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18590 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
185a0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
185b0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185e0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
185f0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18600 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
18630 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18640 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18670 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18680 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
18690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
186c0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
186f0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18720 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18740 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18750 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
187a0 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f 6c  n.whatIf = (bool
187b0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
187e0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
187f0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
18800 28 6e 65 77 41 72 67 2c 20 22 77 6f 77 36 34 22  (newArg, "wow64"
18810 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
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 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
18850 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
18860 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18890 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
188c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
188e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
188f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18920 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
18930 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
18940 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18970 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
18980 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
189c0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
189d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
18a00 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
18a10 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
18a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a70 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18ab0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
18ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18b20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 6f 77 36  nfiguration.wow6
18b30 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  4 = (bool)value;
18b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18b50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bb0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
18bc0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
18bd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
18c00 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
18c10 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
18c40 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
18c50 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f          "Unsuppo
18c80 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
18c90 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  e option: {0}",.
18ca0 0a 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 20 20 20 20                  
18cc0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
18cd0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
18ce0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d00 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18d30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
18d90 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18da0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
18db0 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
18dc0 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18df0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
18e00 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
18e10 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
18e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18e30 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
18e40 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
18e50 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65  llback, e, trace
18e60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65    error = "Faile
18e90 64 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66  d to modify conf
18ea0 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18ec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18ed0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
18ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18f50 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
18f60 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
18f70 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
18f80 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
18f90 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
18fa0 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20  cess(..         
18fb0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
18fc0 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  args,..         
18fd0 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
18fe0 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
18ff0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
19000 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74       bool strict
19010 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19020 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
19030 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
19040 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
19050 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19060 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
19070 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19090 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
190a0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
190b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
190e0 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63  ror = "Invalid c
190f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
19100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19110 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19120 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
19130 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19150 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
19160 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75  sembly = configu
19170 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b  ration.assembly;
19180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19190 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
191a0 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
191e0 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 61  ror = "Invalid a
191f0 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20  ssembly.";..    
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19210 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19230 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19250 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
19260 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20  on.noTrace)..   
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
192a0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
192b0 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20  oLog &&..       
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75       String.IsNu
192e0 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67  llOrEmpty(config
192f0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
19300 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19360 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
19370 65 66 61 75 6c 74 20 6c 6f 67 20 66 69 6c 65 20  efault log file 
19380 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  name...         
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
193b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
193d0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47  .logFileName = G
193e0 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a  etLogFileName(..
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 22 74 72 61 63 65 22 29 3b 0d 0a 20 20 20 20 20  "trace");..     
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19480 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
194b0 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29  ation.noConsole)
194c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
194d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
19520 3a 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f 64  : In verbose mod
19530 65 2c 20 64 65 62 75 67 20 6f 75 74 70 75 74 20  e, debug output 
19540 28 74 68 61 74 20 6d 65 65 74 73 0d 0a 20 20 20  (that meets..   
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
19570 20 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64    the configured
19580 20 70 72 69 6f 72 69 74 79 20 63 72 69 74 65 72   priority criter
19590 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ia) will be..   
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
195c0 20 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74    displayed to t
195d0 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65  he console; othe
195e0 72 77 69 73 65 2c 20 74 72 61 63 65 0d 0a 20 20  rwise, trace..  
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19600 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
19610 20 20 20 6f 75 74 70 75 74 20 28 74 68 61 74 20     output (that 
19620 6d 65 65 74 73 20 74 68 65 20 63 6f 6e 66 69 67  meets the config
19630 75 72 65 64 20 70 72 69 6f 72 69 74 79 0d 0a 20  ured priority.. 
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19660 20 20 20 20 63 72 69 74 65 72 69 61 29 20 77 69      criteria) wi
19670 6c 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64 20  ll be displayed 
19680 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d  to the console..
19690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
196b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
196d0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64  (configuration.d
196e0 65 62 75 67 29 0d 0a 20 20 20 20 20 20 20 20 20  ebug)..         
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 20 7b 0d 0a 20 20 20 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 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
19750 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f  E: Add the conso
19760 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  le trace listene
19770 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  r to the..      
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
197a0 20 20 20 6c 69 73 74 20 6f 66 20 74 72 61 63 65     list of trace
197b0 20 6c 69 73 74 65 6e 65 72 73 20 6d 61 69 6e 74   listeners maint
197c0 61 69 6e 65 64 20 62 79 0d 0a 20 20 20 20 20 20  ained by..      
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
197f0 20 20 20 74 68 65 20 54 72 61 63 65 4f 70 73 20     the TraceOps 
19800 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f 6e 6c 79  class (i.e. only
19810 20 6d 65 73 73 61 67 65 73 0d 0a 20 20 20 20 20   messages..     
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19840 20 20 20 20 74 68 61 74 20 6d 65 65 74 20 74 68      that meet th
19850 65 20 64 65 62 75 67 20 70 72 69 6f 72 69 74 79  e debug priority
19860 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..      
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
19890 20 20 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63     seen on the c
198a0 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20  onsole)...      
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
198f0 61 63 65 4f 70 73 2e 53 65 74 75 70 44 65 62 75  aceOps.SetupDebu
19900 67 4c 69 73 74 65 6e 65 72 73 28 29 3b 0d 0a 20  gListeners();.. 
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19990 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20     // NOTE: Add 
199c0 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63  the console trac
199d0 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68  e listener to th
199e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74     //       list
19a10 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 74 72 61   of built-in tra
19a20 63 65 20 6c 69 73 74 65 6e 65 72 73 20 28 69 2e  ce listeners (i.
19a30 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e 6c      //       onl
19a60 79 20 6d 65 73 73 61 67 65 73 20 74 68 61 74 20  y messages that 
19a70 6d 65 65 74 20 74 68 65 20 74 72 61 63 65 0d 0a  meet the trace..
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 2f 2f 20 20 20 20 20 20 20 70 72 69 6f 72 69 74  //       priorit
19ab0 79 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 20 6f  y will be seen o
19ac0 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d  n the console)..
19ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b10 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65       Trace.Liste
19b20 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
19b30 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
19b40 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19b90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19bd0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19bf0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
19c00 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20  .noLog &&..     
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49         !String.I
19c30 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
19c40 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
19c50 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
19c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
19ca0 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72 69  .Add(new TextWri
19cb0 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72  terTraceListener
19cc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
19cf0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d  .logFileName));.
19d00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19d20 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19d40 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e 69 63 61  / NOTE: Technica
19d50 6c 6c 79 2c 20 77 65 20 63 72 65 61 74 65 64 20  lly, we created 
19d60 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20  the log file... 
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73             files
19db0 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Created++;..    
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19de0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
19e20 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f  OTE: Dump the co
19e30 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20  nfiguration now 
19e40 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64 20  in case we need 
19e50 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
19e60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19e70 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e   troubleshoot an
19e80 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20  y issues...     
19e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19ea0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19eb0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
19ec0 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72  guration.debugPr
19ed0 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50  iority <= TraceP
19ee0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d  riority.Medium).
19ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f00 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
19f10 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75  ration.Dump(debu
19f20 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  gCallback);.... 
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
19f50 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
19f60 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72  ty <= TracePrior
19f70 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20  ity.Medium)..   
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19fa0 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61 6c  on.Dump(traceCal
19fb0 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20  lback);....     
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19fd0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19fe0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
19ff0 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61 72  Show where we ar
1a000 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61  e running from a
1a010 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d 0a  nd how we were..
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a030 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 76      //       inv
1a040 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  oked...         
1a050 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74 69     string locati
1a080 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f  on = assembly.Lo
1a090 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20  cation;....     
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1a0b0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1a0c0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1a0d0 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a  ity.MediumLow,..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1a100 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1a110 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1a120 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52                "R
1a140 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62 6c  unning executabl
1a150 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44  e is: {0}", ForD
1a160 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29  isplay(location)
1a170 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1a180 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a190 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1b0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1a1c0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1a1d0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f  riority.MediumLo
1a1e0 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1a200 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1a210 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1a220 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d    "Original comm
1a250 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d  and line is: {0}
1a260 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1a270 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76 69              Envi
1a280 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c  ronment.CommandL
1a290 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65 67  ine), traceCateg
1a2a0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1a2c0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1a2d0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1a2e0 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1a310 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1a320 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a330 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a340 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e              "Run
1a350 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73 20  ning process is 
1a360 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50 72  {0}.", Is64BitPr
1a370 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20  ocess() ?..     
1a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a390 20 20 20 20 20 20 20 22 36 34 2d 62 69 74 22 20         "64-bit" 
1a3a0 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72 61  : "32-bit"), tra
1a3b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1a3e0 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a  ration.whatIf)..
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a400 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a420 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a430 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1a440 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75 67  TE: If the debug
1a450 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64 20  ger is attached 
1a460 61 6e 64 20 57 68 61 74 2d 49 66 20 6d 6f 64 65  and What-If mode
1a470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a480 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1a490 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61     is [now] disa
1a4a0 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77 61  bled, issue a wa
1a4b0 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  rning...        
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a4f0 44 65 62 75 67 67 65 72 2e 49 73 41 74 74 61 63  Debugger.IsAttac
1a500 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  hed)..          
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1a530 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1a540 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
1a550 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1a580 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1a590 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5b0 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69     "Forced to di
1a5c0 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c  sable \"what-if\
1a5d0 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d  " mode with " +.
1a5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 22 64 65 62 75 67 67 65 72 20 61 74 74 61 63   "debugger attac
1a610 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65  hed.", traceCate
1a620 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1a630 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1a690 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1a6a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1a6b0 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6d0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1a6e0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1a6f0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e   "No actual chan
1a720 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65  ges will be made
1a730 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   to this " +..  
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
1a760 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74  m because \"what
1a770 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e  -if\" mode is en
1a780 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1a790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a7b0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
1a7c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a800 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d  OTE: If the comm
1a810 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74  and line has not
1a820 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a   been manually..
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
1a850 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61  firmed (i.e. via
1a860 20 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f   the explicit co
1a870 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
1a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a890 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29  //       option)
1a8a0 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63  , then stop proc
1a8b0 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20  essing now.  We 
1a8c0 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20  enforce..       
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a8e0 20 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20        this rule 
1a8f0 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64  so that simply d
1a900 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74  ouble-clicking t
1a910 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
1a920 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1a930 20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c   executable will
1a940 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61   not result in a
1a950 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67  ny changes being
1a960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a970 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
1a980 61 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65  ade to the syste
1a990 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m...            
1a9a0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9c0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
1a9d0 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20  on.confirm)..   
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1aa10 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74  r = "Cannot cont
1aa20 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66  inue, the \"conf
1aa30 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20  irm\" option is 
1aa40 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b   "not enabled.";
1aa70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1aa90 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1aab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1aac0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1aad0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1aae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1aaf0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1ab00 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ab20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab30 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1ab40 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1ab50 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
1ab60 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1ab80 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1ab90 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
1aba0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
1abd0 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63  led to process c
1abe0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
1abf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ac10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1ac20 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1ac30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ac40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ac50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1ac90 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
1aca0 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
1acb0 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
1acc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1acd0 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
1ace0 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73  CheckRuntimeVers
1acf0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1ad00 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
1ad10 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
1ad20 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1ad30 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
1ad40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad50 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1ad60 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1ad70 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1ad80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ad90 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1ada0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
1add0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1ae10 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f  or = "Invalid co
1ae20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1ae50 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1ae60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1aea0 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f  OTE: What versio
1aeb0 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65  n of the runtime
1aec0 20 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70   was the core (p
1aed0 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20  rimary)..       
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1aef0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63        assembly c
1af00 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against 
1af10 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32  (e.g. "v2.0.5072
1af20 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  7" or..         
1af30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1af40 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22      "v4.0.30319"
1af50 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
1af60 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65  string coreImage
1af90 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
1afa0 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
1afb0 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1afe0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
1aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b000 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b020 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20   NOTE: We allow 
1b030 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65  the actual image
1b040 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e   runtime checkin
1b050 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  g to be..       
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b070 20 20 20 20 20 20 62 79 70 61 73 73 65 64 20 76        bypassed v
1b080 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69  ia the "-noRunti
1b090 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61  meVersion" comma
1b0a0 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1b0c0 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54        option.  T
1b0d0 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
1b0e0 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64  option is intend
1b0f0 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..        
1b100 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b110 20 20 20 20 20 65 78 70 65 72 74 20 75 73 65 20       expert use 
1b120 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  only...         
1b130 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
1b160 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
1b170 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  rsion)..        
1b180 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1b1b0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1b1c0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1b1d0 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1b200 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1b210 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1b220 20 20 20 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 22 41 73 73 65             "Asse
1b240 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
1b250 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
1b260 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b  amework {0}; " +
1b270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68                "h
1b290 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61  owever, installa
1b2a0 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e  tion restriction
1b2b0 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20  s based on this 
1b2c0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 22 66 61 63 74 20 68 61 76 65 20 62 65 65 6e   "fact have been
1b2f0 20 64 69 73 61 62 6c 65 64 20 76 69 61 20 74 68   disabled via th
1b300 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22  e command line."
1b310 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b330 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1b340 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61  ersion), traceCa
1b350 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1b380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b390 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b3b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1b3c0 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20         // TODO: 
1b3d0 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e  Restrict the con
1b3e0 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64  figuration based
1b3f0 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d   on which image.
1b400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b410 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75       //       ru
1b420 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28  ntime versions (
1b430 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65  which more-or-le
1b440 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20  ss correspond.. 
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b460 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e     //       to .
1b470 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65  NET Framework ve
1b480 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70  rsions) are supp
1b490 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20  orted by the..  
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4b0 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69    //       versi
1b4c0 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74  ons of Visual St
1b4d0 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e  udio that are in
1b4e0 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20  stalled...      
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b510 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1b520 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
1b530 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1b540 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ersion))..      
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1b560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b570 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1b580 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66   "invalid core f
1b590 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
1b5a0 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  e version";..   
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1b5d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b5e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b600 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45  lse if (String.E
1b610 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
1b640 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
1b650 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1b660 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
1b690 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b6d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1b6e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1b6f0 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
1b700 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v2.0 runtime, ma
1b710 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
1b720 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
1b730 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b740 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
1b750 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
1b760 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
1b770 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
1b780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b790 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
1b7a0 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1b7b0 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 74 20  e CLR v4.0.  It 
1b7c0 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1b7e0 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e 20 69       uncertain i
1b7f0 66 20 74 68 69 73 20 69 73 20 61 63 74 75 61 6c  f this is actual
1b800 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d  ly a problem in.
1b810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b820 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b830 20 20 70 72 61 63 74 69 63 65 20 61 73 20 74 68    practice as th
1b840 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c  e CLR v4.0 can l
1b850 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a  oad and use an..
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b870 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b880 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1b890 65 64 20 77 69 74 68 20 74 68 65 20 43 4c 52 20  ed with the CLR 
1b8a0 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a  v2.0; however,..
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1b8d0 20 73 69 6e 63 65 20 74 68 69 73 20 70 72 6f 6a   since this proj
1b8e0 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74 68 20  ect offers both 
1b8f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d  configurations,.
1b900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b910 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1b920 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 64    we currently d
1b930 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73  isallow this mis
1b940 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  match...        
1b950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b960 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b970 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1b980 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
1b990 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x40 = true;..   
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1b9c0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74  on.noNetFx45 = t
1b9d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1b9f0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
1ba00 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20  2010 = true;..  
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1ba30 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74  ion.noVs2012 = t
1ba40 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1ba70 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1ba80 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20  rity.Medium,..  
1ba90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baa0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1bab0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1bac0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1bad0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1baf0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73      "Assembly is
1bb00 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1bb10 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
1bb20 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {0}, " +..     
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20         "support 
1bb50 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  for .NET Framewo
1bb60 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1bb70 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb90 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67         CLRv2Imag
1bba0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1bbb0 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
1bbc0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1bbf0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
1bc30 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc50 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
1bc60 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1bc70 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  n, CLRv4ImageRun
1bc80 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1bcb0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
1bcc0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
1bcd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1bce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcf0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd10 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
1bd20 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69  e CLR v4.0 runti
1bd30 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
1bd40 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
1bd70 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
1bd80 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
1bd90 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
1bda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdb0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
1bdc0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1bdd0 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
1bde0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bdf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be10 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1be20 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
1be30 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1be40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1be60 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a  Vs2005 = true;..
1be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be80 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1be90 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
1bea0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bec0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1bed0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1bee0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1bf10 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1bf20 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1bf30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf50 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
1bf60 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
1bf70 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1bf80 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
1bfb0 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65  t for .NET Frame
1bfc0 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20  work {1} is now 
1bfd0 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20  disabled.",..   
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1c000 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
1c010 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
1c020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c030 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1c040 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67  isplay(CLRv2Imag
1c050 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1c060 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c0a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
1c100 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c120 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65       "unsupporte
1c130 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
1c140 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
1c150 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  n " +..         
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c170 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65     "{0}, must be
1c180 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20   {1} or {2}",.. 
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1c1b0 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52  splay(coreImageR
1c1c0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
1c1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1c1f0 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61  Display(CLRv2Ima
1c200 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1c210 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34  ForDisplay(CLRv4
1c240 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1c250 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion));....      
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1c280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c290 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1c2b0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c2e0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1c2f0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1c300 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c310 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c320 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c330 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c340 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c360 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1c370 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1c380 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1c390 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c3a0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1c3b0 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65  = "Failed to che
1c3c0 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  ck image runtime
1c3d0 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20   version.";..   
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1c410 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c420 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1c430 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1c440 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1c490 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1c4a0 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
1c4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1c4c0 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67  lic bool HasFlag
1c4d0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1c4e0 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
1c4f0 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20   hasFlags,..    
1c500 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1c510 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20   all..          
1c520 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1c530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c540 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29          if (all)
1c550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c560 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69        return ((i
1c570 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61  nstallFlags & ha
1c580 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c  sFlags) == hasFl
1c590 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ags);..         
1c5a0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c   return ((instal
1c5d0 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  lFlags & hasFlag
1c5e0 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61  s) != InstallFla
1c5f0 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20  gs.None);..     
1c600 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c610 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1c660 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c670 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20  c void Dump(..  
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1c690 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
1c6a0 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20  eCallback..     
1c6b0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1c6c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c6e0 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
1c6f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1c700 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1c730 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1c740 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1c750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c760 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1c770 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ly", ForDisplay(
1c780 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20  assembly)),..   
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c7b0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c7d0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c7e0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1c7f0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d       "LogFileNam
1c820 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  e", ForDisplay(l
1c830 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  ogFileName)),.. 
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1c860 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c880 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1c890 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1c8a0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f 72         "Director
1c8d0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
1c8e0 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c900 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1c910 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1c920 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1c930 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1c940 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1c950 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61       "CoreFileNa
1c980 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
1c990 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  coreFileName)),.
1c9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c9c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1c9f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1ca00 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ca10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ca20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69           "LinqFi
1ca30 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
1ca40 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  lay(linqFileName
1ca50 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1ca70 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1caa0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1cab0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1cac0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
1cae0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c  signerFileName",
1caf0 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69   ForDisplay(desi
1cb00 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  gnerFileName)),.
1cb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1cb30 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1cb60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1cb70 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1cb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb90 20 20 20 20 20 20 20 20 20 22 52 65 67 69 73 74           "Regist
1cba0 72 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44  ryVersion", ForD
1cbb0 69 73 70 6c 61 79 28 72 65 67 69 73 74 72 79 56  isplay(registryV
1cbc0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cbf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cc00 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cc10 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1cc20 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1cc30 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc50 20 20 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f     "ConfigVersio
1cc60 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  n", ForDisplay(c
1cc70 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d  onfigVersion)),.
1cc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cc90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1cca0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1ccd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1cce0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1ccf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd00 20 20 20 20 20 20 20 20 20 22 56 73 56 65 72 73           "VsVers
1cd10 69 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44  ionSuffix", ForD
1cd20 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
1cd30 53 75 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20  Suffix)),..     
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1cd60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1cd70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1cd80 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1cd90 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1cda0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdc0 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22     "DebugFormat"
1cdd0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
1cde0 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ugFormat)),..   
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ce10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ce30 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1ce40 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1ce50 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61       "TraceForma
1ce80 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  t", ForDisplay(t
1ce90 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  raceFormat)),.. 
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ceb0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1cec0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1cee0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1cef0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1cf00 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46         "InstallF
1cf30 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61  lags", ForDispla
1cf40 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29  y(installFlags))
1cf50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cf60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1cf70 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1cfa0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1cfb0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1cfc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cfd0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 62 75             "Debu
1cfe0 67 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44  gPriority", ForD
1cff0 69 73 70 6c 61 79 28 64 65 62 75 67 50 72 69 6f  isplay(debugPrio
1d000 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  rity)),..       
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d040 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d050 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d060 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d070 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d090 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22   "TracePriority"
1d0a0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
1d0b0 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20  cePriority)),.. 
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d0e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d100 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d110 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d120 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d140 20 20 20 20 20 20 20 22 50 65 72 55 73 65 72 22         "PerUser"
1d150 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 70 65 72  , ForDisplay(per
1d160 55 73 65 72 29 29 2c 0d 0a 20 20 20 20 20 20 20  User)),..       
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d180 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d1a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d1b0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d1c0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d1d0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44   "Install", ForD
1d200 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29  isplay(install))
1d210 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d220 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d230 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d250 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d260 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d270 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d280 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d290 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 77 36             "Wow6
1d2a0 34 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77  4", ForDisplay(w
1d2b0 6f 77 36 34 29 29 2c 0d 0a 20 20 20 20 20 20 20  ow64)),..       
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d2e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d2f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1d300 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1d310 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1d320 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 22 4e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69   "NoRuntimeVersi
1d350 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  on", ForDisplay(
1d360 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
1d370 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1d390 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1d3c0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1d3d0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1d3e0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1d400 44 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73  Desktop", ForDis
1d410 70 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29  play(noDesktop))
1d420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d430 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d440 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d470 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d480 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d490 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d4a0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f             "NoCo
1d4b0 6d 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c  mpact", ForDispl
1d4c0 61 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d  ay(noCompact)),.
1d4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d4e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1d4f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d510 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1d520 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1d530 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1d540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d550 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
1d560 78 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  x20", ForDisplay
1d570 28 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20  (noNetFx20)),.. 
1d580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d590 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d5a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d5c0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d5d0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d5e0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34         "NoNetFx4
1d610 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
1d620 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20  oNetFx40)),..   
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d640 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1d650 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d660 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d670 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
1d680 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
1d690 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 22       "NoNetFx45"
1d6c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
1d6d0 65 74 46 78 34 35 29 29 2c 0d 0a 20 20 20 20 20  etFx45)),..     
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d700 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d710 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d720 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d730 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d740 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 20 20 22 4e 6f 56 73 32 30 30 35 22 2c 20 46     "NoVs2005", F
1d770 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30  orDisplay(noVs20
1d780 30 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  05)),..         
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d7a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1d7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d7c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1d7d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
1d7e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
1d7f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d810 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72 44 69  NoVs2008", ForDi
1d820 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38 29 29  splay(noVs2008))
1d830 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d840 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1d850 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1d880 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1d890 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1d8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d8b0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
1d8c0 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70 6c 61  2010", ForDispla
1d8d0 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20  y(noVs2010)),.. 
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d900 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1d920 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1d930 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1d940 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 32         "NoVs2012
1d970 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
1d980 56 73 32 30 31 32 29 29 2c 0d 0a 20 20 20 20 20  Vs2012)),..     
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d9b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d9c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1d9d0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
1d9e0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
1d9f0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f     "NoTrace", Fo
1da20 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65  rDisplay(noTrace
1da30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1da50 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1da80 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
1da90 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
1daa0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
1dac0 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73  Console", ForDis
1dad0 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29  play(noConsole))
1dae0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1daf0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1db00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
1db30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
1db40 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
1db50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1db60 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f             "NoLo
1db70 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  g", ForDisplay(n
1db80 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  oLog)),..       
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dba0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1dbb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1dbc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1dbd0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1dbe0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1dbf0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67   "ThrowOnMissing
1dc20 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68  ", ForDisplay(th
1dc30 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d  rowOnMissing)),.
1dc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1dc60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
1dc90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
1dca0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
1dcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dcc0 20 20 20 20 20 20 20 20 20 22 57 68 61 74 49 66           "WhatIf
1dcd0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68  ", ForDisplay(wh
1dce0 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20  atIf)),..       
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1dd10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1dd20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1dd30 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1dd40 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1dd50 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 22 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73   "Debug", ForDis
1dd80 70 6c 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20  play(debug)),.. 
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dda0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ddb0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ddd0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
1dde0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
1ddf0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22         "Verbose"
1de20 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72  , ForDisplay(ver
1de30 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  bose)),..       
1de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1de60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1de70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
1de80 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
1de90 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
1dea0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44   "Confirm", ForD
1ded0 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29  isplay(confirm))
1dee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1def0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1df00 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1df10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
1df60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1df70 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
1df80 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1dfb0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1dfc0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
1dfd0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
1dfe0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e000 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1e010 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20  yTitle",..      
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e030 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1e040 28 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c  (GetAssemblyTitl
1e050 65 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a  e(assembly))),..
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e080 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1e0b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1e0c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1e0d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0f0 20 20 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e      "AssemblyCon
1e100 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20  figuration",..  
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1e130 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79  play(GetAssembly
1e140 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73  Configuration(as
1e150 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20  sembly))),..    
1e160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e170 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1e180 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1e190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1e1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
1e1d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1e1e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e230 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1e240 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
1e250 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
1e260 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62    private Assemb
1e270 6c 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20  ly assembly;..  
1e280 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1e290 20 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62   Assembly Assemb
1e2a0 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
1e2b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e2c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1e2d0 61 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20  assembly; }..   
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1e2f0 20 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61   { assembly = va
1e300 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1e310 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e320 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1e330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e360 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e370 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1e380 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61  string logFileNa
1e390 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
1e3a0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c   public string L
1e3b0 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  ogFileName..    
1e3c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e3d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1e3e0 20 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e   return logFileN
1e3f0 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
1e400 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f          set { lo
1e410 67 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  gFileName = valu
1e420 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1e430 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1e440 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e480 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1e490 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e4a0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d  ring directory;.
1e4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1e4c0 6c 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63  lic string Direc
1e4d0 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
1e4e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e4f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1e500 6e 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a  n directory; }..
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 73 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20  set { directory 
1e530 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1e540 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e550 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1e5b0 61 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46  ate string coreF
1e5c0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
1e5d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
1e5e0 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ing CoreFileName
1e5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1e600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e610 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
1e620 72 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  reFileName; }.. 
1e630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e640 65 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d  et { coreFileNam
1e650 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
1e660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1e6d0 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e  ivate string lin
1e6e0 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
1e6f0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1e700 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61  tring LinqFileNa
1e710 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1e720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e730 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1e740 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  linqFileName; }.
1e750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e760 20 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e   set { linqFileN
1e770 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
1e780 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e790 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e7f0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64  private string d
1e800 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
1e810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1e820 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73 69  blic string Desi
1e830 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  gnerFileName..  
1e840 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e860 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e   { return design
1e870 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  erFileName; }.. 
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e890 65 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c  et { designerFil
1e8a0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
1e8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e8c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e910 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1e920 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1e930 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
1e940 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1e950 75 62 6c 69 63 20 73 74 72 69 6e 67 20 52 65 67  ublic string Reg
1e960 69 73 74 72 79 56 65 72 73 69 6f 6e 0d 0a 20 20  istryVersion..  
1e970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e980 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1e990 20 7b 20 72 65 74 75 72 6e 20 72 65 67 69 73 74   { return regist
1e9a0 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20  ryVersion; }..  
1e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1e9c0 74 20 7b 20 72 65 67 69 73 74 72 79 56 65 72 73  t { registryVers
1e9d0 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ea50 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
1ea60 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20  onfigVersion;.. 
1ea70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1ea80 63 20 73 74 72 69 6e 67 20 43 6f 6e 66 69 67 56  c string ConfigV
1ea90 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
1eaa0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eab0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1eac0 75 72 6e 20 63 6f 6e 66 69 67 56 65 72 73 69 6f  urn configVersio
1ead0 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  n; }..          
1eae0 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66        set { conf
1eaf0 69 67 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  igVersion = valu
1eb00 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1eb10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1eb20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1eb70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1eb80 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75  ring vsVersionSu
1eb90 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20 20  ffix;..         
1eba0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1ebb0 20 56 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   VsVersionSuffix
1ebc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ebd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ebe0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 73   get { return vs
1ebf0 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 20 7d  VersionSuffix; }
1ec00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ec10 20 20 73 65 74 20 7b 20 76 73 56 65 72 73 69 6f    set { vsVersio
1ec20 6e 53 75 66 66 69 78 20 3d 20 76 61 6c 75 65 3b  nSuffix = value;
1ec30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ec40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ec50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1eca0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1ecb0 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d  ng debugFormat;.
1ecc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1ecd0 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  lic string Debug
1ece0 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
1ecf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ed00 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1ed10 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  urn debugFormat;
1ed20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1ed30 20 20 20 20 73 65 74 20 7b 20 64 65 62 75 67 46      set { debugF
1ed40 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
1ed50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1ed60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1edb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1edc0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
1edd0 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20   traceFormat;.. 
1ede0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1edf0 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
1ee00 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
1ee10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ee20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1ee30 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d  n traceFormat; }
1ee40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ee50 20 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72    set { traceFor
1ee60 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  mat = value; }..
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ee80 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1ee90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eee0 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46  private InstallF
1eef0 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67  lags installFlag
1ef00 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
1ef10 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c  public InstallFl
1ef20 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags InstallFlags
1ef30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ef40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef50 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
1ef60 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20  stallFlags; }.. 
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1ef80 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67  et { installFlag
1ef90 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  s = value; }..  
1efa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1efb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f010 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72  ivate TracePrior
1f020 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
1f030 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
1f040 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f  public TracePrio
1f050 72 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69  rity DebugPriori
1f060 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
1f070 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f080 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1f090 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d  debugPriority; }
1f0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0b0 20 20 73 65 74 20 7b 20 64 65 62 75 67 50 72 69    set { debugPri
1f0c0 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
1f0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f0e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f140 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
1f150 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
1f160 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
1f170 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
1f180 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
1f190 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
1f1a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f1b0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f1c0 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
1f1d0 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
1f1e0 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
1f1f0 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
1f200 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
1f210 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f220 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f260 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f270 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
1f280 6f 6c 20 70 65 72 55 73 65 72 3b 0d 0a 20 20 20  ol perUser;..   
1f290 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1f2a0 62 6f 6f 6c 20 50 65 72 55 73 65 72 0d 0a 20 20  bool PerUser..  
1f2b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f2d0 20 7b 20 72 65 74 75 72 6e 20 70 65 72 55 73 65   { return perUse
1f2e0 72 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  r; }..          
1f2f0 20 20 20 20 20 20 73 65 74 20 7b 20 70 65 72 55        set { perU
1f300 73 65 72 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ser = value; }..
1f310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f320 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f380 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73  private bool ins
1f390 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
1f3a0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
1f3b0 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  nstall..        
1f3c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f3d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f3e0 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a  urn install; }..
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20  set { install = 
1f410 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f420 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f430 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1f440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f480 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f490 65 20 62 6f 6f 6c 20 77 6f 77 36 34 3b 0d 0a 20  e bool wow64;.. 
1f4a0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1f4b0 63 20 62 6f 6f 6c 20 57 6f 77 36 34 0d 0a 20 20  c bool Wow64..  
1f4c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1f4e0 20 7b 20 72 65 74 75 72 6e 20 77 6f 77 36 34 3b   { return wow64;
1f4f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f500 20 20 20 20 73 65 74 20 7b 20 77 6f 77 36 34 20      set { wow64 
1f510 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f520 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f530 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f580 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f590 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69  ate bool noRunti
1f5a0 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
1f5b0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1f5c0 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72  ool NoRuntimeVer
1f5d0 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
1f5e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f5f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1f600 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n noRuntimeVersi
1f610 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
1f620 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52         set { noR
1f630 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
1f640 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1f650 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f660 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f6b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1f6c0 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70  e bool noDesktop
1f6d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1f6e0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73  ublic bool NoDes
1f6f0 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20  ktop..          
1f700 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f710 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1f720 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a  n noDesktop; }..
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20  set { noDesktop 
1f750 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1f760 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f770 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
1f7d0 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61  ate bool noCompa
1f7e0 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
1f7f0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
1f800 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20  ompact..        
1f810 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f820 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1f830 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d  urn noCompact; }
1f840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f850 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63    set { noCompac
1f860 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
1f870 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f880 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1f890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1f8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1f8e0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
1f8f0 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
1f900 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
1f910 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20  oNetFx20..      
1f920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f930 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1f940 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b  eturn noNetFx20;
1f950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1f960 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
1f970 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x20 = value; }..
1f980 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f990 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f9f0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
1fa00 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
1fa10 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
1fa20 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
1fa30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fa40 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1fa50 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
1fa60 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
1fa70 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
1fa80 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
1fa90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1faa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faf0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1fb00 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1fb10 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20 20  oNetFx45;..     
1fb20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
1fb30 6f 6c 20 4e 6f 4e 65 74 46 78 34 35 0d 0a 20 20  ol NoNetFx45..  
1fb40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1fb60 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
1fb70 78 34 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x45; }..        
1fb80 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
1fb90 4e 65 74 46 78 34 35 20 3d 20 76 61 6c 75 65 3b  NetFx45 = value;
1fba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fbb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fbc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fc10 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
1fc20 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20   noVs2005;..    
1fc30 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
1fc40 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20  ool NoVs2005..  
1fc50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1fc70 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
1fc80 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  05; }..         
1fc90 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
1fca0 73 32 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d  s2005 = value; }
1fcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1fcc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fd10 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1fd20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
1fd30 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
1fd40 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1fd50 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20  l NoVs2008..    
1fd60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fd70 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
1fd80 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38   return noVs2008
1fd90 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
1fda0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
1fdb0 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  008 = value; }..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1fde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fdf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fe30 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
1fe40 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
1fe50 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1fe60 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20  NoVs2010..      
1fe70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fe80 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
1fe90 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20  eturn noVs2010; 
1fea0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1feb0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
1fec0 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
1fed0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1fee0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1fef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1ff40 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
1ff50 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  012;..          
1ff60 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
1ff70 56 73 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20  Vs2012..        
1ff80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ff90 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
1ffa0 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d  urn noVs2012; }.
1ffb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffc0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20   set { noVs2012 
1ffd0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
1ffe0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fff0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
20000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
20040 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
20050 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65  ate bool noTrace
20060 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
20070 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61  ublic bool NoTra
20080 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
20090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
200a0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
200b0 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20  noTrace; }..    
200c0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
200d0 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75  { noTrace = valu
200e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
200f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20100 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20140 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20150 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
20160 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20  ol noConsole;.. 
20170 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
20180 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65  c bool NoConsole
20190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
201a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
201b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
201c0 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20  Console; }..    
201d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
201e0 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61  { noConsole = va
201f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
20200 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20210 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20250 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20260 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
20270 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  bool noLog;..   
20280 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20290 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20  bool NoLog..    
202a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
202b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
202c0 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d   return noLog; }
202d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
202e0 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20    set { noLog = 
202f0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
20300 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20310 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20360 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
20370 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69  e bool throwOnMi
20380 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
20390 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
203a0 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a  ThrowOnMissing..
203b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
203d0 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f  et { return thro
203e0 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20  wOnMissing; }.. 
203f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20400 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73  et { throwOnMiss
20410 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
20420 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20430 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20480 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20490 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
204a0 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
204b0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
204c0 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
204d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
204e0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
204f0 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20510 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75   { whatIf = valu
20520 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
20530 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20540 20 20 20 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 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
20590 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
205a0 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20  ol debug;..     
205b0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
205c0 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20  ol Debug..      
205d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
205e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
205f0 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a  eturn debug; }..
20600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20610 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61  set { debug = va
20620 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
20630 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
20640 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
20650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20680 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20690 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
206a0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
206b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
206c0 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
206d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
206e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
206f0 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
20700 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
20710 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
20720 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
20730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20790 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
207a0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
207b0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
207c0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
207d0 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
207e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
207f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
20800 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
20810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20820 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
20830 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
20840 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20850 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
20860 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
20870 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
20880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
208e0 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
208f0 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
20900 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
20910 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
20920 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
20930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
20940 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
20950 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
20960 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
20970 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
20980 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
209a0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
209b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
209c0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
209d0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
209e0 20 20 20 20 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 2f 2f 2f  ////////////////
20a20 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20a30 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
20a40 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
20a50 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20a60 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
20a70 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
20a80 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20a90 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
20aa0 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
20ab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20ac0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
20ad0 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
20ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20af0 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
20b00 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
20b10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20b20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
20b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20b70 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
20b80 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61  te StringList na
20b90 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
20ba0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
20bb0 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20  ist Names..     
20bc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20bd0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
20be0 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d  return names; }.
20bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c00 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76   set { names = v
20c10 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
20c20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20c30 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20c80 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
20c90 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73   VersionMap vers
20ca0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
20cb0 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
20cc0 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20  nMap Versions.. 
20cd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
20cf0 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
20d00 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
20d10 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
20d20 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
20d30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
20da0 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
20db0 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61  gList platformNa
20dc0 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
20dd0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
20de0 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist PlatformName
20df0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
20e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e10 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
20e20 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d  latformNames; }.
20e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e40 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e   set { platformN
20e50 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
20e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20e70 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
20e80 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
20e90 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
20ea0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
20eb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
20ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
20f00 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69      #region VsLi
20f10 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
20f20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
20f30 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20   class VsList.. 
20f40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20f50 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
20f60 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
20f70 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
20f80 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a  ublic VsList()..
20f90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20fb0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
20fc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20fd0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
20fe0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
20ff0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21030 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21040 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
21050 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
21060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
21070 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
21080 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
21090 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
210a0 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
210b0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
210c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
210d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
210e0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
210f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21100 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
21110 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
21120 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21130 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
21140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
21190 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
211a0 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
211b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
211c0 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
211d0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
211e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
211f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
21200 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
21220 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
21230 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
21240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21250 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21260 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
21270 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
21280 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
21290 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
212a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
212e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
212f0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
21300 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
21310 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21320 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72  const string Cor
21330 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73  eFileName = "Sys
21340 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
21350 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
21360 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
21370 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
21380 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
21390 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22  SQLite.Linq.dll"
213a0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
213b0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
213c0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
213d0 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
213e0 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
213f0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
21400 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
21410 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
21420 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
21430 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21440 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
21450 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
21460 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
21470 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21480 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
21490 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
214a0 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20   = "SQLite";..  
214b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
214c0 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72  nst string Invar
214d0 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  iantName = "Syst
214e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
214f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21500 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46  e const string F
21510 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d  actoryTypeName =
21520 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
21530 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f  Lite.SQLiteFacto
21540 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ry";..        pr
21550 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
21560 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d  ng Description =
21570 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
21580 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
21590 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20  or SQLite";.... 
215a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
215f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21600 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
21610 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
21620 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e  Version = "v2.0.
21630 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20  50727";..       
21640 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
21650 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65  tring CLRv4Image
21660 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
21670 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a   "v4.0.30319";..
21680 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
216e0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
216f0 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  g NameAndValueFo
21700 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d  rmat = "{0}: {1}
21710 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
21720 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
21730 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d   LogFileSuffix =
21740 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20   ".log";....    
21750 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
217a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
217b0 6f 6e 73 74 20 73 74 72 69 6e 67 20 52 6f 6f 74  onst string Root
217c0 4b 65 79 4e 61 6d 65 20 3d 20 22 53 6f 66 74 77  KeyName = "Softw
217d0 61 72 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  are";..        p
217e0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
217f0 69 6e 67 20 57 6f 77 36 34 53 75 62 4b 65 79 4e  ing Wow64SubKeyN
21800 61 6d 65 20 3d 20 22 57 6f 77 36 34 33 32 4e 6f  ame = "Wow6432No
21810 64 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  de";....        
21820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21860 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21870 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f     //..        /
21880 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54  / NOTE: The .NET
21890 20 46 72 61 6d 65 77 6f 72 6b 20 68 61 73 20 62   Framework has b
218a0 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
218b0 34 2d 62 69 74 20 65 64 69 74 69 6f 6e 73 2e 0d  4-bit editions..
218c0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
218d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
218e0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
218f0 6c 20 4e 65 74 46 78 49 73 33 32 42 69 74 4f 6e  l NetFxIs32BitOn
21900 6c 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  ly = false;.... 
21910 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
21960 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20  ..        //..  
21970 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
21980 6f 72 20 6e 6f 77 2c 20 56 69 73 75 61 6c 20 53  or now, Visual S
21990 74 75 64 69 6f 20 69 73 20 61 6c 77 61 79 73 20  tudio is always 
219a0 61 20 33 32 2d 62 69 74 20 61 70 70 6c 69 63 61  a 32-bit applica
219b0 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 2f  tion...        /
219c0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
219d0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
219e0 6c 79 20 62 6f 6f 6c 20 56 73 49 73 33 32 42 69  ly bool VsIs32Bi
219f0 74 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 0d  tOnly = true;...
21a00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
21a60 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
21a70 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46  nly string VsIdF
21a80 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a  ormat = "B";....
21a90 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21ae0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
21af0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
21b00 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46  ly string XPathF
21b10 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a  orAddElement =..
21b20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
21b30 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65  figuration/syste
21b40 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65  m.data/DbProvide
21b50 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40  rFactories/add[@
21b60 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c  invariant=\"{0}\
21b70 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "]";....        
21b80 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
21b90 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58  eadonly string X
21ba0 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
21bb0 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
21bc0 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69      "configurati
21bd0 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44  on/system.data/D
21be0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69  bProviderFactori
21bf0 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72  es/remove[@invar
21c00 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d  iant=\"{0}\"]";.
21c10 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
21c20 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21c80 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
21c90 65 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20  e Static Data.. 
21ca0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
21cb0 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74  tatic Assembly t
21cc0 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73  hisAssembly = As
21cd0 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74  sembly.GetExecut
21ce0 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a  ingAssembly();..
21cf0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21d00 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
21d10 74 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20  traceCategory = 
21d20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
21d30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  (..            t
21d40 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
21d50 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  tion); /* NOTE: 
21d60 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67 20 61  Same for debug a
21d70 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a 0d 0a  nd trace. */....
21d80 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21d90 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
21da0 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
21db0 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b 0d 0a  ck = AppDebug;..
21dc0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
21dd0 73 74 61 74 69 63 20 54 72 61 63 65 43 61 6c 6c  static TraceCall
21de0 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
21df0 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b 0d 0a  ck = AppTrace;..
21e00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
21e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
21e60 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21e70 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
21e80 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69  ry = null;....#i
21e90 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20  f WINDOWS..     
21ea0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
21eb0 63 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44  c string systemD
21ec0 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20  irectoryWow64 = 
21ed0 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  null;..#endif...
21ee0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
21f40 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
21f50 69 6c 65 73 43 72 65 61 74 65 64 20 3d 20 30 3b  ilesCreated = 0;
21f60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
21f70 65 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c  e static int fil
21f80 65 73 4d 6f 64 69 66 69 65 64 20 3d 20 30 3b 0d  esModified = 0;.
21f90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21fa0 20 73 74 61 74 69 63 20 69 6e 74 20 66 69 6c 65   static int file
21fb0 73 44 65 6c 65 74 65 64 20 3d 20 30 3b 0d 0a 20  sDeleted = 0;.. 
21fc0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
21fd0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
21fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22020 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22030 23 72 65 67 69 6f 6e 20 54 72 61 63 65 20 48 61  #region Trace Ha
22040 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
22050 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
22060 74 72 69 6e 67 20 47 65 74 4c 6f 67 46 69 6c 65  tring GetLogFile
22070 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
22080 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
22090 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
220a0 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ) /* throw */.. 
220b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
220c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
220d0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
220e0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 0d  TempFileName();.
220f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
22100 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
22110 50 61 74 68 2e 47 65 74 44 69 72 65 63 74 6f 72  Path.GetDirector
22120 79 4e 61 6d 65 28 66 69 6c 65 4e 61 6d 65 29 3b  yName(fileName);
22130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
22140 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ring fileNameOnl
22150 79 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  y = Path.GetFile
22160 4e 61 6d 65 57 69 74 68 6f 75 74 45 78 74 65 6e  NameWithoutExten
22170 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  sion(fileName);.
22180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
22190 74 72 69 6e 67 20 6e 65 77 46 69 6c 65 4e 61 6d  tring newFileNam
221a0 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65  e = Path.Combine
221b0 28 64 69 72 65 63 74 6f 72 79 2c 20 53 74 72 69  (directory, Stri
221c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
221d0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
221e0 7b 31 7d 7b 32 7d 22 2c 20 74 72 61 63 65 43 61  {1}{2}", traceCa
221f0 74 65 67 6f 72 79 2c 20 21 53 74 72 69 6e 67 2e  tegory, !String.
22200 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 79  IsNullOrEmpty(ty
22210 70 65 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  peName) ?..     
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22230 2e 22 20 2b 20 74 79 70 65 4e 61 6d 65 20 3a 20  ." + typeName : 
22240 53 74 72 69 6e 67 2e 45 6d 70 74 79 2c 20 22 2e  String.Empty, ".
22250 22 20 2b 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  " + fileNameOnly
22260 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
22270 20 20 20 20 20 20 20 20 4c 6f 67 46 69 6c 65 53          LogFileS
22280 75 66 66 69 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  uffix));....    
22290 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
222a0 65 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 65 77 46  e(fileName, newF
222b0 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
222c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
222d0 6e 65 77 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  newFileName;..  
222e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
222f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22340 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22350 61 74 69 63 20 76 6f 69 64 20 41 70 70 44 65 62  atic void AppDeb
22360 75 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug(..           
22370 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
22380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
22390 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
223a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
223b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
223c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
223d0 62 75 67 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  bugCore(String.F
223e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
223f0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
22400 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c 20 54 72  .DebugFormat, Tr
22410 61 63 65 4f 70 73 2e 4e 65 78 74 44 65 62 75 67  aceOps.NextDebug
22420 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
22430 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
22440 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
22450 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
22460 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
22470 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
22480 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
224d0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
224e0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70  e static void Ap
224f0 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  pTrace(..       
22500 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
22510 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
22520 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
22530 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
22540 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22550 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
22560 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69  s.TraceCore(Stri
22570 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
22580 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
22590 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74  eOps.TraceFormat
225a0 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 54  , TraceOps.NextT
225b0 72 61 63 65 49 64 28 29 2c 0d 0a 20 20 20 20 20  raceId(),..     
225c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
225d0 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
225e0 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
225f0 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
22600 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
22610 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
22620 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
22630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22670 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22680 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
22690 63 20 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  c Platform Handl
226a0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
226b0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
226c0 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
226d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
226e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
226f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
22700 45 3a 20 52 65 74 75 72 6e 73 20 74 72 75 65 20  E: Returns true 
22710 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  if the current p
22720 72 6f 63 65 73 73 20 69 73 20 36 34 2d 62 69 74  rocess is 64-bit
22730 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20  .  If this..    
22740 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
22750 20 69 73 20 74 72 75 65 2c 20 77 65 20 2a 6b 6e   is true, we *kn
22760 6f 77 2a 20 74 68 61 74 20 77 65 20 6d 75 73 74  ow* that we must
22770 20 62 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61   be running on a
22780 20 36 34 2d 62 69 74 0d 0a 20 20 20 20 20 20 20   64-bit..       
22790 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
227a0 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 61  erating system a
227b0 73 20 77 65 6c 6c 2e 20 20 48 6f 77 65 76 65 72  s well.  However
227c0 2c 20 69 66 20 74 68 69 73 20 69 73 20 66 61 6c  , if this is fal
227d0 73 65 2c 20 77 65 0d 0a 20 20 20 20 20 20 20 20  se, we..        
227e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 6f 20      //       do 
227f0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
22800 6b 6e 6f 77 20 74 68 61 74 20 77 65 20 61 72 65  know that we are
22810 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 33 32   running on a 32
22820 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20  -bit..          
22830 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61    //       opera
22840 74 69 6e 67 20 73 79 73 74 65 6d 2c 20 64 75 65  ting system, due
22850 20 74 6f 20 57 6f 57 36 34 20 28 57 69 6e 33 32   to WoW64 (Win32
22860 2d 6f 6e 2d 57 69 6e 36 34 29 2c 20 65 74 63 2e  -on-Win64), etc.
22870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
22880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
22890 74 75 72 6e 20 28 49 6e 74 50 74 72 2e 53 69 7a  turn (IntPtr.Siz
228a0 65 20 3d 3d 20 73 69 7a 65 6f 66 28 6c 6f 6e 67  e == sizeof(long
228b0 29 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69  )); // NOTE: Poi
228c0 6e 74 65 72 20 69 73 20 36 34 2d 62 69 74 73 3f  nter is 64-bits?
228d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
228e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
228f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22930 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22940 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  e static bool Is
22950 53 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79  SupportedRootKey
22960 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
22970 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69  ockRegistry regi
22980 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  stry,..         
22990 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
229a0 65 79 20 72 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey rootKey..    
229b0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
229c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
229d0 20 20 72 65 74 75 72 6e 20 4f 62 6a 65 63 74 2e    return Object.
229e0 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
229f0 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74 72  rootKey, registr
22a00 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 7c  y.CurrentUser) |
22a10 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
22a20 20 20 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65     Object.Refere
22a30 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
22a40 79 2c 20 72 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, registry.Loca
22a50 6c 4d 61 63 68 69 6e 65 29 3b 0d 0a 20 20 20 20  lMachine);..    
22a60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22a70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ab0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
22ac0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
22ad0 69 63 20 73 74 72 69 6e 67 20 47 65 74 52 6f 6f  ic string GetRoo
22ae0 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  tKeyName(..     
22af0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
22b00 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  4..            )
22b10 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
22b20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22b30 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
22b40 30 7d 7b 31 7d 22 2c 20 52 6f 6f 74 4b 65 79 4e  0}{1}", RootKeyN
22b50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
22b60 20 20 20 20 20 20 77 6f 77 36 34 20 26 26 20 49        wow64 && I
22b70 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
22b80 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
22b90 20 20 20 20 20 20 20 22 5c 5c 22 20 2b 20 57 6f         "\\" + Wo
22ba0 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3a 20  w64SubKeyName : 
22bb0 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
22bc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22bd0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
22be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22c20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22c30 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
22c40 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
22c50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
22c60 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
22c70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
22c80 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53    {..#if WINDOWS
22c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
22ca0 20 28 77 6f 77 36 34 29 0d 0a 20 20 20 20 20 20   (wow64)..      
22cb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22cc0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
22cd0 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
22ce0 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  4 == null)..    
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 20 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f     systemDirecto
22d20 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20 20 20 20  ryWow64 =..     
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
22d50 65 74 68 6f 64 73 2e 47 65 74 53 79 73 74 65 6d  ethods.GetSystem
22d60 44 69 72 65 63 74 6f 72 79 28 29 3b 0d 0a 20 20  Directory();..  
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22d80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22d90 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65 6d     return system
22da0 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 3b 0d  DirectoryWow64;.
22db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
22dd0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
22de0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22df0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
22e00 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 3d 20  temDirectory == 
22e10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
22e20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65             syste
22e30 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 45 6e 76  mDirectory = Env
22e40 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44  ironment.SystemD
22e50 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20  irectory;....   
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22e70 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65 63 74  urn systemDirect
22e80 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
22e90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
22ea0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
22eb0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
22ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
22f10 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63   #region Generic
22f20 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67   String Handling
22f30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
22f40 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
22f50 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
22f60 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
22f70 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..         
22f80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
22f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
22fa0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
22fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22fc0 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22   return "<null>"
22fd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22fe0 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d   string result;.
22ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70  .            Typ
23000 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47  e type = value.G
23010 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20  etType();....   
23020 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79 70           if (typ
23030 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45  e == typeof(XmlE
23040 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20  lement))..      
23050 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23060 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
23070 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58  ent element = (X
23080 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b  mlElement)value;
23090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
230a0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65      result = ele
230b0 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a  ment.OuterXml;..
230c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
230d0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
230e0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
230f0 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20  of(Version))..  
23100 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
23120 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28  sion version = (
23130 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a  Version)value;..
23140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23150 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
23160 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
23170 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20   version);..    
23180 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23190 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
231a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
231b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
231c0 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
231d0 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
231e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
231f0 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
23200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
23220 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
23230 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
23240 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
23250 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
23260 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
23270 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
23280 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
23290 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
232a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
232b0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
232c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
232d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
232e0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
232f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23300 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
23310 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
23320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23360 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
23370 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
23380 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
23390 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
233a0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
233b0 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
233c0 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
233d0 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
233e0 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
233f0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
23410 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
23420 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23430 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23440 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
23450 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23470 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
23480 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
234b0 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
234c0 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
234d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
234e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
23510 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
23520 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
23530 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
23560 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
23570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
23590 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
235a0 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
235b0 20 20 20 20 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 20 74 79 70               typ
235d0 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
235e0 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
235f0 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
23620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23630 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23640 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
23650 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
23660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23670 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23680 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23690 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
236a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
236b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
236c0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
236d0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
236e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
236f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23700 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23710 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
23720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
23780 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
23790 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
237a0 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
237b0 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
237c0 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
237d0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
237e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
237f0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
23800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
23810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23820 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
23830 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23850 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
23860 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
23890 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
238a0 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
238d0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
238e0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
238f0 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
23920 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
23930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
23950 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
23960 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23980 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
23990 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
239a0 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
239b0 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
239e0 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
239f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
23a30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23a50 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23a80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
23a90 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
23aa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
23ab0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
23ac0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23b10 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
23b20 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
23b30 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
23b40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
23b50 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
23b60 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
23b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
23b80 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
23b90 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23ba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23bb0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
23bc0 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f  rmat("{0}\\Micro
23bd0 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77  soft\\.NETFramew
23be0 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
23bf0 20 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65         GetRootKe
23c00 79 4e 61 6d 65 28 77 6f 77 36 34 29 29 3b 0d 0a  yName(wow64));..
23c10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23c20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
23c70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23c80 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
23c90 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
23ca0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23cb0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
23cc0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
23cd0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
23ce0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
23cf0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
23d00 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
23d10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23d20 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   wow64..        
23d30 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
23d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23d50 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53  ring format = !S
23d60 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
23d70 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  pty(platformName
23d80 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
23d90 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f       "{0}\\Micro
23da0 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c  soft\\{1}\\v{2}\
23db0 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20  \{3}" :..       
23dc0 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d           "{0}\\M
23dd0 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76  icrosoft\\{1}\\v
23de0 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {2}";....       
23df0 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
23e00 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74  ng.Format(format
23e10 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  , GetRootKeyName
23e20 28 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20  (wow64),..      
23e30 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
23e40 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
23e50 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
23e60 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
23e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23ed0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
23ee0 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67  c string GetImag
23ef0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
23f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23f10 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20  ring fileName.. 
23f20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
23f30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23f40 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
23f50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23f60 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
23f70 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20  y assembly =..  
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65    Assembly.Refle
23fa0 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f  ctionOnlyLoadFro
23fb0 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  m(fileName); /* 
23fc0 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23fe0 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
23ff0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24000 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 73         return as
24010 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74  sembly.ImageRunt
24020 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20  imeVersion;..   
24030 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24040 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
24050 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
24070 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
24080 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24090 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
240a0 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
240b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
240c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24100 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24110 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
24120 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77  string GetFramew
24130 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
24140 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
24150 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
24160 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
24170 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
24180 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
24190 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
241a0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
241b0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
241c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
241d0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
241e0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
241f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  {..            u
24200 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
24210 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
24220 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
24230 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
24240 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
24250 4b 65 79 2c 20 47 65 74 46 72 61 6d 65 77 6f 72  Key, GetFramewor
24260 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  kRootKeyName(wow
24270 36 34 29 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  64), false,..   
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24290 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
242a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
242b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
242c0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
242d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
242e0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
242f0 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
24300 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
24310 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
24320 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
24330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24340 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
24350 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20  allRoot", null, 
24360 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
24370 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24380 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
24390 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243b0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
243c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
243d0 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f    return Path.Co
243e0 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20  mbine(..        
243f0 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72              (str
24400 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e  ing)value, Strin
24410 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c  g.Format("v{0}",
24420 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
24430 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n));..          
24440 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
24450 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
24460 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
24470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
244b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
244c0 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61   #region Per-Fra
244d0 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20  mework/Platform 
244e0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
244f0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
24500 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
24510 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a  FrameworkList(..
24520 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
24530 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
24540 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
24550 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
24560 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a  configuration,..
24570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
24580 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
24590 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20  ameworkList..   
245a0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
245b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
245c0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
245d0 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
245f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
24600 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ew FrameworkList
24610 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
24620 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
24630 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20  List.RootKey == 
24640 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24650 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
24660 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72  List.RootKey = r
24670 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
24680 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
246c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
246d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
246e0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
246f0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
24700 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24710 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
24720 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
24730 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28   new StringList(
24740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24750 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
24760 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
24770 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
24780 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
247b0 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45  t.Names.Add(".NE
247c0 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d  TFramework");...
247d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
247e0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
247f0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
24800 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
24810 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
24820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24840 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24850 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
24860 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
24870 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24880 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24890 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
248a0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
248b0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
248d0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
248e0 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
248f0 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
24920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24970 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24980 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
24990 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
249a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
249b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
249c0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
249d0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
249e0 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28 29  new VersionMap()
249f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24a00 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
24a10 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
24a20 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
24a30 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a60 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
24a70 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e  t desktopVersion
24a80 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69  List = new Versi
24a90 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  onList();....   
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
24ac0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
24ad0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
24ae0 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20 20  oNetFx20)..     
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b00 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
24b10 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
24b20 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
24b30 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  7));....        
24b40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24b50 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
24b60 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
24b70 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
24b80 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
24ba0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
24bb0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
24bc0 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d  (4, 0, 30319));.
24bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24be0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
24bf0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
24c00 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
24c10 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d  tion.NoNetFx45).
24c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c30 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
24c40 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
24c50 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35  new Version(4, 5
24c60 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20  , 50709));....  
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
24c90 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e  Versions.Add(".N
24ca0 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20  ETFramework",.. 
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
24cd0 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20  rsionList);..   
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d00 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
24d10 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
24d20 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
24d30 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20  NoCompact)..    
24d40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d60 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
24d70 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e  .Versions.Add(".
24d80 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
24d90 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
24da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
24db0 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e  ew VersionList(n
24dc0 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a  ew Version[] {..
24dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24de0 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73          new Vers
24df0 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c  ion(2, 0, 0, 0),
24e00 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20   new Version(3, 
24e10 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20  5, 0, 0)..      
24e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29                })
24e30 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
24e40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24e50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24e60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24eb0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
24ec0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
24ed0 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  mNames == null).
24ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f00 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
24f10 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65  atformNames = ne
24f20 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
24f30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24f40 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
24f50 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
24f60 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
24f70 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20  .NoDesktop)..   
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
24fa0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
24fb0 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  (null);....     
24fc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
24fd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
24fe0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
24ff0 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
25000 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
25010 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25020 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
25030 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
25040 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63  rmNames.Add("Poc
25050 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20  ketPC");..      
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
25070 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
25080 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53  formNames.Add("S
25090 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20  martphone");..  
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
250c0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
250d0 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d  d("WindowsCE");.
250e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25100 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
25110 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
25120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25160 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
25170 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48  te static bool H
25180 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  aveFrameworkDire
25190 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
251a0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
251b0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
251c0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
251d0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
251e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
251f0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
25200 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
25210 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
25220 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
25230 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
25240 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
25250 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
25260 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
25270 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
25280 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
25290 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
252a0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
252b0 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d  tFrameworkKeyNam
252c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
252d0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
252e0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
252f0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
25300 65 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  e, wow64);....  
25310 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
25320 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
25330 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
25340 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
25350 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25360 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
25370 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
25380 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
25390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
253a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
253b0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
253c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
253d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
253e0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
253f0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61           if (pla
25400 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c  tformName != nul
25410 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70  l) // NOTE: Skip
25420 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20   non-desktop... 
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
25450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25460 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
25470 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f  ory = GetFramewo
25480 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254a0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
254b0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 6f 77  workVersion, wow
254c0 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
254d0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
254e0 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
254f0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
25500 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  y(directory)).. 
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25540 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
25550 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
25560 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
25570 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25580 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
25590 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
255a0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
255b0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
255c0 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20  .Lower,..       
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
255e0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
255f0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
25600 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25620 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
25630 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72  0} found via dir
25640 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  ectory {1}.",.. 
25650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25660 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
25670 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
25680 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
25690 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20  ctory)),..      
256a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
256b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
256c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
256d0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
256e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
256f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25760 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
25770 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
25780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
25790 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
257a0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
257b0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
257c0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
257d0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
257e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
257f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25800 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
25810 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25820 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
25830 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
25840 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
25850 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
25860 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
25870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25880 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
25890 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d 65  yName = GetFrame
258a0 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  workKeyName(..  
258b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
258c0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
258d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
258e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77  latformName, wow
258f0 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
25900 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
25910 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
25920 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
25930 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25950 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
25960 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
25970 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
25980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
259a0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
259d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
259e0 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
259f0 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20  ame != null) // 
25a00 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64  NOTE: Skip non-d
25a10 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20  esktop...       
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25a30 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
25a40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
25a50 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
25a60 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
25a70 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20  y.Lower,..      
25a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
25a90 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
25aa0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
25ab0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
25ae0 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20 72 65  {0} found via re
25af0 67 69 73 74 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20  gistry {1}.",.. 
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
25b20 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
25b30 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 4e   ForDisplay(keyN
25b40 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
25b50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25b60 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25b80 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
25b90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25ba0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25bb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bf0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25c00 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
25c10 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
25c20 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
25c30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25c40 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
25c50 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66  achFrameworkConf
25c60 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ig(..           
25c70 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
25c80 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
25c90 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
25ca0 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
25cb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
25cc0 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61  rameworkConfigCa
25cd0 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
25ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25cf0 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a  ring version, /*
25d00 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e   NOTE: Optional.
25d10 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
25d20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
25d30 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
25d40 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
25d50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
25d60 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
25d70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25d80 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
25d90 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
25da0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
25db0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
25dc0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
25dd0 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
25de0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
25df0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
25e00 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
25e10 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25e20 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25e30 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
25e40 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
25e50 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
25e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
25e70 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
25e80 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
25e90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25ea0 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
25eb0 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
25ec0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25ee0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
25ef0 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
25f00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25f10 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25f30 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
25f40 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
25f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f70 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
25f80 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22   framework list"
25f90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25fa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
25fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
25fd0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
25fe0 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
25ff0 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
26000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
26010 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
26020 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
26030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26040 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
26050 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
26060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26070 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
26080 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26090 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
260a0 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
260b0 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
260c0 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
260d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
260e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
260f0 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
26100 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
26110 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26130 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
26140 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
26150 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
26160 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
26170 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
26180 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26190 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
261a0 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
261b0 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
261e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
261f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26200 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
26210 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
26220 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26240 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
26250 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
26260 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
26270 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
26280 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
26290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
262a0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
262b0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
262c0 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
262d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
262f0 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
26300 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
26310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26320 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
26330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26340 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26350 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
26360 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
26370 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
26380 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
26390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
263a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
263b0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
263c0 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
263d0 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
263e0 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
263f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26400 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
26410 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
26420 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
26430 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
26440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26450 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
26460 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
26470 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
26480 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26490 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
264a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
264b0 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
264c0 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
264d0 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
264e0 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
264f0 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
26500 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26510 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
26520 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
26530 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
26540 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
26550 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
26560 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
26570 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
26580 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
26590 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
265a0 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
265b0 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
265c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
265d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
265e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
265f0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
26600 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
26620 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
26630 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
26640 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
26650 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
26660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
26680 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c  / NOTE: Skip all
26690 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61   non-desktop fra
266a0 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66  meworks (i.e. if
266b0 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20   the platform.. 
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
266d0 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20  /       name is 
266e0 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20  not null)...    
266f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26710 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
26720 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
26730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
26740 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
26750 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26770 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
26780 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73  e supported vers
26790 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72  ions of this par
267a0 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20  ticular..       
267b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
267c0 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20    framework...  
267d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
267e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
267f0 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72    VersionList fr
26800 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
26810 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
26820 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69         if (versi
26830 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
26840 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
26870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
26880 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72  OTE: Manual over
26890 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45  ride of the *ONE
268a0 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  * framework vers
268b0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..           
268c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
268d0 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20    to process... 
268e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
26900 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
26910 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
26920 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
26930 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t();..          
26940 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
26950 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  orkVersionList.A
26960 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76  dd(new Version(v
26970 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
26980 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
269a0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
269b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
269c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
269d0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
269e0 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c  rsions.TryGetVal
269f0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
26a20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  out frameworkVer
26a30 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20  sionList) ||..  
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a50 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b        (framework
26a60 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
26a70 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
26a80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26aa0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
26ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26ad0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
26af0 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72  each (Version fr
26b00 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69  ameworkVersion i
26b10 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
26b20 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  onList)..       
26b30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b50 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
26b60 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
26b70 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b90 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
26ba0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
26bb0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
26bc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26bd0 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d             "fram
26be0 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c  eworkName = {0},
26bf0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
26c00 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  n = {1}, " +..  
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e        "platformN
26c30 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ame = {2}", ForD
26c40 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
26c50 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
26c80 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
26c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ca0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
26cb0 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29  y(platformName))
26cc0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
26cd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26ce0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
26cf0 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  veFrameworkDirec
26d00 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
26d30 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
26d40 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d60 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
26d70 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77  rmName, wow64, w
26d80 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
26d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26da0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26dc0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
26dd0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
26de0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e00 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
26e10 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
26e20 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
26e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e40 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
26e50 72 6b 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74  rk directory not
26e60 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
26e70 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
26e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
26ea0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
26ec0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ef0 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
26f00 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
26f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26f40 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
26f50 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
26f60 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
26f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f80 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
26f90 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
26fa0 6f 6e 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  on, wow64, whatI
26fb0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fd0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
26fe0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72  sNullOrEmpty(dir
26ff0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27020 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
27030 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
27040 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
27050 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w,..            
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27070 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
27080 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
27090 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
270c0 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69  Framework {0} di
270d0 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c  rectory is inval
270e0 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  id, " +..       
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
27110 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
27120 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
27130 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
27160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27170 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
27180 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
27190 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271b0 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50     directory = P
271c0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
271d0 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29  ctory, "Config")
271e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
271f0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
27200 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
27210 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27240 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
27250 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
27260 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
27270 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
27280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27290 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
272a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
272b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
272c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272d0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
272e0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
272f0 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f  directory {1} do
27300 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20  es not " +..    
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20          "exist, 
27330 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f  skipping...", Fo
27340 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
27350 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
27360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27370 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
27380 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
27390 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
273a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
273b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
273c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
273d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
273e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273f0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
27400 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
27410 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d  ne(directory, "m
27420 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b  achine.config");
27430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27440 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c          if (!Fil
27450 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d  e.Exists(fileNam
27460 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
27470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27490 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
274a0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
274b0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
274c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274d0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
274e0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
274f0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
27500 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27520 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
27530 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31  work {0} file {1
27540 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  } does not exist
27550 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
27560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27570 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
27580 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
27590 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
275a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
275b0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
275c0 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65  Display(fileName
275d0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
275e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
27600 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27630 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61         bool loca
27640 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d  lSaved = false;.
27650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27660 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
27670 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27690 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
276a0 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65  ariant, name, de
276b0 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e  scription, typeN
276c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20    assemblyName, 
276f0 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 6f 77 36  clientData, wow6
27700 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  4, throwOnMissin
27710 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
27740 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c   ref localSaved,
27750 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27780 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27790 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
277c0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
277f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27800 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21 73  localSaved && !s
27810 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  aved)..         
27820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27830 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
27840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27850 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27860 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27880 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
27890 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
278a0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
278b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278d0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
278e0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
278f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
27900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27920 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20    "localSaved = 
27930 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d  {0}, saved = {1}
27940 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c      ForDisplay(l
27970 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44  ocalSaved), ForD
27980 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d  isplay(saved)),.
27990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
279a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
279c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
279d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
279e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
279f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27a00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27a10 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
27a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
27a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27a70 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b  ///....        [
27a80 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
27a90 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
27aa0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
27ab0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
27ac0 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72  c bool ForEachFr
27ad0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
27ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
27af0 63 6b 52 65 67 69 73 74 72 79 20 72 65 67 69 73  ckRegistry regis
27b00 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  try,..          
27b10 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
27b20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a  frameworkList,..
27b30 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
27b40 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c  eworkRegistryCal
27b50 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
27b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
27b70 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20 2f 2a 20  ing version, /* 
27b80 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20  NOTE: Optional. 
27b90 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
27ba0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
27bb0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
27bc0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
27bd0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
27be0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
27bf0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
27c00 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
27c10 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
27c20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
27c30 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
27c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
27c50 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
27c60 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
27c70 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
27c80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
27ca0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
27cb0 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
27cc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27cd0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
27ce0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27cf0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
27d00 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
27d10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d30 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
27d40 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
27d50 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
27d60 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27d70 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27d90 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
27da0 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
27db0 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
27dc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27dd0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
27de0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27e00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
27e10 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
27e20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27e30 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27e50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27e60 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
27e70 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
27e80 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
27e90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27ea0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
27eb0 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
27ec0 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
27ed0 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ef0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27f10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27f20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
27f30 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
27f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27f60 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
27f70 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
27f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f90 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
27fc0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
27fd0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
27fe0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28000 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
28010 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
28020 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
28030 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
28040 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
28050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
28060 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
28070 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
28080 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
28090 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
280a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
280b0 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
280c0 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
280d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
280e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
280f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
28110 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
28120 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
28130 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
28140 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
28150 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
28160 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28170 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
28180 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
28190 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
281a0 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
281b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
281c0 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
281d0 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
281e0 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
281f0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
28200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28210 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
28220 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
28230 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
28240 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
28250 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
28260 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28270 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
28280 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
28290 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
282a0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
282b0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
282c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
282d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
282e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
282f0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
28300 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
28310 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
28320 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
28330 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
28340 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
28350 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
28360 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
28370 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
28380 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28390 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
283a0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
283b0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
283c0 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
283d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
283e0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
283f0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
28400 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
28410 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
28430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28440 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
28450 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
28460 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
28470 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
28480 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
28490 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
284a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
284b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
284c0 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
284d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
284e0 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
284f0 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73          if (vers
28500 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
28510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28530 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
28540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
28550 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65  NOTE: Manual ove
28560 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e  rride of the *ON
28570 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  E* framework ver
28580 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
28590 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
285a0 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a     to process...
285b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285c0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
285d0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
285e0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
285f0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
28600 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  st();..         
28610 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
28620 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e  workVersionList.
28630 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
28640 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20  version));..    
28650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
28670 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
28680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28690 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
286a0 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
286b0 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
286c0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
286f0 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65   out frameworkVe
28700 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20  rsionList) ||.. 
28710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28720 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72         (framewor
28730 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20  kVersionList == 
28740 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
28750 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28770 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
28780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28790 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
287a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
287b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
287c0 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
287d0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
287e0 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
287f0 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
28800 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28820 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28830 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
28840 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20  ority.Lower,..  
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
28870 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
28880 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
28890 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
288a0 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61              "fra
288b0 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d  meworkName = {0}
288c0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
288d0 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20  on = {1}, " +.. 
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288f0 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
28900 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72  Name = {2}", For
28910 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
28920 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  kName),..       
28930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28940 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
28950 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
28960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28970 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
28980 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ay(platformName)
28990 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
289a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
289b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
289c0 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  aveFrameworkRegi
289d0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289f0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
28a00 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
28a10 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a30 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
28a40 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 77  rmName, wow64, w
28a50 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
28a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
28aa0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
28ab0 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20  ority.Low,..    
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ad0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
28ae0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
28af0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
28b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b10 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
28b20 72 6b 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20  rk registry not 
28b30 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
28b40 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b60 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
28b70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28b80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
28b90 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
28ba0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
28bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28bc0 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
28bd0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
28be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bf0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
28c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c10 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
28c20 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
28c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c40 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
28c50 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
28c60 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
28c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c80 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
28c90 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61  Name, clientData
28ca0 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e  , wow64, throwOn
28cb0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
28cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cd0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
28ce0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
28cf0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
28d00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28d40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28d50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28d60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28d70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28d80 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
28d90 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
28da0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
28db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28df0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
28e00 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56     #region Per-V
28e10 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
28e20 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
28e30 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
28e40 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
28e50 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20  alizeVsList(..  
28e60 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
28e70 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
28e80 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28e90 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
28ea0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
28eb0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73            ref Vs
28ec0 4c 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20  List vsList..   
28ed0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
28ee0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28ef0 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d     if (vsList ==
28f00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28f10 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d          vsList =
28f20 20 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a   new VsList();..
28f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28f40 20 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79   (vsList.RootKey
28f50 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
28f60 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
28f70 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74  t.RootKey = root
28f80 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
28f90 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56      if (vsList.V
28fa0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
28fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28fd0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
28fe0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
28ff0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
29000 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
29010 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
29020 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
29030 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29  ration.NoVs2005)
29040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29050 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
29060 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
29070 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f  rsion(8, 0)); //
29080 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
29090 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
290a0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
290b0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
290c0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
290d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
290e0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
290f0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
29100 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
29110 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20   2008....       
29120 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
29130 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
29140 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
29150 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29  ration.NoVs2010)
29160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29170 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
29180 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
29190 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f  rsion(10, 0));//
291a0 20 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20   2010....       
291b0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
291c0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
291d0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
291e0 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29  ration.NoVs2012)
291f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29200 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
29210 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
29220 72 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f  rsion(11, 0));//
29230 20 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20   2012..         
29240 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
29250 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
292b0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
292c0 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28  l HaveVsVersion(
292d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
292e0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
292f0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
29300 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
29310 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
29320 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
29330 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
29340 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
29350 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
29360 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
29370 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
29380 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
29390 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
293a0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
293b0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
293d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
293e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
293f0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
29400 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
29410 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77  ion, suffix, wow
29420 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
29430 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
29440 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
29450 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
29460 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29480 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
29490 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
294a0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
294b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
294c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
294d0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
294e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
29500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29510 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
29520 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
29530 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29550 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72  key, "InstallDir
29560 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ", null, whatIf,
29570 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
29580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29590 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
295a0 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
295b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
295c0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
295d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
295e0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28  ng directory = (
295f0 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d  string)value;...
29600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29610 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
29620 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
29630 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
29640 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
29650 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
29660 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29670 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
29680 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  s(directory)).. 
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
296b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
296c0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
296d0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
296e0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
296f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29700 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
29710 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
29720 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
29730 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29740 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
29750 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20  tudio {0} found 
29760 69 6e 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  in directory {1}
29770 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
29780 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
29790 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20  lay(vsVersion), 
297a0 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
297b0 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
297c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
297d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297f0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
29800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
29810 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
29820 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29860 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29870 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
29880 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
29890 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
298a0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
298b0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72   static bool For
298c0 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
298d0 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
298e0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
298f0 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
29900 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76          VsList v
29910 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  sList,..        
29920 20 20 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f      VisualStudio
29930 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b  RegistryCallback
29940 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
29950 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
29960 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
29970 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
29980 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
29990 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
299a0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
299b0 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
299c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
299d0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
299e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
299f0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
29a00 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
29a10 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
29a20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
29a30 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
29a40 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
29a50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
29a60 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
29a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
29aa0 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29ac0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
29ad0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29ae0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
29af0 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
29b00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
29b20 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
29b30 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
29b40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
29b50 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
29b60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
29b70 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
29b80 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76  yKey rootKey = v
29b90 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a  sList.RootKey;..
29ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
29bb0 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
29bc0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29bd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29be0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
29bf0 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
29c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
29c20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
29c30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29c40 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74  !IsSupportedRoot
29c50 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f  Key(registry, ro
29c60 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20  otKey))..       
29c70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29c80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
29c90 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
29ca0 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
29cb0 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
29cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
29cd0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
29ce0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29cf0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
29d00 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
29d10 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29d20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29d30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
29d40 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f  o VS versions fo
29d50 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
29d60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
29d70 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
29d80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29d90 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
29da0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e  ion vsVersion in
29db0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
29dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29de0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29df0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29e00 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
29e30 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29e40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
29e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29e60 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e 20       "vsVersion 
29e70 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
29e80 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d  ay(vsVersion)),.
29e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29ea0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
29eb0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
29ec0 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
29ed0 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  eVsVersion(..   
29ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ef0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
29f00 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
29f10 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20   wow64, whatIf, 
29f20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
29f30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
29f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f50 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
29f60 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
29f70 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
29f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f90 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
29fa0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
29fb0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73              "Vis
29fd0 75 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69  ual Studio versi
29fe0 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  on not found, sk
29ff0 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
2a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a010 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2a020 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2a030 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2a040 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
2a050 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2a060 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a070 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
2a080 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a090 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2a0a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a0b0 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
2a0c0 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
2a0d0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2a0e0 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
2a0f0 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c  suffix, package,
2a100 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a120 20 20 20 20 20 20 77 6f 77 36 34 2c 20 74 68 72        wow64, thr
2a130 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61  owOnMissing, wha
2a140 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
2a150 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
2a160 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a180 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2a190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a1a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2a1b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2a1c0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
2a1d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a1e0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2a1f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a240 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
2a250 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on Configuration
2a260 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a   File Handling..
2a270 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
2a280 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
2a290 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
2a2a0 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
2a2b0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2a2c0 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63  AddDbProviderFac
2a2d0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
2a2e0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
2a2f0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2a300 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
2a310 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2a320 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
2a330 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2a340 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2a350 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2a360 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
2a370 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2a380 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
2a390 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2a3a0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2a3b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a3c0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2a3d0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
2a3e0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
2a3f0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
2a400 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
2a410 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2a420 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2a430 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
2a440 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
2a450 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
2a460 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
2a470 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
2a480 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
2a490 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
2a4a0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2a4b0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
2a4c0 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
2a4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
2a4e0 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d  lElement addElem
2a4f0 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
2a500 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
2a510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a520 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2a530 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
2a540 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
2a550 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
2a560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2a570 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20   (addElement == 
2a580 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2a590 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a5a0 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65        string[] e
2a5b0 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d  lementNames = {.
2a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a5d0 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74       "system.dat
2a5e0 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46  a", "DbProviderF
2a5f0 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20  actories"..     
2a600 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
2a610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a620 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76   XmlElement prev
2a630 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  iousElement =.. 
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a650 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75     document.Docu
2a660 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20  mentElement; /* 
2a670 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
2a680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a690 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
2a6a0 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20  ing elementName 
2a6b0 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29  in elementNames)
2a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a6d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a6e0 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d           addElem
2a6f0 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c  ent = previousEl
2a700 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ement.SelectSing
2a710 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a730 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73   elementName) as
2a740 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a   XmlElement;....
2a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a760 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
2a770 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt == null)..   
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a7a0 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
2a7b0 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
2a7c0 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
2a7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
2a7f0 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
2a800 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a820 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
2a830 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
2a840 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  (addElement);.. 
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a860 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a870 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76              prev
2a880 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64  iousElement = ad
2a890 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20  dElement;..     
2a8a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2a8d0 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
2a8e0 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
2a8f0 20 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c            "add",
2a900 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
2a910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a920 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65     previousEleme
2a930 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61  nt.AppendChild(a
2a940 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20  ddElement);.... 
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2a960 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2a970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2a980 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2a990 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
2a9a0 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
2a9b0 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a  ibute("name"),..
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9d0 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67      name, String
2a9e0 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
2a9f0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
2aa00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2aa10 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e       addElement.
2aa20 53 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  SetAttribute("na
2aa30 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  me", name);..   
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2aa50 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2aa60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2aa70 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
2aa80 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
2aa90 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
2aaa0 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29  ute("invariant")
2aab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2aac0 20 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74         invariant
2aad0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
2aae0 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20  on.Ordinal))..  
2aaf0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2ab10 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  Element.SetAttri
2ab20 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
2ab30 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20  , invariant);.. 
2ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ab50 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
2ab60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2ab70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2ab80 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64  String.Equals(ad
2ab90 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72  dElement.GetAttr
2aba0 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69  ibute("descripti
2abb0 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on"),..         
2abc0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72             descr
2abd0 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f  iption, StringCo
2abe0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
2abf0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ac00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ac10 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
2ac20 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73 63  tAttribute("desc
2ac30 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72 69  ription", descri
2ac40 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  ption);..       
2ac50 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
2ac60 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2ac70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ac80 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c 6c       string full
2ac90 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e  TypeName = Strin
2aca0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b  g.Format("{0}, {
2acb0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2acc0 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c 20        typeName, 
2acd0 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a  assemblyName);..
2ace0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2acf0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
2ad00 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
2ad10 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29  ttribute("type")
2ad20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ad30 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e         fullTypeN
2ad40 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
2ad50 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
2ad60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad80 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
2ad90 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
2ada0 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
2adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adc0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2add0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2adf0 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2ae00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ae10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ae20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae40 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2ae50 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2ae60 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2ae70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ae80 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2ae90 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2aea0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2aeb0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aed0 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2aee0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61  }", ForDisplay(a
2aef0 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  ddElement)),..  
2af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2af20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2af30 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
2af40 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
2af50 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
2af60 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
2af70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2af80 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69         filesModi
2af90 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  fied++;....     
2afa0 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
2afb0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
2afc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2afd0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2afe0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
2aff0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2b000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b040 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65  /....        [Me
2b050 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2b060 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2b070 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2b080 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2b090 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f  bool RemoveDbPro
2b0a0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
2b0b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2b0c0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
2b0d0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b0e0 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
2b0f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2b100 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2b110 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2b120 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2b130 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2b140 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2b150 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2b160 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b170 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b180 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
2b190 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2b1a0 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
2b1b0 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
2b1c0 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2b1e0 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
2b1f0 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
2b200 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
2b210 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
2b220 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2b230 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
2b240 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
2b250 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
2b260 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
2b270 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
2b280 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
2b290 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
2b2a0 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
2b2b0 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
2b2c0 20 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d       if (addElem
2b2d0 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
2b2e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64               add
2b300 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2b310 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61  de.RemoveChild(a
2b320 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  ddElement);..   
2b330 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
2b340 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
2b350 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b360 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
2b370 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  ent removeElemen
2b380 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
2b390 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
2b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
2b3c0 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
2b3d0 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29  ent, invariant))
2b3e0 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
2b3f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b400 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  f (removeElement
2b410 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2b420 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b430 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
2b440 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  Element.ParentNo
2b450 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72  de.RemoveChild(r
2b460 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a  emoveElement);..
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b480 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
2b490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b4b0 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
2b4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2b4d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b4e0 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
2b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b500 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2b510 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2b520 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2b530 0d 0a 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 64 65 62 75 67 43            debugC
2b550 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2b560 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2b570 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b590 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30  "addElement = {0
2b5a0 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  }, removeElement
2b5b0 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
2b5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64    ForDisplay(add
2b5e0 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73  Element), ForDis
2b5f0 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65  play(removeEleme
2b600 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt)),..         
2b610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2b620 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2b630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b640 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
2b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b660 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76      document.Sav
2b670 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(fileName);....
2b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b690 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b  filesModified++;
2b6a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b6b0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
2b6c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b6d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b6e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2b6f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b700 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2b710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b750 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2b760 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
2b770 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
2b780 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2b790 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
2b7a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2b7b0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
2b7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2b7d0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
2b7e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2b7f0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
2b800 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2b810 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
2b820 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
2b830 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
2b840 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2b850 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2b860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2b870 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
2b880 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
2b890 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
2b8a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2b8b0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2b8c0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2b8d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
2b8e0 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2b900 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2b910 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b930 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2b940 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2b950 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2b960 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2b970 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2b980 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2b990 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b9a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b9b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2b9c0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
2b9d0 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63  k config callbac
2b9e0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2b9f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ba00 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2ba10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ba20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2ba30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ba40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba50 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44    return RemoveD
2ba60 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2ba70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2ba80 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
2ba90 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74   invariant, what
2baa0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2bab0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
2bad0 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20   error) &&..    
2bae0 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44              AddD
2baf0 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
2bb00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2bb10 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
2bb20 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65   invariant, name
2bb30 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74  , description, t
2bb40 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
2bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
2bb60 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74  semblyName, what
2bb70 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
2bb80 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f   saved, ref erro
2bb90 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2bba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2bbb0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2bbc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2bbd0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
2bbe0 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
2bbf0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2bc00 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
2bc10 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77  me, invariant, w
2bc20 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
2bc30 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ref saved,..    
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2bc60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2bc70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2bc80 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2bc90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2bca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2bce0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2bcf0 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73  Assembly Folders
2bd00 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2bd10 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2bd20 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65  c string GetAsse
2bd30 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
2bd40 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
2bd50 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
2bd60 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
2bd70 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
2bd80 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
2bd90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2bda0 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
2bdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bdc0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
2bdd0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2bde0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
2bdf0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2be00 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 67  / NOTE: This reg
2be10 69 73 74 72 79 20 6b 65 79 20 61 70 70 65 61 72  istry key appear
2be20 73 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 33  s to always be 3
2be30 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a 20 20 20 20  2-bit only..    
2be40 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2be50 20 28 69 2e 65 2e 20 70 72 6f 62 61 62 6c 79 20   (i.e. probably 
2be60 62 65 63 61 75 73 65 20 69 74 20 69 73 20 6f 6e  because it is on
2be70 6c 79 20 75 73 65 64 20 62 79 20 56 69 73 75 61  ly used by Visua
2be80 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  l..            /
2be90 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f 2c 20  /       Studio, 
2bea0 77 68 69 63 68 20 69 73 20 63 75 72 72 65 6e 74  which is current
2beb0 6c 79 20 61 6c 77 61 79 73 20 33 32 2d 62 69 74  ly always 32-bit
2bec0 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20 20 20 20 20   only)...       
2bed0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2bee0 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
2bef0 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
2bf00 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
2bf10 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
2bf20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2bf30 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
2bf40 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73  \\v{2}\\{3}\\Ass
2bf50 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 20  emblyFoldersEx" 
2bf60 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
2bf70 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f     "{0}\\Microso
2bf80 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41  ft\\{1}\\v{2}\\A
2bf90 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
2bfa0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
2bfb0 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
2bfc0 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 47  Format(format, G
2bfd0 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f  etRootKeyName(wo
2bfe0 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
2bff0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2c000 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2c010 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2c020 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
2c030 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c080 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c090 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
2c0a0 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c  ool AddToAssembl
2c0b0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
2c0c0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2c0d0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
2c0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2c0f0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
2c100 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2c110 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2c120 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2c130 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
2c140 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
2c150 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c160 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
2c170 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2c180 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
2c190 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2c1a0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2c1b0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2c1c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2c1d0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2c1e0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2c1f0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2c200 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2c210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2c220 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
2c230 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
2c240 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
2c250 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2c260 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2c270 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2c280 66 6f 72 6d 4e 61 6d 65 2c 20 77 6f 77 36 34 29  formName, wow64)
2c290 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2c2a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2c2b0 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
2c2c0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2c2d0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2c2f0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
2c300 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2c310 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2c320 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c330 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2c340 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2c350 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c370 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2c380 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3a0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2c3b0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2c3c0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3e0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2c3f0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2c400 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c410 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2c420 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c440 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2c450 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2c460 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2c470 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c490 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
2c4a0 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
2c4b0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2c4c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4e0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2c4f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2c500 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c520 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2c530 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c550 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2c560 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
2c570 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
2c580 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
2c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5a0 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
2c5b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
2c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c5d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2c600 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
2c610 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
2c620 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
2c640 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  Key, null, direc
2c650 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65  tory, whatIf, ve
2c660 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2c670 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c680 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c690 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c6a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
2c6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2c6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c700 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2c710 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2c720 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  ol RemoveFromAss
2c730 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
2c740 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2c750 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2c760 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2c770 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
2c780 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  kName,..        
2c790 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
2c7a0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
2c7b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c7c0 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  g platformName,.
2c7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2c7e0 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
2c7f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2c800 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2c810 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
2c820 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
2c830 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2c840 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2c850 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2c860 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c870 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2c880 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2c890 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c8a0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
2c8b0 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
2c8c0 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
2c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c8e0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
2c8f0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2c900 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
2c910 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2c920 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2c930 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2c940 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2c950 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2c960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c970 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2c980 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61  yName, true, wha
2c990 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c9c0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2c9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c9e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c9f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2ca00 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2ca30 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2ca40 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
2ca50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ca60 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
2ca70 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
2ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2caa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2cab0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2cac0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2cad0 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
2cae0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2caf0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
2cb00 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
2cb10 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
2cb20 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2cb30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2cb40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2cb50 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
2cb60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2cb70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cbb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2cbc0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2cbd0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
2cbe0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2cbf0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2cc00 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2cc10 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2cc20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2cc30 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2cc40 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2cc50 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2cc60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2cc70 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2cc90 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2ccb0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
2ccc0 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
2ccd0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
2cce0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2ccf0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2cd00 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2cd20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2cd30 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2cd40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cd50 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2cd60 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2cd70 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2cd80 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2cd90 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2cda0 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2cdb0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2cdc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2cdd0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2cde0 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72  invalid framewor
2cdf0 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  k callback data"
2ce00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2ce10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2ce20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2ce30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2ce40 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
2ce50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ce60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ce70 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
2ce80 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
2ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cea0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
2ceb0 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2cec0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2ced0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
2cef0 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
2cf00 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20  , wow64, false, 
2cf10 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2cf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cf30 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2cf40 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
2cf50 20 20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62       AddToAssemb
2cf60 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf80 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2cf90 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2cfa0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
2cfb0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
2cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
2cfd0 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58  jectName, pair.X
2cfe0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2cff0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
2d000 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
2d010 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d020 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2d030 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d040 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
2d050 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
2d060 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2d080 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
2d090 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2d0a0 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2d0b0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2d0c0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
2d0d0 63 74 4e 61 6d 65 2c 20 77 6f 77 36 34 2c 20 74  ctName, wow64, t
2d0e0 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
2d0f0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
2d100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d110 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
2d120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d130 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2d140 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2d150 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d1a0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2d1b0 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
2d1c0 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  io Handling..   
2d1d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2d1e0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56 73  tic string GetVs
2d1f0 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  RootKeyName(..  
2d200 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d210 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2d220 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2d230 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d240 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2d250 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
2d260 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c  \\VisualStudio",
2d270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d280 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
2d290 28 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20 20  (wow64));..     
2d2a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d2f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2d300 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2d310 63 20 73 74 72 69 6e 67 20 47 65 74 56 73 4b 65  c string GetVsKe
2d320 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
2d330 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2d340 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2d350 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
2d360 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
2d370 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
2d380 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2d390 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d3a0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
2d3b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2d3c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d3d0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2d3e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
2d3f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2d400 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
2d410 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74 56  }\\{1}{2}", GetV
2d420 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 77 6f 77  sRootKeyName(wow
2d430 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  64), vsVersion, 
2d440 73 75 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20  suffix);..      
2d450 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2d460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d4a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d4b0 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
2d4c0 20 53 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75   Studio Data Sou
2d4d0 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  rce Handling..  
2d4e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d4f0 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
2d500 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
2d510 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2d520 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2d530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2d540 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
2d550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d560 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
2d570 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2d580 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2d590 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
2d5a0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
2d5b0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2d5c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2d5d0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2d5e0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2d5f0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2d600 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2d610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2d620 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e   (vsVersion == n
2d630 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d640 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d650 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2d660 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e  valid VS version
2d670 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2d680 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d6a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d6b0 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
2d6c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d6d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d6e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2d6f0 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65  valid VS package
2d700 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2d710 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2d720 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2d730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d740 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
2d750 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
2d760 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
2d770 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20   wow64);....    
2d780 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
2d790 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
2d7a0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
2d7b0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
2d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7d0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
2d7e0 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
2d7f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2d800 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d820 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
2d830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d840 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d850 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d860 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2d870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d880 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2d890 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2d8a0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
2d8b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2d8c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2d8d0 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
2d8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d8f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2d900 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2d910 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d920 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2d930 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2d940 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
2d950 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
2d960 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
2d970 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
2d980 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c  , "DataSources",
2d990 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
2d9a0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
2d9b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d9d0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
2d9e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2d9f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da10 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
2da20 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da40 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
2da50 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
2da60 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
2da70 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20  Sources",..     
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da90 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
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 20 72 65 74 75 72 6e 20 66          return f
2dac0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2dad0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daf0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
2db00 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 53  egistryKey dataS
2db10 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20  ourceKey =..    
2db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2db30 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2db40 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
2db50 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
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 70 61 63 6b 61 67 65           package
2db80 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
2db90 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2dba0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dbc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2dbd0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2dbe0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc00 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63     if (dataSourc
2dc10 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc50 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2dc60 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2dc90 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
2dca0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2dcb0 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20  }\\{1}", key,.. 
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
2dce0 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
2dcf0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
2dd00 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20  dFormat));....  
2dd10 20 20 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 72 65 74 75 72 6e            return
2dd30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dd50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2dd70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2dd80 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dda0 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65      dataSourceKe
2ddb0 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e  y, null, String.
2ddc0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dde0 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61       "{0} Databa
2ddf0 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63  se File", Projec
2de00 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d  tName), whatIf,.
2de10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
2de30 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2de40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de50 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2de70 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75   NOTE: This valu
2de80 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31  e is new as of 1
2de90 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20  .0.83.0...      
2dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2deb0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2ded0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2dee0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df00 20 20 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65      dataSourceKe
2df10 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69  y, "DefaultProvi
2df20 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  der",..         
2df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df40 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
2df50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
2df60 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d  ng(VsIdFormat),.
2df70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2df80 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2df90 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2dfa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dfb0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2dfc0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
2dfd0 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65  ubKey(dataSource
2dfe0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
2e010 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69  "SupportingProvi
2e020 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20  ders\\{0}",..   
2e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e040 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
2e050 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
2e060 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
2e070 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
2e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e090 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
2e0a0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
2e0b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e0f0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2e100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e110 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2e120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e150 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2e160 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2e170 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
2e180 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
2e190 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2e1a0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2e1b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2e1c0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
2e1d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2e1e0 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20  tring suffix,.. 
2e1f0 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
2e200 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
2e210 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2e220 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2e230 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2e240 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e250 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2e260 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
2e270 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
2e280 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2e290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
2e2a0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
2e2b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e2c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e2d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e2e0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
2e2f0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
2e300 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e310 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e320 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e330 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
2e340 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e350 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e360 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e370 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
2e380 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
2e390 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e3a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e3b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e3c0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2e3d0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2e3e0 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2e3f0 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
2e400 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
2e410 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e420 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
2e430 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
2e440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e450 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
2e460 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
2e470 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
2e480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e4a0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
2e4b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2e4c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e4d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e4e0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2e4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e500 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2e510 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2e520 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
2e530 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2e540 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2e550 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
2e560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e570 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2e580 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2e590 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e5a0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
2e5b0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
2e5c0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
2e5d0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
2e5e0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2e600 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22  y, "DataSources"
2e610 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
2e620 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2e630 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e650 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
2e660 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e670 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e690 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
2e6a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6c0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
2e6d0 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
2e6e0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
2e6f0 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20  aSources",..    
2e700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e710 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
2e720 0a 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 72 65 74 75 72 6e 20           return 
2e740 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2e760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e770 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
2e780 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
2e790 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2e7b0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44  ubKey, package.D
2e7c0 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
2e7d0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2e7e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e7f0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2e800 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
2e810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2e820 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2e840 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2e850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e860 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2e870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e8a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2e8b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2e8c0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56  ic bool ProcessV
2e8d0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
2e8e0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2e8f0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2e900 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2e910 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
2e920 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2e930 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
2e940 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
2e950 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
2e960 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2e970 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
2e980 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2e990 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2e9a0 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2e9b0 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2e9c0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2e9d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2e9e0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2e9f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2ea00 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2ea10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2ea20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ea30 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
2ea40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ea50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ea60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2ea70 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
2ea80 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
2ea90 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2eaa0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2eab0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2eac0 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
2ead0 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
2eae0 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
2eaf0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
2eb00 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
2eb10 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
2eb20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2eb30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2eb40 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2eb50 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
2eb60 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
2eb70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2eb80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2eb90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2eba0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
2ebb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ebc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ebd0 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
2ebe0 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
2ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ec00 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
2ec10 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
2ec20 67 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  ge, wow64, whatI
2ec30 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2ec40 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
2ec50 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
2ec60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2ec70 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
2ec80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2eca0 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74  turn RemoveVsDat
2ecb0 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
2ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2ecd0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2ece0 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67  , suffix, packag
2ecf0 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  e, wow64, whatIf
2ed00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ed10 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20         verbose, 
2ed20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
2ed30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2ed40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2ed50 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2ed60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2ed70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ed90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eda0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2edb0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2edc0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
2edd0 74 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64  ta Provider Hand
2ede0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2edf0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2ee00 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69  l AddVsDataProvi
2ee10 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
2ee20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
2ee30 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
2ee40 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
2ee50 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
2ee60 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
2ee70 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
2ee80 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
2ee90 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
2eea0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
2eeb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2eec0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2eed0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2eee0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2eef0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2ef00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2ef10 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2ef20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2ef30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ef40 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
2ef50 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
2ef60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2ef80 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2ef90 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20   version";..    
2efa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2efb0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2efc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2efd0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
2efe0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
2eff0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f000 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2f010 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
2f020 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20   package";..    
2f030 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2f040 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2f050 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f060 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2f070 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
2f080 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c  yName(vsVersion,
2f090 20 73 75 66 66 69 78 2c 20 77 6f 77 36 34 29 3b   suffix, wow64);
2f0a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f0b0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2f0c0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2f0d0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2f0e0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2f100 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2f110 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2f120 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2f130 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f140 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2f150 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2f160 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f180 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2f190 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2f1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1b0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2f1c0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2f1d0 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f1f0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2f200 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2f210 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f220 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2f230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f250 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2f260 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2f270 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2f280 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2a0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
2f2b0 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
2f2c0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2f2d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2f2e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f2f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
2f300 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
2f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f320 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2f340 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
2f350 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f370 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
2f380 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
2f390 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
2f3a0 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
2f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3c0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2f3f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2f400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2f410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f420 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2f430 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69  tryKey dataProvi
2f440 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  derKey =..      
2f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f460 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2f470 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2f480 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
2f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4a0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
2f4b0 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
2f4c0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
2f4d0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
2f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2f500 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2f510 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f530 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76 69     if (dataProvi
2f540 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  derKey == null).
2f550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f580 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f590 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5c0 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
2f5d0 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
2f5e0 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
2f5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f610 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
2f620 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
2f630 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
2f640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2f660 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f680 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6a0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
2f6b0 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
2f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6d0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
2f6e0 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44  iderKey, null, D
2f6f0 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74  escription, what
2f700 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f740 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f760 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20    // NOTE: This 
2f770 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20  value is new as 
2f780 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 20 20 48 6f  of 1.0.83.0.  Ho
2f790 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  wever,..        
2f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7b0 2f 2f 20 20 20 20 20 20 20 69 74 20 73 68 6f 75  //       it shou
2f7c0 6c 64 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  ld only be set i
2f7d0 66 20 74 68 65 20 70 61 63 6b 61 67 65 20 61 73  f the package as
2f7e0 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f800 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 61 6c 6c  //       and all
2f810 20 74 68 65 20 61 73 73 65 6d 62 6c 69 65 73 20   the assemblies 
2f820 69 74 20 72 65 66 65 72 73 20 74 6f 20 61 72 65  it refers to are
2f830 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   being..        
2f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f850 2f 2f 20 20 20 20 20 20 20 70 6c 61 63 65 64 20  //       placed 
2f860 69 6e 74 6f 20 74 68 65 20 67 6c 6f 62 61 6c 20  into the global 
2f870 61 73 73 65 6d 62 6c 79 20 63 61 63 68 65 2e 0d  assembly cache..
2f880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f890 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8b0 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
2f8c0 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  .GlobalAssemblyC
2f8d0 61 63 68 65 29 0d 0a 20 20 20 20 20 20 20 20 20  ache)..         
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2f910 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2f920 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f940 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
2f950 69 64 65 72 4b 65 79 2c 20 22 41 73 73 65 6d 62  iderKey, "Assemb
2f960 6c 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ly",..          
2f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f980 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 73        package.As
2f990 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74 72  semblyName.ToStr
2f9a0 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20 20 20 20  ing(),..        
2f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9c0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
2f9d0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
2f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2fa30 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20  OTE: This value 
2fa40 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30  is new as of 1.0
2fa50 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20  .83.0...        
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2fa80 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2fa90 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2faa0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
2fad0 79 2c 20 22 41 73 73 6f 63 69 61 74 65 64 53 6f  y, "AssociatedSo
2fae0 75 72 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  urce",..        
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb00 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
2fb10 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
2fb20 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
2fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb40 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
2fb50 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
2fb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb70 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
2fb80 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
2fb90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2fbb0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
2fbc0 22 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c  "InvariantName",
2fbd0 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d   InvariantName,.
2fbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
2fc00 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
2fc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fc20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
2fc30 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
2fc40 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc60 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
2fc70 20 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a   "Technology",..
2fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
2fca0 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f  age.AdoNetTechno
2fcb0 6c 6f 67 79 49 64 2e 54 6f 53 74 72 69 6e 67 28  logyId.ToString(
2fcc0 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fce0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
2fcf0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
2fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd10 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2fd20 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
2fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
2fd50 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 43  aProviderKey, "C
2fd60 6f 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e 61  odeBase", fileNa
2fd70 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  me, whatIf,..   
2fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd90 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
2fda0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
2fdc0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
2fdd0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdf0 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
2fe00 4b 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65 72  Key, "FactorySer
2fe10 76 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  vice",..        
2fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe30 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76      package.Serv
2fe40 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
2fe50 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
2fe60 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe80 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
2fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fea0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2feb0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
2fec0 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
2fed0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fef0 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
2ff00 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f  s\\DataConnectio
2ff10 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20  nUIControl",..  
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
2ff40 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
2ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff60 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
2ff70 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
2ff80 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
2ff90 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
2ffc0 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69  ts\\DataConnecti
2ffd0 6f 6e 50 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a  onProperties",..
2ffe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fff0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
30000 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
30010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30020 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
30030 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
30040 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
30050 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
30060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30070 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
30080 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63  ects\\DataConnec
30090 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77 68  tionSupport", wh
300a0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
300b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300c0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300e0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
300f0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
30100 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
30110 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
30120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30130 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
30140 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53  cts\\DataObjectS
30150 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
30160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
30180 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
30190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301a0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
301b0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
301c0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
301d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
301f0 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
30200 44 61 74 61 56 69 65 77 53 75 70 70 6f 72 74 22  DataViewSupport"
30210 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
30220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30230 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
30240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
30260 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30270 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
30280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
30290 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
302a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
302b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
302f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
30300 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
30310 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50  ol RemoveVsDataP
30320 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
30330 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
30340 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
30350 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
30360 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
30370 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30380 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
30390 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
303a0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
303b0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
303c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
303d0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
303e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
303f0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
30400 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
30410 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
30420 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
30430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30440 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
30450 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30470 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
30480 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
30490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
304a0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
304b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
304c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
304d0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
304e0 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
304f0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77  rsion, suffix, w
30500 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
30510 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
30520 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
30530 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
30540 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
30550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30560 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
30570 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
30580 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
30590 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
305a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
305b0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
305c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
305d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
305e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
305f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
30600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30610 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
30620 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
30630 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
30640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30650 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
30660 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
30670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30680 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
30690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
306b0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
306c0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
306d0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
306e0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
306f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
30700 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
30710 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  "DataProviders",
30720 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
30730 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
30740 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30760 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
30770 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30780 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307a0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
307b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307d0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
307e0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
307f0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
30800 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20  Providers",..   
30810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30820 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
30830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30840 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30850 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
30860 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30880 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
30890 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
308a0 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
308b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
308c0 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e  subKey, package.
308d0 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
308e0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
308f0 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  at),..          
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
30910 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
30920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30930 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
30940 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30950 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
30960 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30970 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
30980 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
309c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
309d0 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
309e0 73 73 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ssVsDataProvider
309f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
30a00 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
30a10 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
30a20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
30a30 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
30a40 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
30a50 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
30a60 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
30a70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
30a80 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
30a90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30aa0 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
30ab0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72          bool thr
30ac0 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20  owOnMissing,..  
30ad0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
30ae0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
30af0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
30b00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
30b10 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
30b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
30b30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30b40 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
30b50 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69  tring, bool> pai
30b60 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61  r = clientData a
30b70 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67  s AnyPair<string
30b80 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20  , bool>;....    
30b90 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
30ba0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
30bb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30bc0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
30bd0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61  = "invalid VS ca
30be0 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
30bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30c00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
30c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30c20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
30c30 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
30c40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30c50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64         return Ad
30c60 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  dVsDataProvider(
30c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30c80 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
30c90 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
30ca0 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e  , package, pair.
30cb0 58 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  X, wow64,..     
30cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
30cd0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
30ce0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
30cf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
30d00 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
30d10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30d20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
30d30 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61  urn RemoveVsData
30d40 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
30d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30d60 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
30d70 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
30d80 67 65 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49  ge, wow64, whatI
30d90 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
30da0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
30db0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
30dc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
30dd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
30de0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
30df0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
30e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
30e40 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
30e50 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 50   Visual Studio P
30e60 61 63 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67 0d  ackage Handling.
30e70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
30e80 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69   static void Ini
30e90 74 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65  tializeVsPackage
30ea0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  (..            A
30eb0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
30ec0 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
30ed0 20 20 20 20 20 20 20 62 6f 6f 6c 20 67 6c 6f 62         bool glob
30ee0 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 2c  alAssemblyCache,
30ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
30f00 66 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67  f Package packag
30f10 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
30f20 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
30f30 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
30f40 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
30f50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
30f70 63 6b 61 67 65 20 3d 20 6e 65 77 20 50 61 63 6b  ckage = new Pack
30f80 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  age();....      
30f90 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
30fa0 65 2e 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  e.AssemblyName =
30fb0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a   assemblyName;..
30fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30fd0 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73  package.GlobalAs
30fe0 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 67 6c  semblyCache = gl
30ff0 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
31000 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
31010 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64        package.Ad
31020 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
31030 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
31040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31050 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42 39    "77AB9A9D-78B9
31060 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46 35  -4BA7-91AC-873F5
31070 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20 20  338F1D2");....  
31080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
31090 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 20  ckage.PackageId 
310a0 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
310b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310c0 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
310d0 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
310e0 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9C");....   
310f0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
31100 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 20 3d  kage.ServiceId =
31110 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
31120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31130 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d 34  "DCBE6C8D-0E57-4
31140 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34 43  099-A183-98FF74C
31150 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20 20  64D9D");....    
31160 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
31170 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
31180 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311a0 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30    "0EBAAB6E-CA80
311b0 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42  -4B4A-8DDF-CBE6B
311c0 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20  F058C71");....  
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
311e0 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
311f0 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28  erId = new Guid(
31200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31210 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d        "0EBAAB6E-
31220 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43  CA80-4B4A-8DDF-C
31230 42 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d 0a  BE6BF058C70");..
31240 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
31250 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
31260 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
31270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
312b0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
312c0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73  tatic bool AddVs
312d0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
312e0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
312f0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
31300 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
31310 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
31320 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31330 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
31340 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
31350 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
31360 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
31370 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
31380 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
31390 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
313a0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
313b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
313c0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
313d0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
313e0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
313f0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
31400 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
31410 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
31420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
31430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31440 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
31450 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
31460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31470 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31480 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31490 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
314a0 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
314b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
314c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314d0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
314e0 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31500 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31510 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31520 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31530 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
31540 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
31550 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 77 6f 77  ion, suffix, wow
31560 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
31570 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
31580 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
31590 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
315a0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
315b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315c0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
315d0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
315e0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
315f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31600 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31610 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
31620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31640 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
31650 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
31680 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
31690 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316b0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
316c0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
316d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
31710 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
31720 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
31730 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
31740 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
31750 0a 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 6b 65 79 2c 20 22 50           key, "P
31770 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20  ackages", true, 
31780 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
31790 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
317a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
317b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
317c0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
317d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
317f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
31800 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
31810 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31830 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
31840 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
31850 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d  {0}\\Packages",.
31860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31870 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
31880 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
318a0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
318b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
318d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
318e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318f0 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41 52 4e    // NOTE: *WARN
31900 49 4e 47 2a 20 43 68 61 6e 67 69 6e 67 20 61 6e  ING* Changing an
31910 79 20 6f 66 20 74 68 65 73 65 20 76 61 6c 75 65  y of these value
31920 73 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20  s will likely.. 
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31940 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 71 75     //       requ
31950 69 72 65 20 61 20 6e 65 77 20 22 70 61 63 6b 61  ire a new "packa
31960 67 65 20 6c 6f 61 64 20 6b 65 79 22 20 28 50 4c  ge load key" (PL
31970 4b 29 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  K) to be..      
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
31990 20 20 20 20 20 20 20 67 65 6e 65 72 61 74 65 64         generated
319a0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 6f   in order to pro
319b0 70 65 72 6c 79 20 73 75 70 70 6f 72 74 20 6c 6f  perly support lo
319c0 61 64 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  ading the..     
319d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
319e0 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20  /       package 
319f0 69 6e 74 6f 20 56 69 73 75 61 6c 20 53 74 75 64  into Visual Stud
31a00 69 6f 20 32 30 30 38 20 61 6e 64 20 65 61 72 6c  io 2008 and earl
31a10 69 65 72 20 77 69 74 68 6f 75 74 0d 0a 20 20 20  ier without..   
31a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a30 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6d 61   //       the ma
31a40 74 63 68 69 6e 67 20 56 69 73 75 61 6c 20 53 74  tching Visual St
31a50 75 64 69 6f 20 53 44 4b 20 62 65 69 6e 67 20 69  udio SDK being i
31a60 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  nstalled...     
31a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31a80 2f 20 20 20 20 20 20 20 50 6c 65 61 73 65 20 72  /       Please r
31a90 65 66 65 72 20 74 6f 20 74 68 65 20 22 53 51 4c  efer to the "SQL
31aa0 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 70 6c 6b  ite.Designer\plk
31ab0 2e 74 78 74 22 20 66 69 6c 65 0d 0a 20 20 20 20  .txt" file..    
31ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ad0 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 74 68 65  //       for the
31ae0 20 65 78 69 73 74 69 6e 67 20 6f 66 66 69 63 69   existing offici
31af0 61 6c 20 76 61 6c 75 65 73 20 61 6e 64 20 75 70  al values and up
31b00 64 61 74 65 20 74 68 65 6d 20 69 66 0d 0a 20 20  date them if..  
31b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b20 20 20 2f 2f 20 20 20 20 20 20 20 6e 65 63 65 73    //       neces
31b30 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 74 68 65  sary.  Also, the
31b40 20 6e 65 77 6c 79 20 67 65 6e 65 72 61 74 65 64   newly generated
31b50 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 0d 0a 20   package load.. 
31b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b70 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20     //       key 
31b80 69 74 73 65 6c 66 2c 20 77 68 69 63 68 20 69 73  itself, which is
31b90 20 61 20 31 32 38 20 63 68 61 72 61 63 74 65 72   a 128 character
31ba0 20 61 6c 70 68 61 6e 75 6d 65 72 69 63 0d 0a 20   alphanumeric.. 
31bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bc0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69     //       stri
31bd0 6e 67 2c 20 6d 75 73 74 20 62 65 20 70 6c 61 63  ng, must be plac
31be0 65 64 20 69 6e 20 74 68 65 20 72 65 73 6f 75 72  ed in the resour
31bf0 63 65 20 73 74 72 69 6e 67 20 6e 61 6d 65 64 0d  ce string named.
31c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31c10 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 34       //       "4
31c20 30 30 22 20 69 6e 20 74 68 65 20 22 53 51 4c 69  00" in the "SQLi
31c30 74 65 2e 44 65 73 69 67 6e 65 72 5c 56 53 50 61  te.Designer\VSPa
31c40 63 6b 61 67 65 2e 72 65 73 78 22 20 66 69 6c 65  ckage.resx" file
31c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31c60 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
31c70 6e 64 20 74 68 65 6e 20 74 68 65 20 64 65 73 69  nd then the desi
31c80 67 6e 65 72 20 61 73 73 65 6d 62 6c 79 20 69 74  gner assembly it
31c90 73 65 6c 66 20 6d 75 73 74 20 62 65 0d 0a 20 20  self must be..  
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cb0 20 20 2f 2f 20 20 20 20 20 20 20 72 65 63 6f 6d    //       recom
31cc0 70 69 6c 65 64 2e 20 20 41 73 20 6f 66 20 74 68  piled.  As of th
31cd0 69 73 20 77 72 69 74 69 6e 67 20 28 69 6e 20 46  is writing (in F
31ce0 65 62 72 75 61 72 79 20 32 30 31 32 29 2c 0d 0a  ebruary 2012),..
31cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d00 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
31d10 20 66 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c 20 69   following URL i
31d20 73 20 74 68 65 20 70 72 6f 70 65 72 20 70 6c 61  s the proper pla
31d30 63 65 20 74 6f 20 67 65 6e 65 72 61 74 65 0d 0a  ce to generate..
31d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31d50 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63      //       pac
31d60 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 73 3a 0d  kage load keys:.
31d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31d80 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
31d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
31da0 20 20 20 20 20 20 68 74 74 70 3a 2f 2f 6d 73 64        http://msd
31db0 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f  n.microsoft.com/
31dc0 65 6e 2d 75 73 2f 76 73 74 75 64 69 6f 2f 63 63  en-us/vstudio/cc
31dd0 36 35 35 37 39 35 0d 0a 20 20 20 20 20 20 20 20  655795..        
31de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e00 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
31e10 65 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61  egistryKey packa
31e20 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  geKey =..       
31e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e40 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
31e50 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
31e60 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
31e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e80 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
31e90 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
31ea0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
31eb0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
31ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ed0 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
31ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ef0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
31f10 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e  (packageKey == n
31f20 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
31f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31f50 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
31f60 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
31f70 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f90 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
31fa0 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
31fb0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
31fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fe0 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61   key, package.Pa
31ff0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
32000 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
32010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
32030 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32050 20 20 20 20 20 7d 0d 0a 0d 0a 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 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
32080 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
32090 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  eKey, null,..   
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 53 74 72 69 6e 67 2e           String.
320c0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
320d0 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50  gner Package", P
320e0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
32110 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32130 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
32140 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
32150 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73  ackageKey, "Clas
32160 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
32170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32180 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
32190 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22  r.SQLitePackage"
321a0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
321b0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
321c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
321d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
321e0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
321f0 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a  y, "CodeBase",..
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
32220 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
32230 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
32240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32250 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
32260 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
32270 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30  geKey, "ID", 400
32280 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322a0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
322b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
322c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
322d0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47  ng directory = G
322e0 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72  etSystemDirector
322f0 79 28 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  y(wow64);....   
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32310 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f       if (directo
32320 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
32330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32340 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
32350 72 79 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74  ry = String.Empt
32360 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
32370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
32380 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
32390 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
323a0 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33  , "InprocServer3
323b0 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2",..           
323c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
323d0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
323e0 72 65 63 74 6f 72 79 2c 20 22 6d 73 63 6f 72 65  rectory, "mscore
323f0 65 2e 64 6c 6c 22 29 2c 0d 0a 20 20 20 20 20 20  e.dll"),..      
32400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32410 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
32420 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
32450 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
32460 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e  geKey, "CompanyN
32470 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
32480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32490 20 20 20 22 68 74 74 70 3a 2f 2f 73 79 73 74 65     "http://syste
324a0 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72  m.data.sqlite.or
324b0 67 2f 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  g/", whatIf, ver
324c0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324e0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
324f0 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
32500 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f  eKey, "MinEditio
32510 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 22 73 74 61 6e 64 61 72 64 22 2c 20 77 68 61   "standard", wha
32540 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
32550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32560 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
32570 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
32580 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50  e(packageKey, "P
32590 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20  roductName",..  
325a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
325b0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
325c0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73  .Format("{0} Des
325d0 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20  igner Package", 
325e0 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20  ProjectName),.. 
325f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32600 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
32610 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
32620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32630 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
32640 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
32650 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f  packageKey, "Pro
32660 64 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20  ductVersion",.. 
32670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32680 20 20 20 20 20 20 20 20 20 20 20 22 31 2e 30 22             "1.0"
32690 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
326a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
326c0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
326d0 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79  ryKey toolboxKey
326e0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
326f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32700 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
32710 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
32720 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a 20 20 20  packageKey,..   
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 6f               "To
32750 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49 66 2c 20  olbox", whatIf, 
32760 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
32770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327a0 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79    if (toolboxKey
327b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
327c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
327d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
327e0 20 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 65 72 72 6f 72 20            error 
32800 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
32810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32830 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
32840 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
32850 20 6b 65 79 3a 20 22 20 2b 0d 0a 20 20 20 20 20   key: " +..     
32860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32880 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 20 70  {0}\\Toolbox", p
32890 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20  ackageKey);.... 
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 20 72                 r
328c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
328d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
328e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
328f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32900 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
32910 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
32920 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
32930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32940 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c       toolboxKey,
32950 20 22 44 65 66 61 75 6c 74 20 49 74 65 6d 73 22   "Default Items"
32960 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  , 3, whatIf,..  
32970 20 20 20 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 76 65                ve
32990 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
329c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
329d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329f0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
32a00 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
32a10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
32a20 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
32a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a40 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22      key, "Menus"
32a50 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
32a60 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
32a70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a90 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
32aa0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32ab0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32ad0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
32ae0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b00 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
32b10 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
32b20 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e  ry key: {0}\\Men
32b30 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  us",..          
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b50 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32bb0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
32bc0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
32bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32be0 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
32bf0 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
32c00 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
32c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32c20 20 20 20 20 20 20 20 20 20 20 22 2c 20 31 30 30            ", 100
32c30 30 2c 20 33 22 2c 20 77 68 61 74 49 66 2c 20 76  0, 3", whatIf, v
32c40 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
32c50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
32c70 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
32c80 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
32c90 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
32ca0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cc0 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
32cd0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
32ce0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
32d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d10 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
32d20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32d30 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d50 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32d60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d80 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
32d90 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
32da0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
32db0 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32dd0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
32de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32df0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
32e00 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
32e10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e30 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
32e40 65 67 69 73 74 72 79 4b 65 79 20 73 65 72 76 69  egistryKey servi
32e50 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  ceKey =..       
32e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e70 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
32e80 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
32e90 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
32ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32eb0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65        package.Se
32ec0 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
32ed0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
32ee0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
32ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f00 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32f20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32f30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
32f40 28 73 65 72 76 69 63 65 4b 65 79 20 3d 3d 20 6e  (serviceKey == n
32f50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
32f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32f80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
32f90 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
32fa0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
32fd0 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
32fe0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
32ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33010 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65   key, package.Se
33020 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
33030 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
33040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
33060 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
33070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330a0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
330b0 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69 63  .SetValue(servic
330c0 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  eKey, null,..   
330d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
330e0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
330f0 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
33100 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
33110 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
33120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33130 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
33140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
33150 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
33160 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
33170 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 22  ue(serviceKey, "
33180 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
33190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331a0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
331b0 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
331c0 53 65 72 76 69 63 65 22 2c 20 50 72 6f 6a 65 63  Service", Projec
331d0 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
331e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
331f0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
33200 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
33210 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
33250 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
33260 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33270 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
33280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
332b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
332c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
332d0 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56  tic bool RemoveV
332e0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
332f0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
33300 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
33310 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
33320 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
33330 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33340 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
33350 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
33360 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
33370 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
33380 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
33390 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
333a0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
333b0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
333c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
333d0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
333e0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
333f0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
33400 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
33410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
33420 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
33430 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
33440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33450 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
33460 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
33470 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
33480 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
33490 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
334a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
334b0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
334c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
334d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
334e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
334f0 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
33500 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
33510 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
33520 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
33530 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33540 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
33550 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
33560 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
33570 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  , wow64);....   
33580 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
33590 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
335a0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
335b0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
335c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
335d0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
335e0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
335f0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
33600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33620 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
33630 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
33640 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
33650 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33660 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
33670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33680 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
33690 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
336a0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
336b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
336c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
336d0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
336e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
336f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
33700 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
33710 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
33720 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
33730 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
33740 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
33750 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
33760 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
33780 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74  y, "Packages", t
33790 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
337a0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
337b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
337c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
337d0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
337e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
337f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33810 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
33820 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
33830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33840 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
33850 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
33860 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67  key: {0}\\Packag
33870 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
33880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33890 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
338a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
338c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
338d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
338e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
338f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
33900 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
33910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33920 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
33930 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
33940 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
33950 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33970 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
33980 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
33990 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
339a0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
339b0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
339c0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
339d0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
339e0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
33a00 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
33a10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
33a20 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
33a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33a40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33a50 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
33a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a90 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
33aa0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ac0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
33ad0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
33ae0 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
33af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b00 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
33b10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
33b30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
33b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
33b60 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
33b70 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56 61  yHelper.DeleteVa
33b80 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
33b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
33ba0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
33bb0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
33bc0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
33bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33be0 20 20 20 20 20 20 20 74 68 72 6f 77 4f 6e 4d 69         throwOnMi
33bf0 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76  ssing, whatIf, v
33c00 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
33c10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
33c30 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
33c40 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
33c50 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
33c60 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c80 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
33c90 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
33ca0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cd0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
33ce0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
33cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
33d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d10 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
33d20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
33d50 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
33d60 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
33d70 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d90 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
33da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33db0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33dc0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33dd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33df0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
33e00 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
33e10 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
33e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
33e30 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65  bKey, package.Se
33e40 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
33e50 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
33e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33e70 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
33e80 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
33e90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
33ea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33eb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
33ec0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
33ed0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
33ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33f20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
33f30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
33f40 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61 63  ool ProcessVsPac
33f50 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
33f60 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
33f70 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
33f80 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
33f90 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
33fa0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
33fb0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
33fc0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
33fd0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
33fe0 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
33ff0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
34000 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
34010 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34020 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
34030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34040 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
34050 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
34060 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
34070 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
34080 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
34090 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
340a0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
340b0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
340c0 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
340d0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
340e0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
340f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
34100 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
34110 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
34130 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
34140 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  S callback data"
34150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34160 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
34180 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
34190 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
341a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
341b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
341c0 6e 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d  n AddVsPackage(.
341d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
341e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
341f0 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c  Version, suffix,
34200 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58   package, pair.X
34210 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  , wow64,..      
34220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
34230 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
34240 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
34250 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34260 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
34270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
34280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
34290 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61  rn RemoveVsPacka
342a0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
342b0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
342c0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
342d0 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20 77 6f  fix, package, wo
342e0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
342f0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 4f            throwO
34300 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
34310 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
34320 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
34330 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
34340 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
34350 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
34360 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
34370 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
343c0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
343d0 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72 79  pplication Entry
343e0 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20   Point..        
343f0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
34400 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
34410 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
34420 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
34430 69 63 20 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20  ic int Main(..  
34440 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34450 5b 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20  [] args..       
34460 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
34470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
34480 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
34490 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
344a0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
344b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
344c0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
344d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
344e0 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  rror = null;....
344f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
34540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34550 20 20 20 23 72 65 67 69 6f 6e 20 44 65 62 75 67     #region Debug
34560 67 65 72 20 48 6f 6f 6b 0d 0a 20 20 20 20 20 20  ger Hook..      
34570 20 20 20 20 20 20 20 20 20 20 69 66 20 28 45 6e            if (En
34580 76 69 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76  vironment.GetEnv
34590 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65  ironmentVariable
345a0 28 22 42 72 65 61 6b 22 29 20 21 3d 20 6e 75 6c  ("Break") != nul
345b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
345c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
345d0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
345e0 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d 0a 20  le.WriteLine(.. 
345f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34600 20 20 20 20 20 20 20 22 41 74 74 61 63 68 20 61         "Attach a
34610 20 64 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f   debugger to pro
34620 63 65 73 73 20 7b 30 7d 20 61 6e 64 20 22 20 2b  cess {0} and " +
34630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34640 20 20 20 20 20 20 20 20 20 20 22 70 72 65 73 73            "press
34650 20 61 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74   any key to cont
34660 69 6e 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  inue.",..       
34670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34680 20 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72   Process.GetCurr
34690 65 6e 74 50 72 6f 63 65 73 73 28 29 2e 49 64 29  entProcess().Id)
346a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
346b0 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
346c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
346d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
346e0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
346f0 73 6f 6c 65 2e 52 65 61 64 4b 65 79 28 74 72 75  sole.ReadKey(tru
34700 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
34710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34720 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
34730 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
34740 68 20 28 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  h (InvalidOperat
34750 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29 20 2f 2f  ionException) //
34760 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
34770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34780 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
34790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
347a0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
347b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
347c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
347d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
347e0 62 75 67 67 65 72 2e 42 72 65 61 6b 28 29 3b 0d  bugger.Break();.
347f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34800 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
34810 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
34820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34830 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34870 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
34880 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
34890 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f 63 65 73  mand Line Proces
348a0 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
348b0 20 20 20 20 20 20 69 66 20 28 21 43 6f 6e 66 69        if (!Confi
348c0 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67  guration.FromArg
348d0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
348e0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
348f0 2c 20 74 72 75 65 2c 20 72 65 66 20 63 6f 6e 66  , true, ref conf
34900 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 65  iguration, ref e
34910 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20  rror) ||..      
34920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 43                !C
34930 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f  onfiguration.Pro
34940 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20  cess(..         
34950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
34960 72 67 73 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  rgs, configurati
34970 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72  on, true, ref er
34980 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ror) ||..       
34990 20 20 20 20 20 20 20 20 20 20 20 20 20 21 43 6f               !Co
349a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 68 65 63  nfiguration.Chec
349b0 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  kRuntimeVersion(
349c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
349d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
349e0 75 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72  uration, true, r
349f0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
34a00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
34a30 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
34a40 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
34a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a60 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
34a70 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
34a80 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
34a90 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
34aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
34ab0 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
34ac0 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
34ad0 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
34ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34af0 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
34b00 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
34b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
34b30 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
34b40 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
34b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34b60 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
34b70 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
34b80 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65  llback, "Failure
34b90 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
34ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
34bb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
34bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34bd0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
34be0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
34bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
34c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c10 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
34c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34c80 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
34c90 73 74 72 79 20 72 65 67 69 73 74 72 79 20 3d 20  stry registry = 
34ca0 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
34cb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34cc0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
34cd0 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
34ce0 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 29 0d   false, false)).
34cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34d10 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
34d20 43 6f 72 65 20 41 73 73 65 6d 62 6c 79 20 4e 61  Core Assembly Na
34d30 6d 65 20 43 68 65 63 6b 0d 0a 20 20 20 20 20 20  me Check..      
34d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
34d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34d60 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44        // NOTE: D
34d70 6f 20 74 68 69 73 20 66 69 72 73 74 2c 20 62 65  o this first, be
34d80 66 6f 72 65 20 6d 61 6b 69 6e 67 20 61 6e 79 20  fore making any 
34d90 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 0d 0a  changes to the..
34da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34db0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 79 73      //       sys
34dc0 74 65 6d 2c 20 62 65 63 61 75 73 65 20 69 74 20  tem, because it 
34dd0 77 69 6c 6c 20 74 68 72 6f 77 20 61 6e 20 65 78  will throw an ex
34de0 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 0d 0a  ception if the..
34df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e00 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 69 6c      //       fil
34e10 65 20 6e 61 6d 65 20 64 6f 65 73 20 6e 6f 74 20  e name does not 
34e20 72 65 70 72 65 73 65 6e 74 20 61 20 76 61 6c 69  represent a vali
34e30 64 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20  d managed..     
34e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34e50 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  /       assembly
34e60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34e70 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
34e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
34e90 73 73 65 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65  ssemblyName core
34ea0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 0d 0a  AssemblyName =..
34eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ec0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
34ed0 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79  Name.GetAssembly
34ee0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
34ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f00 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
34f10 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20  .CoreFileName); 
34f20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
34f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f40 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
34f50 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
34f60 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  Name =..        
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f80 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74  AssemblyName.Get
34f90 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20  AssemblyName(.. 
34fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fb0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
34fc0 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65  guration.Designe
34fd0 72 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  rFileName); /* t
34fe0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e               #en
35000 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
35010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d    #region System
35080 20 44 69 72 65 63 74 6f 72 79 20 43 68 65 63 6b   Directory Check
35090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
350a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
350b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
350c0 20 4e 4f 54 45 3a 20 47 65 74 74 69 6e 67 20 74   NOTE: Getting t
350d0 68 65 20 73 79 73 74 65 6d 20 64 69 72 65 63 74  he system direct
350e0 6f 72 79 20 76 61 6c 75 65 20 68 65 72 65 20 73  ory value here s
350f0 65 72 76 65 73 0d 0a 20 20 20 20 20 20 20 20 20  erves..         
35100 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
35110 20 20 20 20 74 77 6f 20 70 75 72 70 6f 73 65 73      two purposes
35120 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
35130 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
35140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35150 2f 20 20 20 20 20 20 20 31 2e 20 49 74 20 65 6e  /       1. It en
35160 61 62 6c 65 73 20 75 73 20 74 6f 20 6c 6f 67 20  ables us to log 
35170 74 68 65 20 73 79 73 74 65 6d 20 64 69 72 65 63  the system direc
35180 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
35190 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
351a0 20 20 20 20 20 20 76 61 6c 75 65 20 76 65 72 79        value very
351b0 20 65 61 72 6c 79 20 69 6e 20 74 68 65 20 69 6e   early in the in
351c0 73 74 61 6c 6c 61 74 69 6f 6e 20 70 72 6f 63 65  stallation proce
351d0 73 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ss..            
351e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
351f0 20 20 20 20 28 69 2e 65 2e 20 65 76 65 6e 20 74      (i.e. even t
35200 68 6f 75 67 68 20 74 68 65 20 76 61 6c 75 65 20  hough the value 
35210 69 74 73 65 6c 66 20 69 73 20 6e 6f 74 0d 0a 20  itself is not.. 
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35230 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6e     //          n
35240 65 65 64 65 64 20 75 6e 74 69 6c 20 6d 75 63 68  eeded until much
35250 20 6c 61 74 65 72 29 2e 0d 0a 20 20 20 20 20 20   later)...      
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
35270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35280 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 32        //       2
35290 2e 20 53 69 6e 63 65 20 74 68 65 20 76 61 6c 75  . Since the valu
352a0 65 20 69 73 20 63 61 63 68 65 64 2c 20 69 74 20  e is cached, it 
352b0 70 72 65 76 65 6e 74 73 20 61 6e 0d 0a 20 20 20  prevents an..   
352c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352d0 20 2f 2f 20 20 20 20 20 20 20 20 20 20 65 78 63   //          exc
352e0 65 70 74 69 6f 6e 20 66 72 6f 6d 20 62 65 69 6e  eption from bein
352f0 67 20 74 68 72 6f 77 6e 20 6d 75 63 68 20 6c 61  g thrown much la
35300 74 65 72 20 64 75 72 69 6e 67 0d 0a 20 20 20 20  ter during..    
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35320 2f 2f 20 20 20 20 20 20 20 20 20 20 74 68 65 20  //          the 
35330 69 6e 73 74 61 6c 6c 20 77 68 65 6e 20 74 68 65  install when the
35340 20 76 61 6c 75 65 20 69 73 20 71 75 65 72 69 65   value is querie
35350 64 20 61 67 61 69 6e 0d 0a 20 20 20 20 20 20 20  d again..       
35360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
35370 20 20 20 20 20 20 20 20 20 28 69 2e 65 2e 20 77           (i.e. w
35380 69 74 68 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ith the same val
35390 75 65 20 66 6f 72 20 74 68 65 20 22 77 6f 77 36  ue for the "wow6
353a0 34 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4"..            
353b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
353c0 20 20 20 20 70 61 72 61 6d 65 74 65 72 29 2e 0d      parameter)..
353d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
353e0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
353f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
35400 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
35410 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
35420 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
35430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35440 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
35450 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
35460 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
35470 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
35480 20 20 20 20 20 20 20 20 20 20 20 20 22 53 79 73              "Sys
35490 74 65 6d 20 64 69 72 65 63 74 6f 72 79 20 69 73  tem directory is
354a0 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c   {0}.", ForDispl
354b0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
354c0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
354d0 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28  SystemDirectory(
354e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 6f  configuration.Wo
354f0 77 36 34 29 29 29 2c 0d 0a 20 20 20 20 20 20 20  w64))),..       
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35510 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
35520 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
35530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35540 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
35550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35560 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
35570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
355a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
355b0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
355c0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20  NET Framework / 
355d0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61  Visual Studio Da
355e0 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ta..            
355f0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
35600 70 61 63 6b 61 67 65 20 3d 20 6e 75 6c 6c 3b 0d  package = null;.
35610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35620 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
35630 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
35640 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
35650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
35660 4c 69 73 74 20 76 73 4c 69 73 74 20 3d 20 6e 75  List vsList = nu
35670 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
35680 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
35690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
356c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
356e0 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b 61 67  itializeVsPackag
356f0 65 28 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62  e(designerAssemb
35700 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lyName,..       
35710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35720 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48   configuration.H
35730 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20  asFlags(..      
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35750 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
35760 67 73 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  gs.GlobalAssembl
35770 79 43 61 63 68 65 2c 20 74 72 75 65 29 20 26 26  yCache, true) &&
35780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35790 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
357a0 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
357b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
357d0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61  nstallFlags.VsPa
357e0 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
357f0 62 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29 2c  blyCache, true),
35800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35810 20 20 20 20 20 20 20 20 20 20 72 65 66 20 70 61            ref pa
35820 63 6b 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckage);....     
35830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
35840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35890 20 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d    InitializeFram
358a0 65 77 6f 72 6b 4c 69 73 74 28 72 65 67 69 73 74  eworkList(regist
358b0 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
358c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
358d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
358e0 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 66 72 61  uration, ref fra
358f0 6d 65 77 6f 72 6b 4c 69 73 74 29 3b 0d 0a 0d 0a  meworkList);....
35900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35910 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73      InitializeVs
35920 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61 74 69  List(configurati
35930 6f 6e 2e 50 65 72 55 73 65 72 20 3f 0d 0a 20 20  on.PerUser ?..  
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35950 20 20 20 20 20 20 72 65 67 69 73 74 72 79 2e 43        registry.C
35960 75 72 72 65 6e 74 55 73 65 72 20 3a 20 72 65 67  urrentUser : reg
35970 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
35980 6e 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne,..           
35990 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
359a0 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20  figuration, ref 
359b0 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20  vsList);..      
359c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 65                #e
359d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
359e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
35a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a40 20 20 20 23 72 65 67 69 6f 6e 20 53 68 61 72 65     #region Share
35a50 64 20 43 6c 69 65 6e 74 20 44 61 74 61 20 43 72  d Client Data Cr
35a60 65 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  eation..        
35a70 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
35a80 63 74 20 64 69 72 65 63 74 6f 72 79 44 61 74 61  ct directoryData
35a90 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73   = new AnyPair<s
35aa0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20  tring, bool>(.. 
35ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ac0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
35ad0 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c 20  tion.Directory, 
35ae0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e  configuration.In
35af0 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  stall);....     
35b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
35b10 62 6a 65 63 74 20 66 69 6c 65 4e 61 6d 65 44 61  bject fileNameDa
35b20 74 61 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72  ta = new AnyPair
35b30 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d  <string, bool>(.
35b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35b50 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
35b60 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46  ration.DesignerF
35b70 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67 75  ileName, configu
35b80 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b  ration.Install);
35b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35ba0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
35bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35bc0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
35bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35c00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
35c10 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
35c20 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e 73 74  on .NET GAC Inst
35c30 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20 20  all/Remove..    
35c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c50 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
35c60 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  n.HasFlags(..   
35c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c80 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c           Install
35c90 46 6c 61 67 73 2e 47 6c 6f 62 61 6c 41 73 73 65  Flags.GlobalAsse
35ca0 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29  mblyCache, true)
35cb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35cc0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ce0 20 20 50 75 62 6c 69 73 68 20 70 75 62 6c 69 73    Publish publis
35cf0 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  h = null;....   
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d10 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
35d20 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
35d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
35d50 6c 69 73 68 20 3d 20 6e 65 77 20 50 75 62 6c 69  lish = new Publi
35d60 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sh();....       
35d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d80 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
35d90 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a 20 20 20  on.Install)..   
35da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35db0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
35dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35dd0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
35de0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
35df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e10 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
35e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e30 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
35e40 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28  lish.GacInstall(
35e50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
35e60 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
35e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e80 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
35e90 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
35ea0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
35eb0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
35ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ed0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
35ee0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
35ef0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
35f00 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73           "GacIns
35f30 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61  tall: assemblyPa
35f40 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
35f70 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
35f80 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
35f90 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
35fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fb0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
35fc0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
35fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fe0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
35ff0 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
36000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36020 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
36050 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c  blish.GacInstall
36060 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
36070 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
36080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36090 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
360a0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
360b0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
360c0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360e0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
360f0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
36100 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
36110 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
36120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36130 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
36140 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
36150 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
36160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36170 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
36180 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72  Display(configur
36190 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61  ation.LinqFileNa
361a0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
361b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
361d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361f0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
36200 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
36210 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36230 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
36240 61 67 73 2e 56 73 50 61 63 6b 61 67 65 47 6c 6f  ags.VsPackageGlo
36250 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
36260 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
36270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
362b0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
362c0 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362e0 20 20 20 20 20 20 20 20 20 2f 2a 20 74 68 72 6f           /* thro
362f0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
36300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36310 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
36320 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e  h.GacInstall(con
36330 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67  figuration.Desig
36340 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  nerFileName);...
36350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36370 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
36380 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
36390 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
363a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363c0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
363d0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
363e0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
363f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36410 20 20 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c        "GacInstal
36420 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20  l: assemblyPath 
36430 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {0}",..       
36440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36450 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
36460 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72  Display(configur
36470 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69  ation.DesignerFi
36480 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
36490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
364b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
364e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
36500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36510 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
36520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36550 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
36560 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20  .HasFlags(..    
36570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36590 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50  InstallFlags.VsP
365a0 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65  ackageGlobalAsse
365b0 6d 62 6c 79 43 61 63 68 65 2c 20 74 72 75 65 29  mblyCache, true)
365c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
365d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
365e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
365f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36600 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
36610 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20  tion.WhatIf)..  
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36640 20 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20    /* throw */.. 
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36670 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
36680 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
36690 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.DesignerFileN
366a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
366b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
366d0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
366e0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
366f0 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
36700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36710 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
36720 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
36730 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
36740 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
36750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
36770 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62  acRemove: assemb
36780 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a  lyPath = {0}",..
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367b0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
367c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73  onfiguration.Des
367d0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c  ignerFileName)),
367e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
367f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36800 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
36810 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
36820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36850 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
36860 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
36870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36890 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
368a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
368c0 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63  lish.GacRemove(c
368d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
368e0 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  qFileName);.... 
368f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36900 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
36910 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
36920 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
36930 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
36940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36950 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
36960 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
36970 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
36980 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
36990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369a0 20 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f          "GacRemo
369b0 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ve: assemblyPath
369c0 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
369d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
369f0 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69  play(configurati
36a00 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
36a10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
36a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
36a40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
36a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a60 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
36a70 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
36aa0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
36ad0 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f  ish.GacRemove(co
36ae0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
36af0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b10 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
36b20 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
36b30 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
36b40 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
36b70 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
36b80 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
36b90 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
36ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bb0 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76         "GacRemov
36bc0 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20  e: assemblyPath 
36bd0 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {0}",..       
36be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bf0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
36c00 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
36c10 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  n.CoreFileName))
36c20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c40 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
36c50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
36c60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
36c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36c90 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
36ca0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
36cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
36cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36cf0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
36d10 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73 65  region .NET Asse
36d20 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20 20  mblyFolders..   
36d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d40 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
36d50 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20 20  on.HasFlags(..  
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
36d80 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79 46  lFlags.AssemblyF
36d90 6f 6c 64 65 72 73 2c 20 74 72 75 65 29 29 0d 0a  olders, true))..
36da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36db0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36dd0 66 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d 65  f (!ForEachFrame
36de0 77 6f 72 6b 52 65 67 69 73 74 72 79 28 72 65 67  workRegistry(reg
36df0 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
36e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e10 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
36e20 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 41 73  kList, ProcessAs
36e30 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a  semblyFolders,..
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 52 65  configuration.Re
36e70 67 69 73 74 72 79 56 65 72 73 69 6f 6e 2c 20 64  gistryVersion, d
36e80 69 72 65 63 74 6f 72 79 44 61 74 61 2c 0d 0a 20  irectoryData,.. 
36e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
36eb0 65 74 46 78 49 73 33 32 42 69 74 4f 6e 6c 79 20  etFxIs32BitOnly 
36ec0 7c 7c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  || configuration
36ed0 2e 57 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20  .Wow64,..       
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ef0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
36f00 72 61 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69  ration.ThrowOnMi
36f10 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  ssing,..        
36f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f30 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
36f40 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f  ation.WhatIf, co
36f50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62  nfiguration.Verb
36f60 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
36f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f80 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
36f90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36fa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36fc0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
36fd0 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54  ps.ShowMessage(T
36fe0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
36ff0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
37000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37010 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
37020 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
37030 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c  ack, thisAssembl
37040 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
37050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37060 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
37070 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
37080 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
37090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
370a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370b0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
370c0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
370d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
370e0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
370f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
37100 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
37110 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
37120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37130 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
37140 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
37150 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e  lback, "Failure.
37160 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
37170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37180 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
37190 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
371a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371b0 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20     return 1; /* 
371c0 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20  FAILURE */..    
371d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
371f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
37200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37210 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
37220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37230 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
37240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
37270 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37280 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e         #region .
37290 4e 45 54 20 44 62 50 72 6f 76 69 64 65 72 46 61  NET DbProviderFa
372a0 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..         
372b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
372c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
372d0 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
372e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
372f0 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
37300 2e 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  .DbProviderFacto
37310 72 79 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ry, true))..    
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
37340 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
37350 73 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  saved = false;..
37360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37370 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
37380 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
37390 6f 6e 66 69 67 28 72 65 67 69 73 74 72 79 2c 0d  onfig(registry,.
373a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
373b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373c0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20   frameworkList, 
373d0 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
373e0 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  rFactory,..     
373f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37400 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
37410 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 56  guration.ConfigV
37420 65 72 73 69 6f 6e 2c 20 49 6e 76 61 72 69 61 6e  ersion, Invarian
37430 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37450 20 20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72          Provider
37460 4e 61 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f  Name, Descriptio
37470 6e 2c 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61  n, FactoryTypeNa
37480 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
37490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374a0 20 20 20 20 20 63 6f 72 65 41 73 73 65 6d 62 6c       coreAssembl
374b0 79 4e 61 6d 65 2c 20 64 69 72 65 63 74 6f 72 79  yName, directory
374c0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
374d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374e0 20 20 20 20 20 20 20 4e 65 74 46 78 49 73 33 32         NetFxIs32
374f0 42 69 74 4f 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69  BitOnly || confi
37500 67 75 72 61 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d  guration.Wow64,.
37510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37530 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 54   configuration.T
37540 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
37550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37570 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
37580 61 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74  atIf, configurat
37590 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20  ion.Verbose,..  
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
375c0 66 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72  f saved, ref err
375d0 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
375e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
375f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37600 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
37610 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
37620 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
37630 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
37660 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
37670 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65  llback, thisAsse
37680 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
376b0 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
376c0 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
376d0 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
376e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376f0 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63      MessageBoxIc
37700 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  on.Error);....  
37710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37720 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
37730 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
37740 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
37750 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
37760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37770 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
37780 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
37790 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c 75  Callback, "Failu
377a0 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  re.",..         
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
377d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
377e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
37800 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
37810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
37830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
37840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37850 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
37860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
37870 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
37880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
378b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
378c0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
378d0 6e 20 56 53 20 50 61 63 6b 61 67 65 0d 0a 20 20  n VS Package..  
378e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378f0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
37900 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
37910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37920 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
37930 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67  llFlags.VsPackag
37940 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  e, true))..     
37950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
37980 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52  orEachVsVersionR
37990 65 67 69 73 74 72 79 28 72 65 67 69 73 74 72 79  egistry(registry
379a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379c0 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65     vsList, Proce
379d0 73 73 56 73 50 61 63 6b 61 67 65 2c 0d 0a 20 20  ssVsPackage,..  
379e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
379f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
37a00 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 73 56 65  nfiguration.VsVe
37a10 72 73 69 6f 6e 53 75 66 66 69 78 2c 20 70 61 63  rsionSuffix, pac
37a20 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
37a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a40 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 44         fileNameD
37a50 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
37a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a70 20 20 20 20 20 20 56 73 49 73 33 32 42 69 74 4f        VsIs32BitO
37a80 6e 6c 79 20 7c 7c 20 63 6f 6e 66 69 67 75 72 61  nly || configura
37a90 74 69 6f 6e 2e 57 6f 77 36 34 2c 0d 0a 20 20 20  tion.Wow64,..   
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
37ac0 66 69 67 75 72 61 74 69 6f 6e 2e 54 68 72 6f 77  figuration.Throw
37ad0 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
37ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37af0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
37b00 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
37b10 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
37b20 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  Verbose,..      
37b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b40 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
37b50 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
37b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
37b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
37b90 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
37ba0 67 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ge(TracePriority
37bb0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
37bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bd0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
37be0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
37bf0 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
37c00 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
37c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
37c30 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
37c40 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
37c50 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
37c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c70 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
37c80 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
37c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ca0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
37cb0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
37cc0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
37cd0 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
37ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
37d00 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
37d10 65 43 61 6c 6c 62 61 63 6b 2c 20 22 46 61 69 6c  eCallback, "Fail
37d20 75 72 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  ure.",..        
37d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d40 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
37d50 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
37d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
37d80 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
37d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37da0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
37db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
37dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37dd0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
37de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37df0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
37e40 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
37e50 6f 6e 20 56 53 20 44 61 74 61 53 6f 75 72 63 65  on VS DataSource
37e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37e70 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
37e80 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73  uration.HasFlags
37e90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
37eb0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61  nstallFlags.VsDa
37ec0 74 61 53 6f 75 72 63 65 2c 20 74 72 75 65 29 29  taSource, true))
37ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ee0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f00 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56   if (!ForEachVsV
37f10 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72  ersionRegistry(r
37f20 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20  egistry,..      
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f40 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
37f50 2c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 53  , ProcessVsDataS
37f60 6f 75 72 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  ource,..        
37f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f80 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
37f90 61 74 69 6f 6e 2e 56 73 56 65 72 73 69 6f 6e 53  ation.VsVersionS
37fa0 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 0d  uffix, package,.
37fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fd0 20 66 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a   fileNameData,..
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38000 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  VsIs32BitOnly ||
38010 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
38020 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
38030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38040 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
38050 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
38060 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
38070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38080 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
38090 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
380a0 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
380b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
380c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380d0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
380e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
380f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38110 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
38120 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61  .ShowMessage(Tra
38130 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
38140 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
38150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38160 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
38170 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
38180 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
38190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
381a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381b0 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
381c0 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
381d0 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
38200 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
38210 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
38240 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
38250 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
38260 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
38290 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
382a0 61 63 6b 2c 20 22 46 61 69 6c 75 72 65 2e 22 2c  ack, "Failure.",
382b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382d0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
382e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
382f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38300 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
38310 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
38320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38330 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
38340 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38360 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
38370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38380 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
38390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
383b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
383c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
383d0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20       #region VS 
383e0 44 61 74 61 50 72 6f 76 69 64 65 72 0d 0a 20 20  DataProvider..  
383f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38400 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
38410 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 0d 0a 20  ion.HasFlags(.. 
38420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38430 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
38440 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 50 72  llFlags.VsDataPr
38450 6f 76 69 64 65 72 2c 20 74 72 75 65 29 29 0d 0a  ovider, true))..
38460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38470 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
38480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
38490 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
384a0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 72 65 67  sionRegistry(reg
384b0 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  istry,..        
384c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384d0 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20          vsList, 
384e0 50 72 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f  ProcessVsDataPro
384f0 76 69 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  vider,..        
38500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38510 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
38520 61 74 69 6f 6e 2e 56 73 56 65 72 73 69 6f 6e 53  ation.VsVersionS
38530 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 0d  uffix, package,.
38540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38560 20 66 69 6c 65 4e 61 6d 65 44 61 74 61 2c 0d 0a   fileNameData,..
38570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38590 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20 7c 7c  VsIs32BitOnly ||
385a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57   configuration.W
385b0 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
385c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
385e0 74 69 6f 6e 2e 54 68 72 6f 77 4f 6e 4d 69 73 73  tion.ThrowOnMiss
385f0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38610 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
38620 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66  ion.WhatIf, conf
38630 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
38640 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
38650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38660 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
38670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38680 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
386b0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61  .ShowMessage(Tra
386c0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
386d0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
386e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386f0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
38700 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
38710 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
38720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38740 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
38750 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
38760 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
38770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
38790 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
387a0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
387b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
387d0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
387e0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
387f0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  Hig