System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5347aabb23e78ed95eafafdb2f92448bb7295f79:


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 4e 61 6d  ing invariantNam
03d0: 65 2c 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f  e,      /* 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 73 74  n */..        st
04a0: 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20  ring directory, 
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 6f 62 6a 65 63  /..        objec
04d0: 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 20 20  t clientData,   
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 70 65 72          bool per
0500: 55 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20  User,           
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 6f 77 36 34 2c       bool wow64,
0530: 20 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 74 68 72 6f 77 4f 6e 4d 69    bool throwOnMi
0560: 73 73 69 6e 67 2c 20 20 20 20 20 20 20 2f 2a 20  ssing,       /* 
0570: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0580: 6f 6f 6c 20 77 68 61 74 49 66 2c 20 20 20 20 20  ool whatIf,     
0590: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
05a0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
05b0: 20 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20   verbose,       
05c0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
05d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
05e0: 6c 20 73 61 76 65 64 2c 20 20 20 20 20 20 20 20  l saved,        
05f0: 20 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20      /* out */.. 
0600: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
0610: 67 20 65 72 72 6f 72 20 20 20 20 20 20 20 20 20  g error         
0620: 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20    /* out */..   
0630: 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f   );....    /////
0640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0680: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e  //////....    in
0690: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
06a0: 62 6f 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65  bool FrameworkRe
06b0: 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d  gistryCallback(.
06c0: 0a 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c  .        Install
06d0: 65 72 2e 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  er.MockRegistryK
06e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 20 2f 2a 20 69  ey rootKey, /* i
06f0: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74  n */..        st
0700: 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
0710: 6d 65 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  me,             
0720: 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20   /* in */..     
0730: 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
0740: 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 20 20 20  workVersion,    
0750: 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a        /* in */..
0760: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
0770: 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 20 20 20  latformName,    
0780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
0790: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   */..        str
07a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20  ing directory,  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
07d0: 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
07e0: 61 74 61 2c 20 20 20 20 20 20 20 20 20 20 20 20  ata,            
07f0: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0800: 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
0810: 73 65 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  ser,            
0820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20            /* in 
0830: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  */..        bool
0840: 20 77 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20   wow64,         
0850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
0860: 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
0870: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
0880: 73 69 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20  sing,           
0890: 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20      /* in */..  
08a0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
08b0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f,              
08c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
08d0: 2f 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  /..        bool 
08e0: 76 65 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20  verbose,        
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0900: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0910: 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20     /* out */..  
0940: 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f    );....    ////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69  ///////....    i
09a0: 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65  nternal delegate
09b0: 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74 75 64   bool VisualStud
09c0: 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
09d0: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 49 6e 73  ck(..        Ins
09e0: 74 61 6c 6c 65 72 2e 4d 6f 63 6b 52 65 67 69 73  taller.MockRegis
09f0: 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 20  tryKey rootKey, 
0a00: 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
0a10: 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
0a20: 69 6f 6e 2c 20 20 20 20 20 20 20 20 20 20 20 20  ion,            
0a30: 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20       /* in */.. 
0a40: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
0a50: 66 66 69 78 2c 20 20 20 20 20 20 20 20 20 20 20  ffix,           
0a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 2c            /* in,
0a70: 20 6f 70 74 69 6f 6e 61 6c 20 2a 2f 0d 0a 20 20   optional */..  
0a80: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
0a90: 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
0aa0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a           /* in *
0ab0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
0ac0: 67 20 64 69 72 65 63 74 6f 72 79 2c 20 20 20 20  g directory,    
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0ae0: 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
0af0: 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
0b00: 61 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a,              
0b10: 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20     /* in */..   
0b20: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
0b30: 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r,              
0b40: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f          /* in */
0b50: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77  ..        bool w
0b60: 6f 77 36 34 2c 20 20 20 20 20 20 20 20 20 20 20  ow64,           
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0b80: 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 62  in */..        b
0b90: 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
0ba0: 6e 67 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ng,             
0bb0: 20 20 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20    /* in */..    
0bc0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 20 2a 2f 0d         /* in */.
0bf0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
0c00: 72 62 6f 73 65 2c 20 20 20 20 20 20 20 20 20 20  rbose,          
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
0c20: 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  n */..        re
0c30: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20 20  f string error  
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20 20   /* out */..    
0c60: 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  );..    #endregi
0c70: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
0c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cc0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65  /////....    #re
0cd0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 45 6e 75 6d  gion Public Enum
0ce0: 65 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 5b 46  erations..    [F
0cf0: 6c 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62  lags()]..    pub
0d00: 6c 69 63 20 65 6e 75 6d 20 49 6e 73 74 61 6c 6c  lic enum Install
0d10: 46 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20  Flags..    {..  
0d20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
0d30: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
0d40: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
0d50: 0d 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c  ..        Global
0d60: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20  AssemblyCache = 
0d70: 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73  0x1,..        As
0d80: 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20  semblyFolders = 
0d90: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62  0x2,..        Db
0da0: 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20  ProviderFactory 
0db0: 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20  = 0x4,..        
0dc0: 56 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c  VsPackage = 0x8,
0dd0: 0d 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b  ..        VsPack
0de0: 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ageGlobalAssembl
0df0: 79 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a  yCache = 0x10,..
0e00: 20 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f          VsDataSo
0e10: 75 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20  urce = 0x20,..  
0e20: 20 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76        VsDataProv
0e30: 69 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20  ider = 0x40,..  
0e40: 20 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65        VsDevEnvSe
0e50: 74 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20  tup = 0x80,..   
0e60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
0e70: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
0ed0: 65 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20  egion Composite 
0ee0: 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  Values..        
0ef0: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62  Framework = Glob
0f00: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0f10: 7c 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  | AssemblyFolder
0f20: 73 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s |..           
0f30: 20 20 20 20 20 20 20 20 20 44 62 50 72 6f 76 69           DbProvi
0f40: 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20  derFactory,.... 
0f50: 20 20 20 20 20 20 20 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 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0fa0: 0d 0a 20 20 20 20 20 20 20 20 56 73 20 3d 20 56  ..        Vs = V
0fb0: 73 50 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63  sPackage | VsPac
0fc0: 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62  kageGlobalAssemb
0fd0: 6c 79 43 61 63 68 65 20 7c 20 56 73 44 61 74 61  lyCache | VsData
0fe0: 53 6f 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20  Source |..      
0ff0: 20 20 20 20 20 20 20 56 73 44 61 74 61 50 72 6f         VsDataPro
1000: 76 69 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76  vider | VsDevEnv
1010: 53 65 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20  Setup,....      
1020: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
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 0d 0a 0d 0a 20 20 20  /////////....   
1070: 20 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65       All = Frame
1080: 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20  work | Vs,....  
1090: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
10e0: 0a 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65  .        AllExce
10f0: 70 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  ptGlobalAssembly
1100: 43 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28  Cache = All & ~(
1110: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1120: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
1150: 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73  PackageGlobalAss
1160: 65 6d 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20  emblyCache),..  
1170: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1180: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
11e0: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
11f0: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
1200: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
1210: 20 3d 20 41 6c 6c 0d 0a 20 20 20 20 20 20 20 20   = All..        
1220: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
1230: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1240: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
1290: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
12a0: 63 20 65 6e 75 6d 20 50 72 6f 76 69 64 65 72 46  c enum ProviderF
12b0: 6c 61 67 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lags..    {..   
12c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f 72       #region Nor
12d0: 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20 20  mal Values..    
12e0: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
12f0: 0a 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 45  .        SystemE
1300: 66 36 4d 75 73 74 42 65 47 6c 6f 62 61 6c 20 3d  f6MustBeGlobal =
1310: 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 44   0x1,..        D
1320: 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63 65  idLinqForceTrace
1330: 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20   = 0x2,..       
1340: 20 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63   DidEf6ForceTrac
1350: 65 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20  e = 0x4,..      
1360: 20 20 44 69 64 45 66 36 52 65 73 6f 6c 76 65 54    DidEf6ResolveT
1370: 72 61 63 65 20 3d 20 30 78 38 2c 0d 0a 20 20 20  race = 0x8,..   
1380: 20 20 20 20 20 46 6f 72 63 65 4c 69 6e 71 45 6e       ForceLinqEn
1390: 61 62 6c 65 64 20 3d 20 30 78 31 30 2c 0d 0a 20  abled = 0x10,.. 
13a0: 20 20 20 20 20 20 20 46 6f 72 63 65 4c 69 6e 71         ForceLinq
13b0: 44 69 73 61 62 6c 65 64 20 3d 20 30 78 32 30 2c  Disabled = 0x20,
13c0: 0d 0a 20 20 20 20 20 20 20 20 46 6f 72 63 65 45  ..        ForceE
13d0: 66 36 45 6e 61 62 6c 65 64 20 3d 20 30 78 34 30  f6Enabled = 0x40
13e0: 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f 72 63 65  ,..        Force
13f0: 45 66 36 44 69 73 61 62 6c 65 64 20 3d 20 30 78  Ef6Disabled = 0x
1400: 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  80,..        #en
1410: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1420: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1470: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 75        #region Su
1480: 67 67 65 73 74 65 64 20 44 65 66 61 75 6c 74 20  ggested Default 
1490: 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20 20 20  Values..        
14a0: 44 65 66 61 75 6c 74 20 3d 20 4e 6f 6e 65 0d 0a  Default = None..
14b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
14c0: 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  on..    }....   
14d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1520: 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20      [Flags()].. 
1530: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54     public enum T
1540: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
1550: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65    {..        #re
1560: 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c 75  gion Normal Valu
1570: 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65  es..        None
1580: 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 20   = 0x0,..       
1590: 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d 0a   Lowest = 0x1,..
15a0: 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20 3d 20          Lower = 
15b0: 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c 6f  0x2,..        Lo
15c0: 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20  w = 0x4,..      
15d0: 20 20 4d 65 64 69 75 6d 4c 6f 77 20 3d 20 30 78    MediumLow = 0x
15e0: 38 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69  8,..        Medi
15f0: 75 6d 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  um = 0x10,..    
1600: 20 20 20 20 4d 65 64 69 75 6d 48 69 67 68 20 3d      MediumHigh =
1610: 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x20,..        
1620: 48 69 67 68 20 3d 20 30 78 34 30 2c 0d 0a 20 20  High = 0x40,..  
1630: 20 20 20 20 20 20 48 69 67 68 65 72 20 3d 20 30        Higher = 0
1640: 78 38 30 2c 0d 0a 20 20 20 20 20 20 20 20 48 69  x80,..        Hi
1650: 67 68 65 73 74 20 3d 20 30 78 31 30 30 2c 0d 0a  ghest = 0x100,..
1660: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1670: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16d0: 20 23 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74   #region Suggest
16e0: 65 64 20 44 65 66 61 75 6c 74 20 46 6c 61 67 73  ed Default Flags
16f0: 0d 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c  ..        Defaul
1700: 74 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20  t = Medium..    
1710: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1720: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1730: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
1740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1780: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1790: 23 72 65 67 69 6f 6e 20 49 6e 73 74 61 6c 6c 65  #region Installe
17a0: 72 20 43 6c 61 73 73 0d 0a 23 69 66 20 4e 45 54  r Class..#if NET
17b0: 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c  _40 || NET_45 ||
17c0: 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20 20 5b 53   NET_451..    [S
17d0: 65 63 75 72 69 74 79 43 72 69 74 69 63 61 6c 28  ecurityCritical(
17e0: 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 5b  )]..#else..    [
17f0: 53 65 63 75 72 69 74 79 50 65 72 6d 69 73 73 69  SecurityPermissi
1800: 6f 6e 28 53 65 63 75 72 69 74 79 41 63 74 69 6f  on(SecurityActio
1810: 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c 20 55 6e  n.LinkDemand, Un
1820: 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d 20 74 72  managedCode = tr
1830: 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ue)]..#endif..  
1840: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
1850: 63 20 63 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65  c class Installe
1860: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
1870: 20 20 23 72 65 67 69 6f 6e 20 55 6e 73 61 66 65    #region Unsafe
1880: 20 4e 61 74 69 76 65 20 4d 65 74 68 6f 64 73 20   Native Methods 
1890: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 5b  Class..        [
18a0: 53 75 70 70 72 65 73 73 55 6e 6d 61 6e 61 67 65  SuppressUnmanage
18b0: 64 43 6f 64 65 53 65 63 75 72 69 74 79 28 29 5d  dCodeSecurity()]
18c0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
18d0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 55  e sealed class U
18e0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18f0: 64 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  ds..        {..#
1900: 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20  if WINDOWS..    
1910: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1920: 4e 61 74 69 76 65 20 57 69 6e 33 32 20 43 6f 6e  Native Win32 Con
1930: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
1940: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
1950: 74 20 69 6e 74 20 4d 41 58 5f 50 41 54 48 20 3d  t int MAX_PATH =
1960: 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   260;....       
1970: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19c0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
19d0: 63 6f 6e 73 74 20 69 6e 74 20 43 53 49 44 4c 5f  const int CSIDL_
19e0: 53 59 53 54 45 4d 58 38 36 20 3d 20 30 78 30 30  SYSTEMX86 = 0x00
19f0: 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  29;....         
1a00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1a50: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1a60: 6e 73 74 20 69 6e 74 20 53 48 47 46 50 5f 54 59  nst int SHGFP_TY
1a70: 50 45 5f 43 55 52 52 45 4e 54 20 3d 20 30 3b 0d  PE_CURRENT = 0;.
1a80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1ae0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1af0: 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b 20 2f 2a  int S_OK = 0; /*
1b00: 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a 20 20 20   HRESULT */..   
1b10: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1b20: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1b30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1b80: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 61        #region Na
1b90: 74 69 76 65 20 57 69 6e 64 6f 77 73 20 4d 65 74  tive Windows Met
1ba0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
1bb0: 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28 22 73 68    [DllImport("sh
1bc0: 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d 0a 20 20  folder.dll",..  
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 61                Ca
1be0: 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 20  llingConvention 
1bf0: 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74  = CallingConvent
1c00: 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a 20 20 20  ion.Winapi,..   
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 61               Cha
1c20: 72 53 65 74 20 3d 20 43 68 61 72 53 65 74 2e 41  rSet = CharSet.A
1c30: 75 74 6f 2c 20 42 65 73 74 46 69 74 4d 61 70 70  uto, BestFitMapp
1c40: 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d 0a 20 20  ing = false,..  
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 68                Th
1c60: 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62 6c 65 43  rowOnUnmappableC
1c70: 68 61 72 20 3d 20 74 72 75 65 2c 20 53 65 74 4c  har = true, SetL
1c80: 61 73 74 45 72 72 6f 72 20 3d 20 74 72 75 65 29  astError = true)
1c90: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
1ca0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 65 78  rivate static ex
1cb0: 74 65 72 6e 20 69 6e 74 20 53 48 47 65 74 46 6f  tern int SHGetFo
1cc0: 6c 64 65 72 50 61 74 68 28 0d 0a 20 20 20 20 20  lderPath(..     
1cd0: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1ce0: 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20 69 6e 74  r hWndOwner, int
1cf0: 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74 50 74 72   nFolder, IntPtr
1d00: 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74 20 66 6c   hToken, uint fl
1d10: 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ags,..          
1d20: 20 20 20 20 20 20 49 6e 74 50 74 72 20 62 75 66        IntPtr buf
1d30: 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58 5f 50 41  fer /* >= MAX_PA
1d40: 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20 20 20 20  TH */);..       
1d50: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1dc0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1dd0: 20 57 72 61 70 70 65 72 20 4d 65 74 68 6f 64 73   Wrapper Methods
1de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1df0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
1e00: 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69 72 65  ng GetSystemDire
1e10: 63 74 6f 72 79 28 29 0d 0a 20 20 20 20 20 20 20  ctory()..       
1e20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e30: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 62          IntPtr b
1e40: 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a  uffer = IntPtr.Z
1e50: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
1e60: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e90: 20 20 20 20 62 75 66 66 65 72 20 3d 20 4d 61 72      buffer = Mar
1ea0: 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54 61 73 6b  shal.AllocCoTask
1eb0: 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Mem(..          
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 69                si
1ed0: 7a 65 6f 66 28 63 68 61 72 29 20 2a 20 28 4d 41  zeof(char) * (MA
1ee0: 58 5f 50 41 54 48 20 2b 20 31 29 29 3b 0d 0a 0d  X_PATH + 1));...
1ef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f00: 20 20 20 20 20 69 66 20 28 62 75 66 66 65 72 20       if (buffer 
1f10: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f50: 69 66 20 28 53 48 47 65 74 46 6f 6c 64 65 72 50  if (SHGetFolderP
1f60: 61 74 68 28 49 6e 74 50 74 72 2e 5a 65 72 6f 2c  ath(IntPtr.Zero,
1f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f90: 20 20 43 53 49 44 4c 5f 53 59 53 54 45 4d 58 38    CSIDL_SYSTEMX8
1fa0: 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d  6, IntPtr.Zero,.
1fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55 52 52   SHGFP_TYPE_CURR
1fe0: 45 4e 54 2c 20 62 75 66 66 65 72 29 20 3d 3d 20  ENT, buffer) == 
1ff0: 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20 20 20 20  S_OK)..         
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2030: 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72  turn Marshal.Ptr
2040: 54 6f 53 74 72 69 6e 67 41 75 74 6f 28 62 75 66  ToStringAuto(buf
2050: 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  fer);..         
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2080: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2090: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
20b0: 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
20c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
20f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2100: 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74 68 69 73  // TODO: Is this
2110: 20 74 68 65 20 72 69 67 68 74 20 65 72 72 6f 72   the right error
2120: 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c 75 74 69   handling soluti
2130: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
2140: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2150: 20 74 6f 20 75 73 65 20 61 74 20 74 68 69 73 20   to use at this 
2160: 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20 20 20 20  point?..        
2170: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
21a0: 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
21b0: 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48  Priority.MediumH
21c0: 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  igh,..          
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
21e0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
21f0: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
2200: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2220: 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f 74 20 67      "Could not g
2230: 65 74 20 73 79 73 74 65 6d 20 64 69 72 65 63 74  et system direct
2240: 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29 2c 0d 0a  ory: {0}", e),..
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2260: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
2270: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2290: 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 20  hrow;..         
22a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
22b0: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
22c0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
22d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 75            if (bu
22f0: 66 66 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a  ffer != IntPtr.Z
2300: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
2310: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2330: 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 46 72 65       Marshal.Fre
2340: 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75 66 66 65  eCoTaskMem(buffe
2350: 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
2360: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66               buf
2370: 66 65 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  fer = IntPtr.Zer
2380: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
2390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
23d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
23e0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
23f0: 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ion..#endif..   
2400: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2410: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
2420: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2470: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
2480: 20 50 72 69 76 61 74 65 20 48 65 6c 70 65 72 20   Private Helper 
2490: 43 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20 20  Classes..       
24a0: 20 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69 72   #region AnyPair
24b0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
24c0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
24d0: 6c 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31 2c  lass AnyPair<T1,
24e0: 20 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d   T2>..        {.
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
2500: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
2510: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
2520: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2530: 20 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47        // WARNING
2540: 3a 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63 74  : This construct
2550: 6f 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20 69  or produces an i
2560: 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79 22  mmutable "empty"
2570: 20 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20   pair..         
2580: 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6f     //          o
2590: 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20  bject...        
25a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
25b0: 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61      public AnyPa
25c0: 69 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ir()..          
25d0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2600: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
2610: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2620: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2680: 75 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31  ublic AnyPair(T1
2690: 20 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   x)..           
26a0: 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20       : this().. 
26b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
26d0: 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20  is.x = x;..     
26e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2740: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2750: 63 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c 20  c AnyPair(T1 x, 
2760: 54 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20 20  T2 y)..         
2770: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 78 29         : this(x)
2780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a0: 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20   this.y = y;..  
27b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
27d0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
27e0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2820: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2830: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
2840: 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d  blic Properties.
2850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2860: 76 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20 20  vate T1 x;..    
2870: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
2880: 31 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20 20  1 X..           
2890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28a0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28b0: 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20   x; }..         
28c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2910: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2920: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54         private T
2930: 32 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2 y;..          
2940: 20 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a 20    public T2 Y.. 
2950: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
2970: 74 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d  t { return y; }.
2980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2990: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
29a0: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
29b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
29c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
29d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a10: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2a20: 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63      #region Trac
2a30: 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20 20  eOps Class..    
2a40: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2a50: 69 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f 70  ic class TraceOp
2a60: 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  s..        {..  
2a70: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2a80: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
2a90: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
2aa0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
2ab0: 74 72 69 6e 67 20 44 65 66 61 75 6c 74 44 65 62  tring DefaultDeb
2ac0: 75 67 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 3a  ugFormat = "#{0:
2ad0: 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22  000} @ {1}: {2}"
2ae0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2af0: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2b00: 69 6e 67 20 44 65 66 61 75 6c 74 54 72 61 63 65  ing DefaultTrace
2b10: 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 3a 30 30  Format = "#{0:00
2b20: 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d  0} @ {1}: {2}";.
2b30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2b40: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
2b50: 69 6e 67 20 49 73 6f 38 36 30 31 44 61 74 65 54  ing Iso8601DateT
2b60: 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 20  imeOutputFormat 
2b70: 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2b80: 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48     "yyyy.MM.ddTH
2b90: 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66 66 66 22  H:mm:ss.fffffff"
2ba0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
2bb0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2bc0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
2c20: 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
2c30: 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  ic Data..       
2c40: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2c50: 74 69 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52  tic object syncR
2c60: 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74  oot = new object
2c70: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2c80: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2c90: 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75 67 49 64  long nextDebugId
2ca0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2cb0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f  rivate static lo
2cc0: 6e 67 20 6e 65 78 74 54 72 61 63 65 49 64 3b 0d  ng nextTraceId;.
2cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
2ce0: 76 61 74 65 20 73 74 61 74 69 63 20 49 4c 69 73  vate static ILis
2cf0: 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72 3e  t<TraceListener>
2d00: 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 3b   debugListeners;
2d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2d20: 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61  ivate static Tra
2d30: 63 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67  cePriority debug
2d40: 50 72 69 6f 72 69 74 79 20 3d 20 54 72 61 63 65  Priority = Trace
2d50: 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c 74  Priority.Default
2d60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
2d70: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72  rivate static Tr
2d80: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
2d90: 65 50 72 69 6f 72 69 74 79 20 3d 20 54 72 61 63  ePriority = Trac
2da0: 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
2db0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
2dc0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2dd0: 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61  tring debugForma
2de0: 74 20 3d 20 44 65 66 61 75 6c 74 44 65 62 75 67  t = DefaultDebug
2df0: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
2e00: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2e10: 74 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65  tic string trace
2e20: 46 6f 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74  Format = Default
2e30: 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  TraceFormat;..  
2e40: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2e50: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2e60: 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2eb0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
2ec0: 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72 6f  ublic Static Pro
2ed0: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
2ee0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2ef0: 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
2f00: 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a   DebugPriority..
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2f30: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2f40: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 64 65  oot) { return de
2f50: 62 75 67 50 72 69 6f 72 69 74 79 3b 20 7d 20 7d  bugPriority; } }
2f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f70: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
2f80: 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 50  ncRoot) { debugP
2f90: 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b  riority = value;
2fa0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2fb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2fc0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3000: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
3010: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3020: 74 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74  tic TracePriorit
3030: 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d  y TracePriority.
3040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3060: 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  get { lock (sync
3070: 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74  Root) { return t
3080: 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 20  racePriority; } 
3090: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
30a0: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
30b0: 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65  yncRoot) { trace
30c0: 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75 65  Priority = value
30d0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
30e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3140: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
3150: 61 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75  atic string Debu
3160: 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20  gFormat..       
3170: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3180: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
3190: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
31a0: 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d  return debugForm
31b0: 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  at; } }..       
31c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
31d0: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
31e0: 20 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76   debugFormat = v
31f0: 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  alue; } }..     
3200: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3210: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3260: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3270: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
3280: 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
3290: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
32b0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
32c0: 29 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65  ) { return trace
32d0: 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20  Format; } }..   
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
32f0: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
3300: 74 29 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74  t) { traceFormat
3310: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
3320: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
3330: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
3340: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
3350: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3390: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
33a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
33b0: 6e 74 65 72 61 63 74 69 76 65 20 53 75 70 70 6f  nteractive Suppo
33c0: 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  rt Methods..    
33d0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
33e0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
33f0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
3400: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
3410: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 69  public static Di
3420: 61 6c 6f 67 52 65 73 75 6c 74 20 53 68 6f 77 4d  alogResult ShowM
3430: 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
3440: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
3450: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
3460: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
3470: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
3480: 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61  back debugCallba
3490: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
34a0: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
34b0: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
34c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34d0: 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
34e0: 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
34f0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3500: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
3510: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3520: 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20 20 20  ategory,..      
3530: 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
3540: 65 42 6f 78 42 75 74 74 6f 6e 73 20 62 75 74 74  eBoxButtons butt
3550: 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ons,..          
3560: 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
3570: 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20 20 20 20  Icon icon..     
3580: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
3590: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 61               Dia
35b0: 6c 6f 67 52 65 73 75 6c 74 20 72 65 73 75 6c 74  logResult result
35c0: 20 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 2e   = DialogResult.
35d0: 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  OK;....         
35e0: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
35f0: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
3600: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
3610: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
3620: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
3630: 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67 65 2c 20  lback, message, 
3640: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
3660: 20 28 53 79 73 74 65 6d 49 6e 66 6f 72 6d 61 74   (SystemInformat
3670: 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72 61 63 74  ion.UserInteract
3680: 69 76 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ive)..          
3690: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
36b0: 69 6e 67 20 74 69 74 6c 65 20 3d 20 47 65 74 41  ing title = GetA
36c0: 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73  ssemblyTitle(ass
36d0: 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  embly);....     
36e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36f0: 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c  f (title == null
3700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3710: 20 20 20 20 20 20 20 20 20 20 20 74 69 74 6c 65             title
3720: 20 3d 20 41 70 70 6c 69 63 61 74 69 6f 6e 2e 50   = Application.P
3730: 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20  roductName;.... 
3740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3750: 20 20 20 72 65 73 75 6c 74 20 3d 20 4d 65 73 73     result = Mess
3760: 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d 65 73 73  ageBox.Show(mess
3770: 61 67 65 2c 20 74 69 74 6c 65 2c 20 62 75 74 74  age, title, butt
3780: 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20  ons, icon);.... 
3790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a0: 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65     DebugAndTrace
37b0: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d  (tracePriority,.
37c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37d0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
37e0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
37f0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
3800: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
3820: 55 73 65 72 20 63 68 6f 69 63 65 20 6f 66 20 7b  User choice of {
3830: 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  0}.", ForDisplay
3840: 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20  (result)),..    
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3860: 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a      category);..
3870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3880: 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
3890: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
38a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
38b0: 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
38c0: 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72  AndTrace(tracePr
38d0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
38e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
38f0: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
3900: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
3910: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
3930: 44 65 66 61 75 6c 74 20 63 68 6f 69 63 65 20 6f  Default choice o
3940: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
3950: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3970: 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d     category);...
3980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3990: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
39a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
39b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
39c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
39d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
39e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3a20: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
3a30: 20 54 72 61 63 69 6e 67 20 53 75 70 70 6f 72 74   Tracing Support
3a40: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
3a50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
3a60: 74 69 63 20 76 6f 69 64 20 53 65 74 75 70 44 65  tic void SetupDe
3a70: 62 75 67 4c 69 73 74 65 6e 65 72 73 28 29 0d 0a  bugListeners()..
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3aa0: 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72  f (debugListener
3ab0: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ad0: 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20 3d  debugListeners =
3ae0: 20 6e 65 77 20 4c 69 73 74 3c 54 72 61 63 65 4c   new List<TraceL
3af0: 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a 0d 0a 20  istener>();.... 
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
3b10: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 2e 41 64  ebugListeners.Ad
3b20: 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61  d(new ConsoleTra
3b30: 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a  ceListener());..
3b40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
3b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ba0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3bb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f  public static lo
3bc0: 6e 67 20 4e 65 78 74 44 65 62 75 67 49 64 28 29  ng NextDebugId()
3bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3bf0: 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63   return Interloc
3c00: 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65  ked.Increment(re
3c10: 66 20 6e 65 78 74 44 65 62 75 67 49 64 29 3b 0d  f nextDebugId);.
3c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
3c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3c90: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c   public static l
3ca0: 6f 6e 67 20 4e 65 78 74 54 72 61 63 65 49 64 28  ong NextTraceId(
3cb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3cd0: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
3ce0: 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72  cked.Increment(r
3cf0: 65 66 20 6e 65 78 74 54 72 61 63 65 49 64 29 3b  ef nextTraceId);
3d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3d10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3d70: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
3d80: 73 74 72 69 6e 67 20 54 69 6d 65 53 74 61 6d 70  string TimeStamp
3d90: 28 44 61 74 65 54 69 6d 65 20 64 61 74 65 54 69  (DateTime dateTi
3da0: 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me)..           
3db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3dc0: 20 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 54      return dateT
3dd0: 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49 73 6f  ime.ToString(Iso
3de0: 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70  8601DateTimeOutp
3df0: 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20  utFormat);..    
3e00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3e10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
3e70: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
3e80: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
3e90: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
3ea0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
3eb0: 69 63 20 73 74 72 69 6e 67 20 47 65 74 4d 65 74  ic string GetMet
3ec0: 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  hodName(..      
3ed0: 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 54            StackT
3ee0: 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65 2c  race stackTrace,
3ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f00: 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20 20 20    int level..   
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3f40: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
3f50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3f60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f80: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61     // NOTE: If a
3f90: 20 76 61 6c 69 64 20 73 74 61 63 6b 20 74 72 61   valid stack tra
3fa0: 63 65 20 77 61 73 20 6e 6f 74 20 73 75 70 70 6c  ce was not suppl
3fb0: 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  ied by the..    
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fd0: 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2c  //       caller,
3fe0: 20 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f 77 20   create one now 
3ff0: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72  based on the cur
4000: 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rent..          
4010: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
4020: 20 20 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61     execution sta
4030: 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck...           
4040: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4060: 20 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20   if (stackTrace 
4070: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
40a0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40c0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
40d0: 61 62 20 74 68 65 20 63 75 72 72 65 6e 74 20 65  ab the current e
40e0: 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d  xecution stack..
40f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4100: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4120: 20 20 20 20 20 73 74 61 63 6b 54 72 61 63 65 20       stackTrace 
4130: 3d 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  = new StackTrace
4140: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4160: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4170: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4180: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
4190: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
41a0: 77 68 65 6e 20 77 65 20 63 61 70 74 75 72 65 0d  when we capture.
41b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
41c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
41d0: 20 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63    the stack trac
41e0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4210: 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b          level++;
4220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4230: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4250: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4260: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
4270: 47 65 74 20 74 68 65 20 73 70 65 63 69 66 69 65  Get the specifie
4280: 64 20 73 74 61 63 6b 20 66 72 61 6d 65 20 28 61  d stack frame (a
4290: 6c 77 61 79 73 20 61 64 64 20 6f 6e 65 20 74 6f  lways add one to
42a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
42c0: 6b 69 70 20 74 68 69 73 20 6d 65 74 68 6f 64 29  kip this method)
42d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
42e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4300: 74 61 63 6b 46 72 61 6d 65 20 73 74 61 63 6b 46  tackFrame stackF
4310: 72 61 6d 65 20 3d 20 73 74 61 63 6b 54 72 61 63  rame = stackTrac
4320: 65 2e 47 65 74 46 72 61 6d 65 28 6c 65 76 65 6c  e.GetFrame(level
4330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4340: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
4370: 68 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  he method for th
4380: 65 20 73 74 61 63 6b 20 66 72 61 6d 65 2e 0d 0a  e stack frame...
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 74 68              Meth
43c0: 6f 64 42 61 73 65 20 6d 65 74 68 6f 64 42 61 73  odBase methodBas
43d0: 65 20 3d 20 73 74 61 63 6b 46 72 61 6d 65 2e 47  e = stackFrame.G
43e0: 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20  etMethod();.... 
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4410: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4420: 54 45 3a 20 47 65 74 20 74 68 65 20 74 79 70 65  TE: Get the type
4430: 20 66 6f 72 20 74 68 65 20 6d 65 74 68 6f 64 2e   for the method.
4440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4450: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79                Ty
4470: 70 65 20 74 79 70 65 20 3d 20 6d 65 74 68 6f 64  pe type = method
4480: 42 61 73 65 2e 44 65 63 6c 61 72 69 6e 67 54 79  Base.DeclaringTy
4490: 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  pe;....         
44a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44c0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20     // NOTE: Get 
44d0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
44e0: 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20  method...       
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4510: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
4520: 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 4e 61   = methodBase.Na
4530: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
4540: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4560: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75     // NOTE: Retu
4570: 72 6e 20 74 68 65 20 70 72 6f 70 65 72 6c 79 20  rn the properly 
4580: 66 6f 72 6d 61 74 74 65 64 20 72 65 73 75 6c 74  formatted result
4590: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
45a0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
45c0: 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
45d0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
45e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b                "{
45f0: 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70 65 2e  0}{1}{2}", type.
4600: 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c 69 6d  Name, Type.Delim
4610: 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20  iter, name);..  
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4640: 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
4650: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4670: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4690: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
46a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
46b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
46c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
46d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
46f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4710: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4720: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
4730: 76 6f 69 64 20 44 65 62 75 67 43 6f 72 65 28 0d  void DebugCore(.
4740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4750: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
4760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4770: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
4780: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
4790: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
47a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
47b0: 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52       lock (syncR
47c0: 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  oot)..          
47d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
47f0: 28 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73 20  (debugListeners 
4800: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
4810: 20 20 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 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
4840: 20 28 54 72 61 63 65 4c 69 73 74 65 6e 65 72 20   (TraceListener 
4850: 6c 69 73 74 65 6e 65 72 20 69 6e 20 64 65 62 75  listener in debu
4860: 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a 20 20 20  gListeners)..   
4870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4880: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48a0: 20 20 20 20 6c 69 73 74 65 6e 65 72 2e 57 72 69      listener.Wri
48b0: 74 65 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20  teLine(message, 
48c0: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48e0: 20 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72          listener
48f0: 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20  .Flush();..     
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4910: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4930: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4940: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
49b0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
49c0: 69 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20  id TraceCore(.. 
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
49e0: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a00: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
4a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a20: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4a30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4a40: 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f     lock (syncRoo
4a50: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
4a60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a90: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74     // NOTE: Writ
4aa0: 65 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f  e the message to
4ab0: 20 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20   all the active 
4ac0: 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
4ad0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
4ae0: 20 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a      listeners...
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b00: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4b20: 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73  e.WriteLine(mess
4b30: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
4b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b50: 20 20 20 20 20 54 72 61 63 65 2e 46 6c 75 73 68       Trace.Flush
4b60: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4b70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
4b80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4b90: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
4be0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
4bf0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
4c00: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
4c10: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
4c20: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
4c30: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4c40: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4c50: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4c60: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4c70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4c80: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4c90: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cb0: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4cc0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
4ce0: 78 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69  xception excepti
4cf0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
4d00: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
4d10: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
4d20: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4d30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4d40: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 63 65          if (exce
4d50: 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ption != null)..
4d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d70: 20 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67      return Debug
4d80: 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72  AndTrace(tracePr
4d90: 69 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c  iority, debugCal
4da0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dc0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e  traceCallback, n
4dd0: 65 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78  ew StackTrace(ex
4de0: 63 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20  ception, true), 
4df0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65              exce
4e10: 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29  ption.ToString()
4e20: 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  , category);....
4e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e40: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
4e50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
4e60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
4ec0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
4ed0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
4ee0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
4ef0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
4f00: 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  tic string Debug
4f10: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
4f20: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
4f30: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
4f40: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
4f50: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
4f60: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
4f70: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
4f80: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
4f90: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
4fa0: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
4fb0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73       string mess
4fc0: 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
4fd0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
4fe0: 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
4ff0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5000: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5010: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5020: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5040: 20 20 20 20 74 72 61 63 65 50 72 69 6f 72 69 74      tracePriorit
5050: 79 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  y, debugCallback
5060: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
5070: 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20 20 20   null, 1,..     
5080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
5090: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
50a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
50b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
50c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5100: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5110: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
5120: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
5130: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
5140: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5150: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
5160: 67 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  g DebugAndTrace(
5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5180: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
5190: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51b0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
51c0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
51e0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
51f0: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
5200: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63              Stac
5210: 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63  kTrace stackTrac
5220: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
5230: 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a      int level,..
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5250: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
5260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5270: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
5280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5290: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
52a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
52b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
52c0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
52d0: 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69   Always skip thi
52e0: 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 69 66 20  s call frame if 
52f0: 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20  the stack trace 
5300: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
5310: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6f 69      //       goi
5320: 6e 67 20 74 6f 20 62 65 20 63 61 70 74 75 72 65  ng to be capture
5330: 64 20 62 79 20 47 65 74 4d 65 74 68 6f 64 4e 61  d by GetMethodNa
5340: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
5350: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5360: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61           if (sta
5370: 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29  ckTrace == null)
5380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5390: 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a        level++;..
53a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
53b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
53c0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46        // NOTE: F
53d0: 6f 72 6d 61 74 20 74 68 65 20 6d 65 73 73 61 67  ormat the messag
53e0: 65 20 66 6f 72 20 64 69 73 70 6c 61 79 20 28 6f  e for display (o
53f0: 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  nce)...         
5400: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5410: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
5420: 67 20 66 6f 72 6d 61 74 74 65 64 20 3d 20 53 74  g formatted = St
5430: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
5440: 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
5460: 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74 61 63 6b  MethodName(stack
5470: 54 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c 20 6d  Trace, level), m
5480: 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20  essage);....    
5490: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
54b0: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20  // NOTE: If the 
54c0: 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 69  debug callback i
54d0: 73 20 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65  s invalid or the
54e0: 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d   trace priority.
54f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5500: 20 2f 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69   //       of thi
5510: 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73  s message is les
5520: 73 20 74 68 61 6e 20 77 68 61 74 20 77 65 20 63  s than what we c
5530: 75 72 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f  urrently want to
5540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5550: 20 20 2f 2f 20 20 20 20 20 20 20 64 65 62 75 67    //       debug
5560: 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20  , skip it...    
5570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
5580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5590: 69 66 20 28 28 64 65 62 75 67 43 61 6c 6c 62 61  if ((debugCallba
55a0: 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a  ck != null) &&..
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55c0: 20 20 20 20 28 74 72 61 63 65 50 72 69 6f 72 69      (tracePriori
55d0: 74 79 20 3e 3d 20 44 65 62 75 67 50 72 69 6f 72  ty >= DebugPrior
55e0: 69 74 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ity))..         
55f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5620: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
5630: 6e 76 6f 6b 65 20 74 68 65 20 64 65 62 75 67 20  nvoke the debug 
5640: 63 61 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68  callback with th
5650: 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20  e formatted..   
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5670: 20 2f 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67   //       messag
5680: 65 20 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f  e and the catego
5690: 72 79 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ry specified by 
56a0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
56b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
56c0: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20    caller...     
56d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
56e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
56f0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
5700: 62 61 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20  back(formatted, 
5710: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  category);..    
5720: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5740: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5750: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
5760: 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
5770: 61 63 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f  ack is invalid o
5780: 72 20 74 68 65 20 74 72 61 63 65 20 70 72 69 6f  r the trace prio
5790: 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
57a0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
57b0: 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69  f this message i
57c0: 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74  s less than what
57d0: 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61   we currently wa
57e0: 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  nt to..         
57f0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5800: 74 72 61 63 65 2c 20 73 6b 69 70 20 69 74 2e 0d  trace, skip it..
5810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5820: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5830: 20 20 20 20 20 69 66 20 28 28 74 72 61 63 65 43       if ((traceC
5840: 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
5850: 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
5860: 20 20 20 20 20 20 20 20 20 28 74 72 61 63 65 50           (traceP
5870: 72 69 6f 72 69 74 79 20 3e 3d 20 54 72 61 63 65  riority >= Trace
5880: 50 72 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20  Priority))..    
5890: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58b0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
58c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
58d0: 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 74  TE: Invoke the t
58e0: 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 77 69  race callback wi
58f0: 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64  th the formatted
5900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5910: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
5920: 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20 63  essage and the c
5930: 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69 65  ategory specifie
5940: 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5960: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a         caller...
5970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5980: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5990: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
59a0: 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74  eCallback(format
59b0: 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  ted, category);.
59c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
59d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
59e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65 73        return mes
59f0: 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sage;..         
5a00: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5a10: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
5a20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5a30: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
5a40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5a50: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
5a90: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
5aa0: 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 43  n MockRegistry C
5ab0: 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
5ac0: 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
5ad0: 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20  ss MockRegistry 
5ae0: 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  : IDisposable.. 
5af0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5b00: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
5b10: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
5b20: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
5b30: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
5b40: 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry()..          
5b50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5b60: 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72       whatIf = tr
5b70: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
5b80: 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20       readOnly = 
5b90: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
5ba0: 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72         safe = tr
5bb0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
5bc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5bd0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5c20: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
5c30: 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
5c40: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
5c50: 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  whatIf..        
5c60: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5c70: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
5c80: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
5c90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ca0: 20 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20      this.whatIf 
5cb0: 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  = whatIf;..     
5cc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5cd0: 20 20 20 20 20 20 20 20 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 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5d20: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5d30: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d  c MockRegistry(.
5d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5d50: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5d70: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20  ool readOnly..  
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
5d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5da0: 20 3a 20 74 68 69 73 28 77 68 61 74 49 66 29 0d   : this(whatIf).
5db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dd0: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
5de0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
5df0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5e00: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5e50: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5e60: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 28 0d  c MockRegistry(.
5e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e80: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
5e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5ea0: 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20  ool readOnly,.. 
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
5ec0: 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20  ool safe..      
5ed0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
5ef0: 68 69 73 28 77 68 61 74 49 66 2c 20 72 65 61 64  his(whatIf, read
5f00: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
5f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5f20: 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20        this.safe 
5f30: 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  = safe;..       
5f40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
5f50: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
5f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fb0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
5fc0: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
5fd0: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
5fe0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
5ff0: 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20  bool whatIf;..  
6000: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6010: 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20   bool WhatIf..  
6020: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6030: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6040: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
6050: 28 29 3b 20 72 65 74 75 72 6e 20 77 68 61 74 49  (); return whatI
6060: 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  f; }..          
6070: 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65 63        set { Chec
6080: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 77 68 61  kDisposed(); wha
6090: 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  tIf = value; }..
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
60b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
60c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
60f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6110: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61  private bool rea
6120: 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  dOnly;..        
6130: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6140: 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  ReadOnly..      
6150: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6160: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
6170: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
6180: 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b  return readOnly;
6190: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
61a0: 20 20 20 20 73 65 74 20 7b 20 43 68 65 63 6b 44      set { CheckD
61b0: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 61 64 4f  isposed(); readO
61c0: 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  nly = value; }..
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
61e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
61f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6230: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6240: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 73 61 66  private bool saf
6250: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6260: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65  public bool Safe
6270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6290: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
62a0: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73  osed(); return s
62b0: 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  afe; }..        
62c0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
62d0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 73  eckDisposed(); s
62e0: 61 66 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  afe = value; }..
62f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6350: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6360: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
6370: 73 74 72 79 4b 65 79 20 63 6c 61 73 73 65 73 52  stryKey classesR
6380: 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  oot;..          
6390: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
63a0: 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73 65 73  istryKey Classes
63b0: 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20  Root..          
63c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
63d0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
63e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6410: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6420: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6c 61           if (cla
6430: 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e 75 6c 6c  ssesRoot == null
6440: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6450: 20 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73             class
6460: 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20 4d 6f 63  esRoot = new Moc
6470: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
6480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6490: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
64a0: 74 72 79 2e 43 6c 61 73 73 65 73 52 6f 6f 74 2c  try.ClassesRoot,
64b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
64c0: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64e0: 20 72 65 74 75 72 6e 20 63 6c 61 73 73 65 73 52   return classesR
64f0: 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  oot;..          
6500: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6510: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6520: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6570: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6580: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6590: 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d   currentConfig;.
65a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
65b0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
65c0: 4b 65 79 20 43 75 72 72 65 6e 74 43 6f 6e 66 69  Key CurrentConfi
65d0: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  g..            {
65e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65f0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
6600: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6620: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
6630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6640: 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65 6e        if (curren
6650: 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75 6c 6c 29  tConfig == null)
6660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6670: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
6680: 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77 20 4d 6f  tConfig = new Mo
6690: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
66c0: 73 74 72 79 2e 43 75 72 72 65 6e 74 43 6f 6e 66  stry.CurrentConf
66d0: 69 67 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ig, whatIf, read
66e0: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
66f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6700: 20 20 20 20 72 65 74 75 72 6e 20 63 75 72 72 65      return curre
6710: 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20  ntConfig;..     
6720: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6730: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6740: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
67a0: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
67b0: 72 79 4b 65 79 20 63 75 72 72 65 6e 74 55 73 65  ryKey currentUse
67c0: 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
67d0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
67e0: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 55 73  tryKey CurrentUs
67f0: 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
6800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6810: 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20     get..        
6820: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6840: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6850: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6860: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
6870: 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c 6c 29 0d  ntUser == null).
6880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6890: 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74           current
68a0: 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f 63 6b 52  User = new MockR
68b0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68d0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
68e0: 79 2e 43 75 72 72 65 6e 74 55 73 65 72 2c 20 77  y.CurrentUser, w
68f0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6900: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6920: 65 74 75 72 6e 20 63 75 72 72 65 6e 74 55 73 65  eturn currentUse
6930: 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r;..            
6940: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6950: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6960: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69a0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
69b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
69c0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
69d0: 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20  ynData;..       
69e0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
69f0: 52 65 67 69 73 74 72 79 4b 65 79 20 44 79 6e 44  RegistryKey DynD
6a00: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
6a10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6a20: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6a30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a50: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6a60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6a70: 20 20 20 20 20 20 20 20 69 66 20 28 64 79 6e 44          if (dynD
6a80: 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ata == null)..  
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6aa0: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
6ab0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
6ac0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 52 65 67 69 73 74 72 79 2e 44 79 6e 44 61    Registry.DynDa
6af0: 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ta, whatIf, read
6b00: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b20: 20 20 20 20 72 65 74 75 72 6e 20 64 79 6e 44 61      return dynDa
6b30: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
6b40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6b50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6b60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6bb0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
6bc0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
6bd0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20  localMachine;.. 
6be0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
6bf0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
6c00: 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 0d 0a  y LocalMachine..
6c10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6c30: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
6c40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6c50: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6c60: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61 63 68     if (localMach
6c90: 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ine == null)..  
6ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cb0: 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68 69        localMachi
6cc0: 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ne = new MockReg
6cd0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6cf0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
6d00: 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c 20 77 68  LocalMachine, wh
6d10: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6d20: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6d40: 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63 68 69 6e  turn localMachin
6d50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
6d60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6d80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6dd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
6de0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70  ockRegistryKey p
6df0: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d  erformanceData;.
6e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6e10: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
6e20: 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e 63 65 44  Key PerformanceD
6e30: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
6e40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6e50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6e60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e80: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6e90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6ea0: 20 20 20 20 20 20 20 20 69 66 20 28 70 65 72 66          if (perf
6eb0: 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 3d 20 6e  ormanceData == n
6ec0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 65                pe
6ee0: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d 20  rformanceData = 
6ef0: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
6f00: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f20: 20 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f    Registry.Perfo
6f30: 72 6d 61 6e 63 65 44 61 74 61 2c 20 77 68 61 74  rmanceData, what
6f40: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
6f50: 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fe);....        
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6f70: 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61  rn performanceDa
6f80: 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta;..           
6f90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6fa0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
6fb0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7000: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7010: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
7020: 75 73 65 72 73 3b 0d 0a 20 20 20 20 20 20 20 20  users;..        
7030: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
7040: 65 67 69 73 74 72 79 4b 65 79 20 55 73 65 72 73  egistryKey Users
7050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7070: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20   get..          
7080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7090: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
70a0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
70b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
70c0: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 3d       if (users =
70d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70f0: 20 75 73 65 72 73 20 3d 20 6e 65 77 20 4d 6f 63   users = new Moc
7100: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7120: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
7130: 74 72 79 2e 55 73 65 72 73 2c 20 77 68 61 74 49  try.Users, whatI
7140: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
7150: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
7160: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7170: 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20 20  n users;..      
7180: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7190: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
71a0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
71b0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
71c0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
7210: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
7220: 6c 69 63 20 22 52 65 67 69 73 74 72 79 22 20 4d  lic "Registry" M
7230: 65 74 68 6f 64 73 0d 0a 23 69 66 20 66 61 6c 73  ethods..#if fals
7240: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  e..            p
7250: 75 62 6c 69 63 20 6f 62 6a 65 63 74 20 47 65 74  ublic object Get
7260: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
7270: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
7280: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
7290: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
72a0: 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  valueName,..    
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
72c0: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 0d  ct defaultValue.
72d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
72e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
72f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7300: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
7310: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
7320: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
7330: 67 69 73 74 72 79 2e 47 65 74 56 61 6c 75 65 28  gistry.GetValue(
7340: 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e 61  keyName, valueNa
7350: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
7360: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7370: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7380: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
73d0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
73e0: 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
73f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
7400: 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  g keyName,..    
7410: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
7420: 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d 0a 20  ng valueName,.. 
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
7440: 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20  bject value..   
7450: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
7460: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
7480: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74a0: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
74b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
74c0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
74d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
74e0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
74f0: 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65  SetValue(keyName
7500: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c  , valueName, val
7510: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
7520: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
7530: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7570: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7580: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
7590: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
75b0: 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d 0a 20 20  ing keyName,..  
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
75d0: 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d 65 2c 0d  ring valueName,.
75e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
75f0: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a   object value,..
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 52 65 67 69 73 74 72 79 56 61 6c 75 65 4b 69 6e  RegistryValueKin
7620: 64 20 76 61 6c 75 65 4b 69 6e 64 0d 0a 20 20 20  d valueKind..   
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
7640: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
7660: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
7670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7680: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
7690: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
76a0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
76b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
76c0: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 2e         Registry.
76d0: 53 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65  SetValue(keyName
76e0: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 76 61 6c  , valueName, val
76f0: 75 65 2c 20 76 61 6c 75 65 4b 69 6e 64 29 3b 0d  ue, valueKind);.
7700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
7710: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
7720: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7740: 2f 2f 2f 2f 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7780: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7790: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
77a0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
77b0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
77c0: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
77d0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
77e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
77f0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7800: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
7810: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
7820: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
7830: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
7840: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
7850: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
7860: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
7870: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
7880: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7890: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
78a0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
78b0: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
78c0: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
78d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
78e0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
78f0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7900: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7940: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7950: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
7960: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
7970: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
7980: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
7990: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
79a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
79b0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
79c0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
79d0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
79e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
79f0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
7a00: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
7a10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7a20: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
7a30: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7a40: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
7a50: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
7a70: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
7a80: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
7a90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7aa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7af0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7b00: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
7b10: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
7b20: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
7b30: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
7b40: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
7b50: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
7b60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7b80: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
7b90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
7bc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7bd0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bf0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c10: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c30: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
7c40: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
7c50: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
7c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7cb0: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
7cc0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7d00: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
7d10: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
7d40: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7d70: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7d80: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
7d90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
7dd0: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
7de0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
7e10: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7e50: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7e60: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7ea0: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7eb0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
7ee0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7f00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7f10: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7f20: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
7f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7f40: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f60: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7f70: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f90: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7fa0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7fc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7fe0: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
7ff0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
8030: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
8040: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
8070: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8090: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
80b0: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
80c0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
80d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8100: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
8110: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8130: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
8140: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
8150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8160: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8180: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
8190: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
81a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81d0: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81f0: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
8200: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8230: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8290: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
82a0: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
82b0: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
82c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
82d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
82f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8300: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8320: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
8330: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
8340: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
8350: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8370: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
8380: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
8390: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
83a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
83b0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
83c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
83f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8420: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
8430: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
8440: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8450: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
8460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8480: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84a0: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
84b0: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
84c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
84d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
84e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
84f0: 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8540: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
8550: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
8560: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
8570: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
8580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8590: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
85a0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
85b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
85c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
85d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
85e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
85f0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8640: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
8650: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
8660: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
8670: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
8680: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
8690: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
86a0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
86b0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
86c0: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
86d0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
86e0: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
86f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
8700: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
8720: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8740: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
8750: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8760: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
8770: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8780: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
8790: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
87a0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
87b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
87f0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
8800: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
8810: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8820: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8830: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8840: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8850: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
8860: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
8880: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
8890: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
88a0: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
88b0: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
88c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
88d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
88e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8910: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8920: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8930: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8950: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8970: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
8980: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
8990: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
89a0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
89b0: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
89c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
89d0: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
89e0: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
89f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8a00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8a50: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8a60: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8a70: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8a90: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8ab0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
8ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ad0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
8ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8b00: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8b10: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
8b20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8b30: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
8b40: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
8b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bb0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8bc0: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8bd0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8be0: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8bf0: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8c10: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c30: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8c50: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
8c90: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
8ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cc0: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
8cd0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
8ce0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8cf0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8d40: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
8d50: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
8d60: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
8d70: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
8d80: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
8d90: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
8da0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8db0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8dc0: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8dd0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8de0: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
8df0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
8e00: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8e10: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8e20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8e30: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8e40: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e70: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8e80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8e90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ee0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8ef0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8f00: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8f20: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8f40: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8f50: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8f70: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8f80: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8f90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8fa0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8fb0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8fc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8fd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9010: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9020: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
9030: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9050: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
9060: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9070: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
9080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9090: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
90c0: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
90d0: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
90e0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
90f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9100: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
9110: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
9120: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
9130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9170: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9180: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
9190: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91b0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
91c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
91d0: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91f0: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
9200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9210: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
9220: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
9240: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
9250: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
9260: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
9270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9280: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
9290: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
92a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
92b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
92c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
92d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
92f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9320: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
9330: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
9340: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
9350: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
9360: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9370: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9380: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
9390: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
93a0: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
93b0: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
93c0: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
93d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
93e0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
93f0: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
9400: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
9410: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9420: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
9430: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
9440: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9450: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
94b0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
94c0: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
94d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
94e0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
94f0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
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 20 6e 75 6c 6c 3b 0d     return null;.
95a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
95b0: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
95e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9600: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
9610: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
9620: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
9630: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
9640: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9650: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
9660: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
9670: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
9680: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
96a0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
96b0: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
96c0: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 22 77 68 61   allowed in "wha
96d0: 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20  t-if"..         
96e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
96f0: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
9700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9710: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9730: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
9740: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
9750: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
9760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9770: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
9780: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
9790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
97a0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
97b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
97c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
97e0: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
97f0: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
9800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9810: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
9820: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9850: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
9860: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
9870: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
9880: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
98a0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
98b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
98c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
98d0: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
98e0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9900: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
9910: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
9920: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9930: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9940: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9950: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9960: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
99b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
99c0: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
99d0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
99e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
99f0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
9a00: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9a10: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a50: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9a60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
9a70: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
9a80: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
9a90: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9aa0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9ac0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9ad0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9ae0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9af0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9b00: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
9b10: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
9b20: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9b30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9b40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b90: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9ba0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9bb0: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
9bc0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9bd0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9be0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9bf0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9c10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9c30: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9c50: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9c60: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9c70: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
9c80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c90: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
9ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9cb0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
9cc0: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9cd0: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
9ce0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9cf0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9d40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9d50: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
9d60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9d70: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
9d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9d90: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
9da0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9db0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9dc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9dd0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9de0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9df0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9e00: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9e20: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e40: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9e60: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e80: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9e90: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9ea0: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9eb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9ec0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9f10: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9f20: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
9f30: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
9f40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9f50: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9f60: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9f80: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fa0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9fb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9fc0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9fd0: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9ff0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a040: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a050: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
a060: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
a070: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a080: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
a090: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
a0a0: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
a0c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0e0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
a0f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a100: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
a110: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a120: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a130: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
a140: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a150: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
a160: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
a170: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
a180: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
a190: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
a1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
a1e0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
a1f0: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
a200: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a210: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
a220: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
a230: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
a240: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
a260: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
a270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a280: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
a290: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
a2a0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
a2b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a2c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a300: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a310: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
a320: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
a330: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
a340: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
a350: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
a360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a370: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a3b0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a3c0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a3d0: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
a3e0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
a3f0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a400: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a410: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a420: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a440: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a460: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
a470: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
a480: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a490: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
a4a0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
a4b0: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
a4c0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a4d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
a4e0: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
a4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a500: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
a510: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
a520: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
a530: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
a540: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a5b0: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
a5c0: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
a5d0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a5e0: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
a5f0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
a600: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
a610: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a620: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a630: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a640: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a650: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a660: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a680: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6a0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a6c0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
a6f0: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
a700: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a710: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a720: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a730: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a770: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a780: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
a790: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a7b0: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a7e0: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
a7f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a800: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a810: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a830: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a840: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a860: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a880: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
a890: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
a8a0: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8c0: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
a8d0: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
a8e0: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
a8f0: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a910: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
a920: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a940: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a9a0: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
a9b0: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
a9c0: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
a9d0: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
a9e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a9f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
aa00: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
aa10: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
aa20: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
aa30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
aa40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
aa50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
aa90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
aaa0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
aab0: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
aac0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
aad0: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
ab00: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
ab10: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
ab20: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
ab30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ab40: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ab50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ab80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
aba0: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
abb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
abc0: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
abe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abf0: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
ac00: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
ac10: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
ac20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ac30: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ac80: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
ac90: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
aca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
acb0: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
acc0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
acd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ace0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
acf0: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
ad00: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
ad10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ad20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
ad30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ad70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
ad80: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
ad90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
ada0: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
adb0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
add0: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
ade0: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
adf0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ae00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
ae10: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
ae20: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ae70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
ae80: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
ae90: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
aea0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
aeb0: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
aee0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
aef0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
af00: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
af10: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
af20: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af40: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
af50: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
af60: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
af70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
af80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
af90: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
afa0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
afb0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
afc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
afd0: 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
b000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b020: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b030: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
b040: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
b050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b060: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b070: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
b080: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
b090: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
b0a0: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
b0b0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
b0c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
b0d0: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
b0e0: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
b0f0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b110: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b130: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
b140: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
b150: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
b160: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
b170: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b180: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
b190: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
b1a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b1e0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b1f0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
b200: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
b210: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
b220: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
b230: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
b240: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
b250: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b260: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
b270: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
b280: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b290: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
b2a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b2b0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b2c0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
b2d0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b320: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
b330: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
b340: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
b350: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b360: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
b370: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
b380: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
b390: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 22  afe because in "
b3a0: 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
b3b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b3c0: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
b3d0: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
b3e0: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
b3f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b400: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
b410: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
b420: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
b430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b440: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
b450: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
b460: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b470: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b480: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
b490: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
b4a0: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
b4b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b4c0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b4d0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b4e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b530: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b540: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
b550: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
b560: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b570: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
b580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b590: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b5a0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
b5b0: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
b5c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b5d0: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b5e0: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b5f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b600: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b610: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b620: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
b630: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b650: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
b660: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
b670: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b680: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b6e0: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
b6f0: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
b700: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
b720: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b740: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b760: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b790: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
b7a0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
b7b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 20 20 20 20 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 0d 0a 20 20 20 20 20  /////////..     
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b810: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
b820: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
b830: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b850: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b890: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
b8a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b8b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
b8e0: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
b910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b920: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b940: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b950: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b960: 2f 2f 2f 2f 2f 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 0d  ///////////////.
b980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b990: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
b9a0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
b9b0: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b9e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba10: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ba20: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
ba30: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
ba40: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba60: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
ba70: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
ba80: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
baa0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
bab0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
bac0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
bad0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
bb20: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
bb30: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
bb40: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
bb50: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
bb60: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
bb70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bb80: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
bb90: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
bba0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
bbb0: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
bbc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bbd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
bbe0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
bbf0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bc40: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
bc50: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
bc60: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
bc70: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
bc80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
bca0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
bcb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
bcc0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
bcd0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
bce0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
bcf0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bd50: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
bd60: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
bd70: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
bd80: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
bd90: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
bda0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bdb0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
bdc0: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
bdd0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
bde0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
bdf0: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
be00: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
be10: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
be20: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
be30: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
be40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
be50: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
be60: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
be70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
be80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
be90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
beb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bed0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bee0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bef0: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
bf00: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bf10: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bf20: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
bf30: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bf40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bf50: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bf60: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
bf70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bf80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bfd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bfe0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
bff0: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 52  c int keyValuesR
c000: 65 61 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ead;..          
c010: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
c020: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 52 65 61  int KeyValuesRea
c030: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
c040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c050: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b    get { return k
c060: 65 79 56 61 6c 75 65 73 52 65 61 64 3b 20 7d 0d  eyValuesRead; }.
c070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c0d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c0e0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c0f0: 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 57 72 69  int keyValuesWri
c100: 74 74 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  tten;..         
c110: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c120: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 57 72   int KeyValuesWr
c130: 69 74 74 65 6e 0d 0a 20 20 20 20 20 20 20 20 20  itten..         
c140: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c150: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c160: 72 6e 20 6b 65 79 56 61 6c 75 65 73 57 72 69 74  rn keyValuesWrit
c170: 74 65 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ten; }..        
c180: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c190: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
c1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c1d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
c1e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
c1f0: 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61  static int keyVa
c200: 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20  luesDeleted;..  
c210: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
c220: 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79 56   static int KeyV
c230: 61 6c 75 65 73 44 65 6c 65 74 65 64 0d 0a 20 20  aluesDeleted..  
c240: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
c260: 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c   { return keyVal
c270: 75 65 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20  uesDeleted; }.. 
c280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
c290: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
c2a0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
c2b0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
c2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2f0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
c300: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
c310: 75 62 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74  ublic Static Met
c320: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
c330: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
c340: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
c350: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
c360: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
c370: 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69   static MockRegi
c380: 73 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b  stryKey OpenSubK
c390: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
c3a0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
c3b0: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
c3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c3d0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
c3e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c3f0: 20 20 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65     bool writable
c400: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c410: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
c420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c430: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
c440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
c450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
c460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c470: 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
c480: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
c490: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c4a0: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
c4b0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
c4c0: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
c4e0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
c4f0: 61 63 65 28 77 72 69 74 61 62 6c 65 20 3f 0d 0a  ace(writable ?..
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c510: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
c520: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 20 3a 20  ority.Highest : 
c530: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
c540: 67 68 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  gher,..         
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
c560: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
c570: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
c580: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5a0: 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
c5b0: 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
c5c0: 3d 20 7b 31 7d 2c 20 77 72 69 74 61 62 6c 65 20  = {1}, writable 
c5d0: 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {2}",..       
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74   ForDisplay(root
c600: 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  Key), ForDisplay
c610: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 0d 0a 20  (subKeyName),.. 
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c630: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c640: 79 28 77 72 69 74 61 62 6c 65 29 29 2c 20 74 72  y(writable)), tr
c650: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
c660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c670: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
c680: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
c690: 77 61 79 73 20 66 6f 72 62 69 64 20 77 72 69 74  ways forbid writ
c6a0: 61 62 6c 65 20 61 63 63 65 73 73 20 77 68 65 6e  able access when
c6b0: 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 0d 0a 20   operating in.. 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c6d0: 2f 20 20 20 20 20 20 20 22 77 68 61 74 2d 69 66  /       "what-if
c6e0: 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  " mode...       
c6f0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
c710: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
c720: 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53   = rootKey.OpenS
c730: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
c740: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
c750: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
c760: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
c770: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
c780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
c790: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20  ey != null) ?.. 
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73     new MockRegis
c7c0: 74 72 79 4b 65 79 28 6b 65 79 2c 20 77 68 61 74  tryKey(key, what
c7d0: 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  If, false, false
c7e0: 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  ) : null;..     
c7f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c800: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
c810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c850: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
c860: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
c870: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
c880: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
c890: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c8a0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c8b0: 20 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a   CreateSubKey(..
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
c8e0: 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
c8f0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c900: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
c920: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
c930: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c940: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
c950: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
c960: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c970: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c980: 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  rootKey == null)
c990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c9a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
c9b0: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
c9c0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
c9d0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
c9e0: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
c9f0: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
ca00: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
ca10: 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
ca30: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
ca40: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
ca50: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca70: 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
ca80: 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
ca90: 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cab0: 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74   ForDisplay(root
cac0: 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  Key), ForDisplay
cad0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a  (subKeyName)),..
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caf0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
cb00: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
cb10: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cb40: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb60: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 6f  / HACK: Always o
cb70: 70 65 6e 20 61 20 6b 65 79 2c 20 72 61 74 68 65  pen a key, rathe
cb80: 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67 20  r than creating 
cb90: 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20 20 20 20  one when..      
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
cbb0: 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67         operating
cbc0: 20 69 6e 20 22 77 68 61 74 2d 69 66 22 20 6d 6f   in "what-if" mo
cbd0: 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de...           
cbe0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20   if (whatIf)..  
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
cc40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cc50: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
cc60: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65  : Attempt to ope
cc70: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
cc80: 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d 0a 20 20  sub-key.  If..  
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
ccb0: 68 69 73 20 66 61 69 6c 73 2c 20 77 65 20 77 69  his fails, we wi
ccc0: 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e  ll simply return
ccd0: 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20 20 20 20   the root..     
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20     //       key 
cd00: 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20  itself since no 
cd10: 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77  writes are allow
cd20: 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20  ed in..         
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cd40: 2f 20 20 20 20 20 20 20 22 77 68 61 74 2d 69 66  /       "what-if
cd50: 22 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a  " mode anyhow...
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
cda0: 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65  Key key = rootKe
cdb0: 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62  y.OpenSubKey(sub
cdc0: 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  KeyName);....   
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79       return (key
cdf0: 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
ce00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce10: 20 20 20 20 20 20 20 20 20 6b 65 79 20 3a 20 6e           key : n
ce20: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
ce30: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 73 75       rootKey, su
ce60: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
ce70: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b  , false, false);
ce80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ce90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
ceb0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
cec0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cee0: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63    return new Moc
cef0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
cf20: 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey.CreateSubKey(
cf30: 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61  subKeyName), wha
cf40: 74 49 66 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20  tIf, false,..   
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf60: 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b           false);
cf70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
cf90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61              fina
cfb0: 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
cfc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
cfe0: 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20  eysCreated++;.. 
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d060: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d070: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d080: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d090: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d0a0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d0b0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c   static void Del
d0c0: 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
d0e0: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
d0f0: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
d100: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
d110: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
d120: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
d130: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
d140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d150: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d170: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
d180: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d190: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d1b0: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
d1c0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d1d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
d1e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d1f0: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
d200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d210: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
d220: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
d230: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
d240: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
d250: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d260: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d270: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d280: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d    "rootKey = {0}
d2b0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b  , subKeyName = {
d2c0: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
d2e0: 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
d2f0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75  ), ForDisplay(su
d300: 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  bKeyName)),..   
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d320: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
d330: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
d340: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
d350: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
d360: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
d370: 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 73  y.DeleteSubKey(s
d380: 75 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77  ubKeyName, throw
d390: 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20  OnMissing);.... 
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d3b0: 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b  ubKeysDeleted++;
d3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
d3d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
d3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d420: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
d430: 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
d440: 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
d450: 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
d460: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
d470: 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c   static void Del
d480: 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
d4b0: 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
d4c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d4d0: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d4f0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
d500: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
d510: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
d520: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
d530: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d540: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d550: 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  rootKey == null)
d560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d570: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
d580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d590: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5b0: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
d5c0: 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
d5d0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
d5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d5f0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d600: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d610: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d620: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d640: 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20  "rootKey = {0}, 
d650: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d  subKeyName = {1}
d660: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
d670: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
d680: 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c  isplay(rootKey),
d690: 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b   ForDisplay(subK
d6a0: 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  eyName)),..     
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
d6d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
d6e0: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
d6f0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
d700: 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e          rootKey.
d710: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
d720: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  (subKeyName);...
d730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d740: 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b   subKeysDeleted+
d750: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
d760: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
d770: 20 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 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d7c0: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
d7d0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
d7e0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
d800: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
d810: 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  [] GetSubKeyName
d820: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
d830: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
d840: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
d850: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
d860: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
d870: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
d880: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
d890: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
d8a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d8b0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
d8c0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
d8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d8e0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d900: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d920: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
d930: 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
d940: 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20 20  rity.High,..    
d950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d960: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
d970: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
d980: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9a0: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
d9b0: 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
d9c0: 79 28 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61  y(key)), traceCa
d9d0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
d9e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d9f0: 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79  rn key.GetSubKey
da00: 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  Names();..      
da10: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
da20: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
da30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
da60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
da70: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
da80: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
da90: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
daa0: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
dab0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
dac0: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
dad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dae0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
daf0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
db00: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
db10: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
db20: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66        object def
db30: 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20  aultValue,..    
db40: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
db50: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
db60: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
db70: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
db80: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
db90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
dba0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
dbb0: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc10: 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
dc20: 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
dc30: 69 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20  iority.High,..  
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc50: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
dc60: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
dc70: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
dc80: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
dca0: 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b   = {0}, name = {
dcb0: 31 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  1}, defaultValue
dcc0: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
dcf0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
dd00: 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
dd20: 72 44 69 73 70 6c 61 79 28 64 65 66 61 75 6c 74  rDisplay(default
dd30: 56 61 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61  Value)), traceCa
dd40: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
dd60: 63 74 20 76 61 6c 75 65 20 3d 20 6b 65 79 2e 47  ct value = key.G
dd70: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65  etValue(name, de
dd80: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 0d 0a  faultValue);....
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 6b 65 79 56 61 6c 75 65 73 52 65 61 64 2b 2b 3b  keyValuesRead++;
ddb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ddc0: 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
ddd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
dde0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ddf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
de30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
de40: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
de50: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
de60: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
de70: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
de80: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 53 65  c static void Se
de90: 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
dea0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
deb0: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ded0: 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
def0: 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20  ect value,..    
df00: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
df10: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
df20: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
df30: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
df40: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
df50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
df60: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
df70: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
dfa0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
dfb0: 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
dfd0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
dfe0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
dff0: 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e010: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
e020: 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
e030: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
e040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e050: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
e060: 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d   {0}, name = {1}
e070: 2c 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d  , value = {2}",.
e080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e090: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
e0a0: 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73  lay(key), ForDis
e0b0: 70 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44  play(name), ForD
e0c0: 69 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c 0d  isplay(value)),.
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e0e0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
e0f0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
e100: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e110: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
e130: 79 2e 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c  y.SetValue(name,
e140: 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20   value);....    
e150: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
e160: 61 6c 75 65 73 57 72 69 74 74 65 6e 2b 2b 3b 0d  aluesWritten++;.
e170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
e1e0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
e1f0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
e200: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
e210: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
e220: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65  static void Dele
e230: 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  teValue(..      
e240: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
e250: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
e290: 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
e2a0: 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
e2b0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
e2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e2d0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e310: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
e320: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
e330: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
e340: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e350: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
e360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e370: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
e380: 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
e390: 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
e3a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
e3b0: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
e3c0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
e3d0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
e3e0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
e410: 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69  me = {1}", ForDi
e420: 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20 20  splay(key),..   
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e440: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
e450: 6e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  name)), traceCat
e460: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
e470: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
e480: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
e4a0: 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d  .DeleteValue(nam
e4b0: 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  e, throwOnMissin
e4c0: 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  g);....         
e4d0: 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73         keyValues
e4e0: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
e4f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e500: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e510: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
e520: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e530: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e580: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e590: 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 4c 69 73  region StringLis
e5a0: 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  t Class..       
e5b0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
e5c0: 63 6c 61 73 73 20 53 74 72 69 6e 67 4c 69 73 74  class StringList
e5d0: 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 0d   : List<string>.
e5e0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e5f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
e600: 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a 20 20 20  tringList()..   
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
e620: 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ase()..         
e630: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e640: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
e650: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
e660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
e670: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
e680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e6b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e6c0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
e6d0: 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d 65 72 61  ingList(IEnumera
e6e0: 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63 6f 6c 6c  ble<string> coll
e6f0: 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
e700: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
e710: 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
e720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e740: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e750: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e760: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
e770: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
e780: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e7d0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53         #region S
e7e0: 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20  tringDictionary 
e7f0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
e800: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
e810: 61 73 73 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ass StringDictio
e820: 6e 61 72 79 20 3a 20 44 69 63 74 69 6f 6e 61 72  nary : Dictionar
e830: 79 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e 67  y<string, string
e840: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
e850: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
e860: 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72   StringDictionar
e870: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
e880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e890: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
e8a0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
e8b0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
e8c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
e8d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e920: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
e930: 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69  region VersionLi
e940: 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
e950: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
e960: 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4c 69   class VersionLi
e970: 73 74 20 3a 20 4c 69 73 74 3c 56 65 72 73 69 6f  st : List<Versio
e980: 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  n>..        {.. 
e990: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e9a0: 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 0d  c VersionList().
e9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e9c0: 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20   : base()..     
e9d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e9e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
e9f0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
ea00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
ea10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ea60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ea70: 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 49 45 6e   VersionList(IEn
ea80: 75 6d 65 72 61 62 6c 65 3c 56 65 72 73 69 6f 6e  umerable<Version
ea90: 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  > collection).. 
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
eab0: 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e   base(collection
eac0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
ead0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eae0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
eaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
eb00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
eb10: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
eb20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
eb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb70: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
eb80: 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d 61 70 20  gion VersionMap 
eb90: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
eba0: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
ebb0: 61 73 73 20 56 65 72 73 69 6f 6e 4d 61 70 20 3a  ass VersionMap :
ebc0: 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69   Dictionary<stri
ebd0: 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69 73 74 3e  ng, VersionList>
ebe0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
ebf0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ec00: 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d 0a 20 20  VersionMap()..  
ec10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ec30: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
ec40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ec50: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
ec60: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
ec70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ec80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ecc0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ecd0: 50 61 63 6b 61 67 65 20 43 6c 61 73 73 0d 0a 20  Package Class.. 
ece0: 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20         internal 
ecf0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 50 61 63  sealed class Pac
ed00: 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  kage..        {.
ed10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
ed20: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
ed30: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
ed40: 20 20 20 20 20 20 70 75 62 6c 69 63 20 50 61 63        public Pac
ed50: 6b 61 67 65 28 29 0d 0a 20 20 20 20 20 20 20 20  kage()..        
ed60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ed70: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
ed80: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
ed90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
eda0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
edc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ede0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
ee00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
ee10: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
ee20: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
ee30: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
ee40: 72 69 6e 67 20 70 72 6f 76 69 64 65 72 49 6e 76  ring providerInv
ee50: 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20  ariantName;..   
ee60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
ee70: 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 49  string ProviderI
ee80: 6e 76 61 72 69 61 6e 74 4e 61 6d 65 0d 0a 20 20  nvariantName..  
ee90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
eeb0: 20 7b 20 72 65 74 75 72 6e 20 70 72 6f 76 69 64   { return provid
eec0: 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b  erInvariantName;
eed0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
eee0: 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64      set { provid
eef0: 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20  erInvariantName 
ef00: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
ef10: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ef20: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ef30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
ef80: 61 74 65 20 73 74 72 69 6e 67 20 66 61 63 74 6f  ate string facto
ef90: 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20  ryTypeName;..   
efa0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
efb0: 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79  string FactoryTy
efc0: 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  peName..        
efd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
efe0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
eff0: 75 72 6e 20 66 61 63 74 6f 72 79 54 79 70 65 4e  urn factoryTypeN
f000: 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
f010: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 66 61          set { fa
f020: 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20  ctoryTypeName = 
f030: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
f040: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f050: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
f0a0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f0b0: 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 70  e AssemblyName p
f0c0: 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
f0d0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f0e0: 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
f0f0: 79 4e 61 6d 65 20 50 72 6f 76 69 64 65 72 41 73  yName ProviderAs
f100: 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20 20  semblyName..    
f110: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f120: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
f130: 20 72 65 74 75 72 6e 20 70 72 6f 76 69 64 65 72   return provider
f140: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d 0d  AssemblyName; }.
f150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f160: 20 73 65 74 20 7b 20 70 72 6f 76 69 64 65 72 41   set { providerA
f170: 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76 61  ssemblyName = va
f180: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
f190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f1a0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
f1f0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f200: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73  AssemblyName des
f210: 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
f220: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
f230: 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
f240: 61 6d 65 20 44 65 73 69 67 6e 65 72 41 73 73 65  ame DesignerAsse
f250: 6d 62 6c 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20  mblyName..      
f260: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f270: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
f280: 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 41 73  eturn designerAs
f290: 73 65 6d 62 6c 79 4e 61 6d 65 3b 20 7d 0d 0a 20  semblyName; }.. 
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f2b0: 65 74 20 7b 20 64 65 73 69 67 6e 65 72 41 73 73  et { designerAss
f2c0: 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 76 61 6c 75  emblyName = valu
f2d0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
f2e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
f2f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
f300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f330: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
f340: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
f350: 6f 6c 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ol globalAssembl
f360: 79 43 61 63 68 65 3b 0d 0a 20 20 20 20 20 20 20  yCache;..       
f370: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
f380: 20 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43   GlobalAssemblyC
f390: 61 63 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ache..          
f3a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f3b0: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
f3c0: 6e 20 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  n globalAssembly
f3d0: 43 61 63 68 65 3b 20 7d 0d 0a 20 20 20 20 20 20  Cache; }..      
f3e0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
f3f0: 67 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  globalAssemblyCa
f400: 63 68 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  che = value; }..
f410: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
f430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f480: 70 72 69 76 61 74 65 20 47 75 69 64 20 70 61 63  private Guid pac
f490: 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  kageId;..       
f4a0: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
f4b0: 20 50 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20   PackageId..    
f4c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f4d0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
f4e0: 20 72 65 74 75 72 6e 20 70 61 63 6b 61 67 65 49   return packageI
f4f0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
f500: 20 20 20 20 20 20 73 65 74 20 7b 20 70 61 63 6b        set { pack
f510: 61 67 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ageId = value; }
f520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
f530: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
f540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f580: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f590: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 73    private Guid s
f5a0: 65 72 76 69 63 65 49 64 3b 0d 0a 20 20 20 20 20  erviceId;..     
f5b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75         public Gu
f5c0: 69 64 20 53 65 72 76 69 63 65 49 64 0d 0a 20 20  id ServiceId..  
f5d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
f5f0: 20 7b 20 72 65 74 75 72 6e 20 73 65 72 76 69 63   { return servic
f600: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
f610: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 73 65          set { se
f620: 72 76 69 63 65 49 64 20 3d 20 76 61 6c 75 65 3b  rviceId = value;
f630: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f640: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
f650: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f690: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
f6a0: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
f6b0: 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 0d 0a   dataSourceId;..
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f6d0: 69 63 20 47 75 69 64 20 44 61 74 61 53 6f 75 72  ic Guid DataSour
f6e0: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
f6f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f700: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
f710: 6e 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 20  n dataSourceId; 
f720: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f730: 20 20 20 73 65 74 20 7b 20 64 61 74 61 53 6f 75     set { dataSou
f740: 72 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  rceId = value; }
f750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
f760: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
f770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
f7c0: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 64    private Guid d
f7d0: 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a  ataProviderId;..
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f7f0: 69 63 20 47 75 69 64 20 44 61 74 61 50 72 6f 76  ic Guid DataProv
f800: 69 64 65 72 49 64 0d 0a 20 20 20 20 20 20 20 20  iderId..        
f810: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f820: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
f830: 75 72 6e 20 64 61 74 61 50 72 6f 76 69 64 65 72  urn dataProvider
f840: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
f850: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
f860: 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 76 61  aProviderId = va
f870: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
f880: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f890: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
f8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f8d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f8e0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
f8f0: 47 75 69 64 20 61 64 6f 4e 65 74 54 65 63 68 6e  Guid adoNetTechn
f900: 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20  ologyId;..      
f910: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
f920: 64 20 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  d AdoNetTechnolo
f930: 67 79 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  gyId..          
f940: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f950: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
f960: 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  n adoNetTechnolo
f970: 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  gyId; }..       
f980: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61           set { a
f990: 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
f9a0: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
f9b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f9c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
f9d0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
f9e0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
f9f0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fa50: 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75   #region Configu
fa60: 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20  ration Class..  
fa70: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
fa80: 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e 66 69  aled class Confi
fa90: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  guration..      
faa0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fab0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
fac0: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
fad0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
fae0: 63 6f 6e 73 74 20 63 68 61 72 20 53 77 69 74 63  const char Switc
faf0: 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20  h = '-';..      
fb00: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
fb10: 6e 73 74 20 63 68 61 72 20 41 6c 74 53 77 69 74  nst char AltSwit
fb20: 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20  ch = '/';....   
fb30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fb90: 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
fba0: 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77 69 74 63  nly char[] Switc
fbb0: 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20  hChars = {..    
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 77 69 74              Swit
fbd0: 63 68 2c 20 41 6c 74 53 77 69 74 63 68 0d 0a 20  ch, AltSwitch.. 
fbe0: 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
fbf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
fc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fc40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc50: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
fc60: 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61  ring InvariantNa
fc70: 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
fc80: 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  a.SQLite";..    
fc90: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
fca0: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36  const string Ef6
fcb0: 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20  InvariantName = 
fcc0: 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
fcd0: 69 74 65 2e 45 46 36 22 3b 0d 0a 0d 0a 20 20 20  ite.EF6";....   
fce0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fd40: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
fd50: 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
fd60: 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
fd70: 20 20 20 20 22 53 79 73 74 65 6d 2e 44 61 74 61      "System.Data
fd80: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 61  .SQLite.SQLiteFa
fd90: 63 74 6f 72 79 22 3b 0d 0a 0d 0a 20 20 20 20 20  ctory";....     
fda0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
fdb0: 6f 6e 73 74 20 73 74 72 69 6e 67 20 45 66 36 46  onst string Ef6F
fdc0: 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d  actoryTypeName =
fdd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fde0: 20 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53    "System.Data.S
fdf0: 51 4c 69 74 65 2e 45 46 36 2e 53 51 4c 69 74 65  QLite.EF6.SQLite
fe00: 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 22  ProviderFactory"
fe10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
fe20: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
fe30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
fe90: 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
fea0: 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  ic Data..       
feb0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
fec0: 74 69 63 20 41 73 73 65 6d 62 6c 79 20 73 79 73  tic Assembly sys
fed0: 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 3b 0d  temEf6Assembly;.
fee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
fef0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ff00: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
ff10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ff40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ff50: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
ff60: 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a  n Private Data..
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
ff80: 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
ff90: 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d   coreAssemblyNam
ffa0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ffb0: 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
ffc0: 4e 61 6d 65 20 6c 69 6e 71 41 73 73 65 6d 62 6c  Name linqAssembl
ffd0: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
ffe0: 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65      private Asse
fff0: 6d 62 6c 79 4e 61 6d 65 20 65 66 36 41 73 73 65  mblyName ef6Asse
10000 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
10010 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41         private A
10020 73 73 65 6d 62 6c 79 4e 61 6d 65 20 64 65 73 69  ssemblyName desi
10030 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  gnerAssemblyName
10040 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
10050 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
10060 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
10070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
100a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
100b0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
100c0 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
100d0 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
100e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43 6f        private Co
100f0 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
10110 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c  sembly assembly,
10120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10130 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65    string logFile
10140 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
10150 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
10160 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
10170 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10180 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a   coreFileName,..
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
101b0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
101c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 66 36        string ef6
101d0 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
101e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
101f0 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
10200 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
10210 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 67 69       string regi
10220 73 74 72 79 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  stryVersion,..  
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10240 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69  ring configVersi
10250 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
10260 20 20 20 20 20 73 74 72 69 6e 67 20 76 73 56 65       string vsVe
10270 72 73 69 6f 6e 53 75 66 66 69 78 2c 0d 0a 20 20  rsionSuffix,..  
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10290 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74  ring debugFormat
102a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
102b0 20 20 20 73 74 72 69 6e 67 20 74 72 61 63 65 46     string traceF
102c0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
102d0 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
102e0 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67  lags installFlag
102f0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
10300 20 20 20 20 50 72 6f 76 69 64 65 72 46 6c 61 67      ProviderFlag
10310 73 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 2c  s providerFlags,
10320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10330 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
10340 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a  debugPriority,..
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
10370 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10390 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
103b0 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20  l install,..    
103c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
103d0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
103e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
103f0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d  RuntimeVersion,.
10400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10410 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c   bool noDesktop,
10420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10430 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74    bool noCompact
10440 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10450 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32     bool noNetFx2
10460 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
10470 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78      bool noNetFx
10480 33 35 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  35,..           
10490 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46       bool noNetF
104a0 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x40,..          
104b0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74        bool noNet
104c0 46 78 34 35 2c 0d 0a 20 20 20 20 20 20 20 20 20  Fx45,..         
104d0 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
104e0 74 46 78 34 35 31 2c 0d 0a 20 20 20 20 20 20 20  tFx451,..       
104f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
10500 56 73 32 30 30 35 2c 0d 0a 20 20 20 20 20 20 20  Vs2005,..       
10510 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
10520 56 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20  Vs2008,..       
10530 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
10540 56 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20  Vs2010,..       
10550 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
10560 56 73 32 30 31 32 2c 0d 0a 20 20 20 20 20 20 20  Vs2012,..       
10570 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
10580 56 73 32 30 31 33 2c 0d 0a 20 20 20 20 20 20 20  Vs2013,..       
10590 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
105a0 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  Trace,..        
105b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
105c0 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20  onsole,..       
105d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
105e0 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Log,..          
105f0 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
10600 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
10610 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10620 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
10630 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
10640 65 62 75 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  ebug,..         
10650 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
10660 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
10670 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69        bool confi
10680 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
10690 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
106a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
106b0 20 20 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d        this.assem
106c0 62 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d  bly = assembly;.
106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
106e0 20 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d   this.logFileNam
106f0 65 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b  e = logFileName;
10700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10710 20 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79    this.directory
10720 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
10730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10740 68 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  his.coreFileName
10750 20 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b   = coreFileName;
10760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10770 20 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e    this.linqFileN
10780 61 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61  ame = linqFileNa
10790 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
107a0 20 20 20 20 20 74 68 69 73 2e 65 66 36 46 69 6c       this.ef6Fil
107b0 65 4e 61 6d 65 20 3d 20 65 66 36 46 69 6c 65 4e  eName = ef6FileN
107c0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
107d0 20 20 20 20 20 20 74 68 69 73 2e 64 65 73 69 67        this.desig
107e0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65  nerFileName = de
107f0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
10800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10810 20 74 68 69 73 2e 72 65 67 69 73 74 72 79 56 65   this.registryVe
10820 72 73 69 6f 6e 20 3d 20 72 65 67 69 73 74 72 79  rsion = registry
10830 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
10840 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63            this.c
10850 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 63  onfigVersion = c
10860 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d 0a 20  onfigVersion;.. 
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10880 68 69 73 2e 76 73 56 65 72 73 69 6f 6e 53 75 66  his.vsVersionSuf
10890 66 69 78 20 3d 20 76 73 56 65 72 73 69 6f 6e 53  fix = vsVersionS
108a0 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20 20  uffix;..        
108b0 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65 62          this.deb
108c0 75 67 46 6f 72 6d 61 74 20 3d 20 64 65 62 75 67  ugFormat = debug
108d0 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
108e0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
108f0 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63  aceFormat = trac
10900 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
10910 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 69            this.i
10920 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e  nstallFlags = in
10930 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20  stallFlags;..   
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10950 73 2e 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20  s.providerFlags 
10960 3d 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b  = providerFlags;
10970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10980 20 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f    this.debugPrio
10990 72 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f  rity = debugPrio
109a0 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
109b0 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
109c0 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63  ePriority = trac
109d0 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
109e0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
109f0 2e 70 65 72 55 73 65 72 20 3d 20 70 65 72 55 73  .perUser = perUs
10a00 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
10a10 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
10a20 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20  l = install;..  
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10a40 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77 36 34  is.wow64 = wow64
10a50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10a60 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74 69 6d     this.noRuntim
10a70 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52 75 6e  eVersion = noRun
10a80 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  timeVersion;..  
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10aa0 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 6e  is.noDesktop = n
10ab0 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20  oDesktop;..     
10ac0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10ad0 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f 43 6f  noCompact = noCo
10ae0 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20  mpact;..        
10af0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
10b00 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx20 = noNetFx
10b10 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
10b20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
10b30 78 33 35 20 3d 20 6e 6f 4e 65 74 46 78 33 35 3b  x35 = noNetFx35;
10b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b50 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30    this.noNetFx40
10b60 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20   = noNetFx40;.. 
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10b80 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20  his.noNetFx45 = 
10b90 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20 20 20  noNetFx45;..    
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10bb0 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20 6e 6f  .noNetFx451 = no
10bc0 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20  NetFx451;..     
10bd0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10be0 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f 56 73 32  noVs2005 = noVs2
10bf0 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  005;..          
10c00 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32        this.noVs2
10c10 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d  008 = noVs2008;.
10c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c30 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d   this.noVs2010 =
10c40 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20   noVs2010;..    
10c50 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10c60 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e 6f 56 73  .noVs2012 = noVs
10c70 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20 20  2012;..         
10c80 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
10c90 32 30 31 33 20 3d 20 6e 6f 56 73 32 30 31 33 3b  2013 = noVs2013;
10ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10cb0 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d    this.noTrace =
10cc0 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
10cd0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10ce0 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f  noConsole = noCo
10cf0 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
10d00 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c          this.noL
10d10 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  og = noLog;..   
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10d30 73 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  s.throwOnMissing
10d40 20 3d 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e   = throwOnMissin
10d50 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
10d60 20 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20      this.whatIf 
10d70 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  = whatIf;..     
10d80 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10d90 64 65 62 75 67 20 3d 20 64 65 62 75 67 3b 0d 0a  debug = debug;..
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 74 68 69 73 2e 76 65 72 62 6f 73 65 20 3d 20 76  this.verbose = v
10dc0 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  erbose;..       
10dd0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f           this.co
10de0 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b  nfirm = confirm;
10df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
10e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
10e10 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
10e20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
10e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
10e70 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
10e80 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63  n Private Static
10e90 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
10ea0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
10eb0 61 74 69 63 20 76 6f 69 64 20 47 65 74 44 65 66  atic void GetDef
10ec0 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ee0 72 65 66 20 73 74 72 69 6e 67 20 64 69 72 65 63  ref string direc
10ef0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
10f00 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
10f10 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
10f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f30 20 72 65 66 20 73 74 72 69 6e 67 20 6c 69 6e 71   ref string linq
10f40 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
10f50 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
10f60 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d  tring ef6FileNam
10f70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
10f80 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
10f90 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d  esignerFileName.
10fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10fb0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
10fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10fd0 20 20 20 69 66 20 28 74 68 69 73 41 73 73 65 6d     if (thisAssem
10fe0 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly == null)..  
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
11020 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65  ectory = Path.Ge
11030 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 74  tDirectoryName(t
11040 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61  hisAssembly.Loca
11050 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tion);....      
11060 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
11070 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11080 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ty(directory))..
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
110c0 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
110d0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
110e0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
110f0 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
11100 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  ller.CoreFileNam
11110 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
11120 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
11130 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
11140 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11160 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e     Installer.Lin
11170 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  qFileName);.... 
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
11190 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  f6FileName = Pat
111a0 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
111b0 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
111c0 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
111d0 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65 29  ler.Ef6FileName)
111e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
111f0 20 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
11200 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
11210 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
11220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11230 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44       Installer.D
11240 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
11250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
11260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
112b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
112c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
112d0 63 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69  c bool CheckOpti
112e0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
112f0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
11300 61 72 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  arg..           
11310 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
11320 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11330 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65         string re
11340 73 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  sult = arg;.... 
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11360 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
11370 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29  lOrEmpty(result)
11380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11390 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
113a0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76    // NOTE: Remov
113d0 65 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77  e all leading sw
113e0 69 74 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20  itch chars...   
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11400 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11410 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
11420 3d 20 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61  = result.TrimSta
11430 72 74 28 53 77 69 74 63 68 43 68 61 72 73 29 3b  rt(SwitchChars);
11440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11450 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e  // NOTE: How man
11480 79 20 63 68 61 72 73 20 77 65 72 65 20 72 65 6d  y chars were rem
11490 6f 76 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20  oved?..         
114a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61     int count = a
114d0 72 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75  rg.Length - resu
114e0 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  lt.Length;....  
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11500 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11510 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11520 45 3a 20 57 61 73 20 74 68 65 72 65 20 61 74 20  E: Was there at 
11530 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20  least one?..    
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11560 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e          if (coun
11570 74 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  t > 0)..        
11580 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20     // NOTE: Ok, 
115d0 72 65 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72  replace their or
115e0 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20  iginal..        
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11600 2f 2f 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e  //       argumen
11610 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
11620 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 20 20 20 20 20 20 20 20 61 72 67 20 3d 20 72 65          arg = re
11650 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sult;....       
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11690 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20  NOTE: Yes, this 
116a0 69 73 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20  is a switch...  
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11710 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11720 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
11730 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
11740 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11750 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
117a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
117b0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d  te static bool M
117c0 61 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  atchOption(..   
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
117e0 69 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20  ing arg,..      
117f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11800 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
11810 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
11820 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11830 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
11840 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  arg == null) || 
11850 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  (option == null)
11860 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11870 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11880 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
11890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
118a0 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72  tring.Compare(ar
118b0 67 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c  g, 0, option, 0,
118c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118d0 20 20 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68        arg.Length
118e0 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
118f0 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
11900 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20  Case) == 0;..   
11910 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11920 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11970 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
11980 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
11990 3f 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d  ? ParseBoolean(.
119a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119b0 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20   string text..  
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
119d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
11a00 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
11a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11a30 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61           bool va
11a40 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
11a50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11a60 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65  bool.TryParse(te
11a70 78 74 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d  xt, out value)).
11a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11aa0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
11ab0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11ad0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
11ae0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
11af0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
11b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11b40 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
11b50 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74  te static object
11b60 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20   ParseEnum(..   
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70               Typ
11b80 65 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20  e enumType,..   
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
11ba0 69 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20  ing text,..     
11bb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
11bc0 6e 6f 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20  noCase..        
11bd0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
11be0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11bf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 65            if ((e
11c00 6e 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29  numType == null)
11c10 20 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73   || !enumType.Is
11c20 45 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  Enum)..         
11c30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11c40 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
11c50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
11c60 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
11c70 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20  mpty(text))..   
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 45          return E
11ce0 6e 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79  num.Parse(enumTy
11cf0 70 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65  pe, text, noCase
11d00 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
11d10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11d30 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
11d40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d60 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
11d70 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
11d80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
11d90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11db0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
11dc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11e30 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
11e40 6f 6c 20 49 73 53 79 73 74 65 6d 45 66 36 41 73  ol IsSystemEf6As
11e50 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 28  semblyAvailable(
11e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11e70 20 20 62 6f 6f 6c 20 74 72 61 63 65 0d 0a 20 20    bool trace..  
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
11e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11eb0 69 66 20 28 73 79 73 74 65 6d 45 66 36 41 73 73  if (systemEf6Ass
11ec0 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  embly != null)..
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11f00 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
11f10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f30 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  systemEf6Assembl
11f40 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65 66  y = Assembly.Ref
11f50 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 28  lectionOnlyLoad(
11f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f70 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
11f80 45 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 29  Ef6AssemblyName)
11f90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11fa0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
11fb0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 21  temEf6Assembly !
11fc0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ff0 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
12000 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
12010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12030 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12040 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12050 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
12060 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
12090 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
120a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
120b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79 20          "Entity 
120e0 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73 65  Framework 6 asse
120f0 6d 62 6c 79 20 77 61 73 20 22 20 2b 0d 0a 20 20  mbly was " +..  
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
12120 65 73 6f 6c 76 65 64 20 74 6f 20 7b 30 7d 2e 22  esolved to {0}."
12130 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12160 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
12170 2e 4c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20  .Location)),..  
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
121a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
121f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12200 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12210 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
12220 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
12230 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
12240 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12250 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
12260 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
12270 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12290 66 20 28 74 72 61 63 65 29 0d 0a 20 20 20 20 20  f (trace)..     
122a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
122d0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
122e0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
122f0 0a 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 64 65 62 75 67 43 61           debugCa
12310 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
12320 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
12330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12340 22 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f 72  "Entity Framewor
12350 6b 20 36 20 61 73 73 65 6d 62 6c 79 20 77 61 73  k 6 assembly was
12360 20 6e 6f 74 20 72 65 73 6f 6c 76 65 64 2e 22 2c   not resolved.",
12370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12380 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12390 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
123a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
123d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
123e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
123f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
12430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
12440 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
12450 6f 6c 20 49 73 53 79 73 74 65 6d 45 66 36 41 73  ol IsSystemEf6As
12460 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 0d 0a  semblyGlobal()..
12470 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12490 66 20 28 73 79 73 74 65 6d 45 66 36 41 73 73 65  f (systemEf6Asse
124a0 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
124d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
124e0 20 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65      return syste
124f0 6d 45 66 36 41 73 73 65 6d 62 6c 79 2e 47 6c 6f  mEf6Assembly.Glo
12500 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
12510 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
12520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
12530 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
12540 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
12590 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
125a0 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63  on Public Static
125b0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
125c0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
125d0 74 69 63 20 76 6f 69 64 20 42 72 65 61 6b 49 6e  tic void BreakIn
125e0 74 6f 44 65 62 75 67 67 65 72 28 29 0d 0a 20 20  toDebugger()..  
125f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
12610 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 0d  sole.WriteLine(.
12620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12630 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64       "Attach a d
12640 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65  ebugger to proce
12650 73 73 20 7b 30 7d 20 61 6e 64 20 70 72 65 73 73  ss {0} and press
12660 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
12670 20 20 20 20 20 20 20 20 20 20 22 61 6e 79 20 6b            "any k
12680 65 79 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 22  ey to continue."
12690 2c 20 28 74 68 69 73 50 72 6f 63 65 73 73 20 21  , (thisProcess !
126a0 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
126c0 68 69 73 50 72 6f 63 65 73 73 2e 49 64 2e 54 6f  hisProcess.Id.To
126d0 53 74 72 69 6e 67 28 29 20 3a 20 22 3c 75 6e 6b  String() : "<unk
126e0 6e 6f 77 6e 3e 22 29 3b 0d 0a 0d 0a 20 20 20 20  nown>");....    
126f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
12700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12720 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e          Console.
12730 52 65 61 64 4b 65 79 28 74 72 75 65 29 3b 20 2f  ReadKey(true); /
12740 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
12750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12770 61 74 63 68 20 28 49 6e 76 61 6c 69 64 4f 70 65  atch (InvalidOpe
12780 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 29  rationException)
12790 20 2f 2f 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64   // Console.Read
127a0 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
127b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
127c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
127d0 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
127e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
127f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12800 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b 28   Debugger.Break(
12810 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
12820 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12830 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12870 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
12880 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
12890 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c Configuration 
128a0 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29 0d  CreateDefault().
128b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
128e0 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
128f0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12900 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
12910 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
12920 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
12930 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c  nqFileName = nul
12940 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
12950 20 20 20 20 73 74 72 69 6e 67 20 65 66 36 46 69      string ef6Fi
12960 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
12990 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
129a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
129b0 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c     GetDefaultFil
129c0 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
129e0 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20   directory, ref 
129f0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65  coreFileName, re
12a00 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  f linqFileName,.
12a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a20 20 20 20 20 20 72 65 66 20 65 66 36 46 69 6c 65       ref ef6File
12a30 4e 61 6d 65 2c 20 72 65 66 20 64 65 73 69 67 6e  Name, ref design
12a40 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  erFileName);....
12a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a60 72 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69  return new Confi
12a70 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20  guration(..     
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12a90 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
12aa0 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  l, directory, co
12ab0 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71  reFileName, linq
12ac0 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12ae0 66 36 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73 69  f6FileName, desi
12af0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 6e 75  gnerFileName, nu
12b00 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  ll, null, null,.
12b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
12b30 62 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65  bugFormat, Trace
12b40 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
12b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b60 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
12b70 67 73 2e 44 65 66 61 75 6c 74 2c 20 50 72 6f 76  gs.Default, Prov
12b80 69 64 65 72 46 6c 61 67 73 2e 44 65 66 61 75 6c  iderFlags.Defaul
12b90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
12ba0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12bb0 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 54  ority.Default, T
12bc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
12bd0 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74 72 75  ault, false, tru
12be0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12bf0 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66          false, f
12c00 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
12c10 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12c20 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d  , false, false,.
12c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12c40 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
12c50 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12c60 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12c70 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  alse, false,..  
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74    false, true, t
12ca0 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
12cb0 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
12cc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
12cd0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
12ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
12d20 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
12d30 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
12d40 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
12d50 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
12d60 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
12d70 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73 28  c bool FromArgs(
12d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12d90 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c    string[] args,
12da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12db0 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dd0 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ref Configuratio
12de0 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
12df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12e00 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
12e10 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
12e20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
12e30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12e40 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
12e50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e 75    if (args == nu
12e80 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
12ea0 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ec0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
12ed0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
12f00 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74 69  on = Configurati
12f10 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c 74  on.CreateDefault
12f20 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12f30 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
12f40 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65 6e  ength = args.Len
12f50 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
12f60 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
12f70 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
12f80 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
12f90 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12fc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
12fd0 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  arg = args[index
12fe0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13010 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
13020 45 3a 20 53 6b 69 70 20 61 6e 79 20 61 72 67 75  E: Skip any argu
13030 6d 65 6e 74 20 74 68 61 74 20 69 73 20 6e 75 6c  ment that is nul
13040 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d 70 74  l (?) or an empt
13050 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
13060 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
13070 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...   
13080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13090 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
130c0 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d  llOrEmpty(arg)).
130d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
130f0 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13110 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13130 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20 67 6f   NOTE: We are go
13140 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  ing to modify th
13150 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67 75 6d  e original argum
13160 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13180 20 20 20 20 20 20 62 79 20 72 65 6d 6f 76 69 6e        by removin
13190 67 20 61 6e 79 20 6c 65 61 64 69 6e 67 20 6f 70  g any leading op
131a0 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72 73 3b  tion characters;
131b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
131c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
131d0 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 77 65     therefore, we
131e0 20 75 73 65 20 61 20 6e 65 77 20 73 74 72 69 6e   use a new strin
131f0 67 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d 0a 20  g to hold the.. 
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13210 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13220 6d 6f 64 69 66 69 65 64 20 61 72 67 75 6d 65 6e  modified argumen
13230 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
13240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13260 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
13270 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a  ewArg = arg;....
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132b0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c      // NOTE: All
132c0 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 63   the supported c
132d0 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69  ommand line opti
132e0 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20  ons must..      
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 20 2f 2f 20 20 20 20 20 20 20 62 65 67 69 6e    //       begin
13310 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f 6e 20   with an option 
13320 63 68 61 72 61 63 74 65 72 20 28 65 2e 67 2e 20  character (e.g. 
13330 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20 20 20  a minus..       
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 2f 2f 20 20 20 20 20 20 20 6f 72 20 66 6f 72   //       or for
13360 77 61 72 64 20 73 6c 61 73 68 29 3b 20 61 74 74  ward slash); att
13370 65 6d 70 74 20 74 6f 20 76 61 6c 69 64 61 74 65  empt to validate
13380 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20   that..         
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
133a0 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 49 66  /       now.  If
133b0 20 77 65 20 66 61 69 6c 20 69 6e 20 73 74 72 69   we fail in stri
133c0 63 74 20 6d 6f 64 65 2c 20 77 65 20 61 72 65 20  ct mode, we are 
133d0 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  done;..         
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
133f0 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  /       otherwis
13400 65 2c 20 6a 75 73 74 20 73 6b 69 70 20 74 68 69  e, just skip thi
13410 73 20 61 72 67 75 6d 65 6e 74 20 61 6e 64 20 61  s argument and a
13420 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20 20 20  dvance..        
13430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13440 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68 65 20  //       to the 
13450 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20 20 20  next one...     
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13490 66 20 28 21 43 68 65 63 6b 4f 70 74 69 6f 6e 28  f (!CheckOption(
134a0 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20  ref newArg))..  
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
134f0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
13500 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
13530 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
13540 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13560 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
13570 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
13580 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 73 75             "Unsu
135b0 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
135c0 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b  line argument: {
135d0 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
13600 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74  (arg)), traceCat
13610 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
13640 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13660 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
13670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
136f0 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
13700 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
13710 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
13720 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
13730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
13740 20 20 20 20 68 61 76 65 20 61 20 76 61 6c 75 65      have a value
13750 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74 74  ; therefore, att
13760 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65 0d  empt to advance.
13770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13780 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13790 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66    to it now.  If
137a0 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65   we fail, we are
137b0 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20   done...        
137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
137e0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
137f0 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13810 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65 6e  if (index >= len
13820 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20  gth)..          
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
13860 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
13870 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
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 20 20 54 72                Tr
138a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
138b0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
138c0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
138f0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
13900 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
13930 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
13940 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
13950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13960 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
13970 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
13980 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
13990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139a0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
139b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
139e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a50 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
13a60 3a 20 47 72 61 62 20 74 68 65 20 74 65 78 74 75  : Grab the textu
13a70 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  al value of this
13a80 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13aa0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
13ab0 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
13af0 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73 5b  ing text = args[
13b00 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13b40 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
13b50 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
13b60 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
13b70 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
13b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13b90 20 20 20 20 20 20 20 28 62 61 73 65 64 20 6f 6e         (based on
13ba0 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d 65 20   a partial name 
13bb0 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65 6e 20  match) and then 
13bc0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13be0 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70 72        to interpr
13bf0 65 74 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  et the textual v
13c00 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72 72  alue as the corr
13c10 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ect..           
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13c30 20 20 20 20 20 20 74 79 70 65 2e 0d 0a 20 20 20        type...   
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
13c80 28 6e 65 77 41 72 67 2c 20 22 62 72 65 61 6b 22  (newArg, "break"
13c90 29 29 0d 0a 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 7b 0d 0a 20              {.. 
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13cd0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13ce0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13d10 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
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 7b 0d 0a 20              {.. 
13d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13d60 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13d70 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13db0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13dc0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
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 20 20 20 20 20 20 74 72                tr
13df0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13e00 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
13e40 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13e50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13e80 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13e90 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13f30 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13fa0 20 28 28 62 6f 6f 6c 29 76 61 6c 75 65 29 0d 0a   ((bool)value)..
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fd0 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65  BreakIntoDebugge
13fe0 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r();..          
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14010 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
14020 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
14030 77 41 72 67 2c 20 22 63 6f 6e 66 69 67 56 65 72  wArg, "configVer
14040 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20  sion"))..       
14050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14060 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
14090 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 74 65  nfigVersion = te
140a0 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140d0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
140e0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
140f0 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
14100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14110 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
14140 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
14150 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14180 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
141d0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
141e0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14210 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14220 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14230 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14260 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14270 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
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 20 20 20 20 20 22                 "
142a0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
142b0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
142c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
142f0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
14300 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14330 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
143a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
14410 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72  iguration.confir
14420 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  m = (bool)value;
14430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14440 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
14450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14460 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
14470 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
14480 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22  , "coreFileName"
14490 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
144a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
144d0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
144e0 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
14530 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
14540 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20 20 20  debug"))..      
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14580 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
14590 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
145a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
145d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
14620 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
14630 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
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 54 72 61 63 65 50            TraceP
14660 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
14670 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
14680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
146b0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
146c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
146d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146e0 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
146f0 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
14700 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
14730 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
14740 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
14750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14770 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14780 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
147b0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
147e0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
147f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14800 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
14810 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14860 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f 6c 29  n.debug = (bool)
14870 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
14880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14890 7d 0d 0a 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 65 6c 73 65 20             else 
148b0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
148c0 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f  newArg, "debugFo
148d0 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
14920 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  bugFormat = text
14930 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
14950 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
14960 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
14970 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b  ion.debugFormat;
14980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14990 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
149c0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
149d0 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69 74 79  , "debugPriority
149e0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
149f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 6f 62 6a 65              obje
14a20 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
14a30 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
14a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a50 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
14a60 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
14a70 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
14a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
14aa0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ac0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
14af0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
14b00 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
14b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b30 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
14b40 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
14b50 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
14b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14b80 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
14b90 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14bc0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
14bd0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 20 20 20 20 20 46 6f                Fo
14c00 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
14c10 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
14c20 2c 0d 0a 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 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14c50 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14c60 20 20 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 69 66 20 28 73 74            if (st
14c80 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ca0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14cb0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
14ce0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14d30 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  n.debugPriority 
14d40 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
14d50 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
14d80 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  bugPriority = co
14d90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
14da0 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  gPriority;..    
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14de0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
14df0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73  ion(newArg, "des
14e00 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29  ignerFileName"))
14e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14e20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14e50 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
14e60 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
14e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14eb0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14ec0 20 22 64 69 72 65 63 74 6f 72 79 22 29 29 0d 0a   "directory"))..
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
14f10 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20 3d  tion.directory =
14f20 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20 20   text;....      
14f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f60 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a        // NOTE: *
14f70 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20 72 65  SPECIAL* Must re
14f80 66 72 65 73 68 20 74 68 65 20 66 69 6c 65 20 6e  fresh the file n
14f90 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
14fc0 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
14fd0 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
14fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15000 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e 67         has chang
15010 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15050 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65   string coreFile
15060 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
15070 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
15080 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
150b0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
150c0 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
150f0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
15100 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72 65  GetFileName(core
15110 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
15140 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
15150 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
15160 29 0d 0a 20 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 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
15190 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65  = Installer.Core
151a0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
151d0 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
151e0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
151f0 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
15200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15210 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15220 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.directory, co
15230 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15250 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
15260 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
15270 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
15280 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
15290 0a 20 20 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 69 66 20               if 
152b0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
152c0 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
152d0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
15300 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
15310 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
15320 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
15350 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69  IsNullOrEmpty(li
15360 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  nqFileName))..  
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
15390 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
153a0 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
153b0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
153e0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  n.linqFileName =
153f0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
15400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15420 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
15430 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
15440 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
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 73 74 72 69 6e 67 20 65 66         string ef
15470 36 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  6FileName = conf
15480 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c  iguration.ef6Fil
15490 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
154a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154b0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
154c0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
154d0 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  ef6FileName)).. 
154e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
15500 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  f6FileName = Pat
15510 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 65 66  h.GetFileName(ef
15520 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  6FileName);.... 
15530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15540 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
15550 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
15560 70 74 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29  pty(ef6FileName)
15570 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d     ef6FileName =
155a0 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36 46 69   Installer.Ef6Fi
155b0 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
155c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
155e0 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65  tion.ef6FileName
155f0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
15600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15630 64 69 72 65 63 74 6f 72 79 2c 20 65 66 36 46 69  directory, ef6Fi
15640 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15660 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
15670 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
15680 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
15690 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
156a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
156b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156c0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
156d0 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67  ullOrEmpty(desig
156e0 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  nerFileName)).. 
156f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
15710 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
15720 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
15730 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  me(designerFileN
15740 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
15770 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65  IsNullOrEmpty(de
15780 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
15790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
157c0 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44  me = Installer.D
157d0 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
157e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
157f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15800 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
15810 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
15820 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
15830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
15860 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67 6e 65  rectory, designe
15870 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20  rFileName);..   
15880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15890 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158b0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
158c0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 65 66  tion(newArg, "ef
158d0 36 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  6FileName"))..  
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15920 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d  on.ef6FileName =
15930 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
15940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15950 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15960 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
15970 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
15980 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c  newArg, "install
15990 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
159d0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
159e0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
159f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15a10 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15a20 0a 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 7b 0d 0a               {..
15a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a60 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15a70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15aa0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15ab0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15ac0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15af0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15b00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15b40 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15b50 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15b80 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15b90 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
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 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15bd0 3b 0d 0a 0d 0a 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 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15c30 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c50 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
15c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15c80 0a 0d 0a 20 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 20 20 20 63                 c
15ca0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
15cb0 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  tall = (bool)val
15cc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
15cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
15d00 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
15d10 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c 61  Arg, "installFla
15d20 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  gs"))..         
15d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
15d60 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
15d70 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
15d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d90 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
15da0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74  InstallFlags), t
15db0 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20  ext, true);.... 
15dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
15de0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
15e30 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
15e40 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
15e80 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
15e90 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15ec0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
15ed0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 22 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c  "Invalid install
15f10 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30   flags value: {0
15f20 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15f50 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72 61 63  lay(text)), trac
15f60 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
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 20 20 20 20 20 20 20 69                 i
15f90 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
15fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fc0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
15fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ff0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
16040 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c  ration.installFl
16050 61 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c  ags = (InstallFl
16060 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ags)value;..    
16070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16080 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
160a0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
160b0 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e  ion(newArg, "lin
160c0 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  qFileName"))..  
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
16110 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  on.linqFileName 
16120 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20  = text;..       
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 7d 0d 0a 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 65 6c 73 65              else
16160 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16170 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69 6c  (newArg, "logFil
16180 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
161d0 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  ogFileName = tex
161e0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
161f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16210 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
16220 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
16230 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29  rg, "noCompact")
16240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16250 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 62 6f 6f 6c 3f 20            bool? 
16280 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
16290 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
162c0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
162f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
16310 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
16320 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
16360 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
16370 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
16380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
163a0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
163b0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
163c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
163f0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
16400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16420 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
16430 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
16440 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
16480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
164e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
164f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16500 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
16510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16520 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
16550 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d  figuration.noCom
16560 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  pact = (bool)val
16570 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
165b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
165c0 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22  Arg, "noConsole"
165d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
165e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 62 6f 6f 6c 3f             bool?
16610 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16620 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16650 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16680 20 20 20 20 20 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 65                 e
166a0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
166b0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166e0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
166f0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16700 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16730 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16740 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
16780 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
16790 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
167a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167b0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
167c0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
167d0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16800 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 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 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16860 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
16870 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16890 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
168a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
168c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
168e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
168f0 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61  nsole = (bool)va
16900 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16930 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
16940 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
16950 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70  wArg, "noDesktop
16960 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
16970 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 62 6f 6f 6c              bool
169a0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
169b0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
169c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
169e0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
169f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
16a10 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
16a40 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
16a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a70 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
16a80 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
16a90 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
16aa0 20 20 20 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 20 20 20 20 74                 t
16ac0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
16ad0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
16b10 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
16b20 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
16b50 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
16b60 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
16ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 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 69 66 20 28 73 74 72 69 63 74 29       if (strict)
16bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
16c00 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
16c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16c70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44  onfiguration.noD
16c80 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76  esktop = (bool)v
16c90 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
16cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16cc0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
16cd0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
16ce0 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29  ewArg, "noLog"))
16cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 62 6f 6f 6c 3f 20 76           bool? v
16d30 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
16d40 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
16d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
16d70 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16da0 20 20 20 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 65 72 72               err
16dc0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16dd0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
16e10 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
16e20 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
16e30 20 20 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 20 20 74 72 61 63              trac
16e50 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
16e60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16e90 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
16ea0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ed0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16ee0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16ef0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
16f20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
16f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fb0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
17000 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
17010 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
17060 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
17070 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20  "noNetFx20")).. 
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17090 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
170c0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
170d0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
17100 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17130 20 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 65 72 72 6f 72 20            error 
17150 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
17160 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
17170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
17190 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
171a0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
171b0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
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 20 20 74 72 61 63 65 43 61           traceCa
171e0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
171f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
17220 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
17230 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
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 20 20 20 20 20                  
17260 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
17270 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
17280 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
172b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
172e0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
172f0 20 20 20 20 20 20 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
17320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17340 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
17350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17360 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
17390 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30  ration.noNetFx20
173a0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
173b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
173c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
173f0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
17400 20 22 6e 6f 4e 65 74 46 78 33 35 22 29 29 0d 0a   "noNetFx35"))..
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17440 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
17450 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
17460 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
17470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17480 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
17490 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
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 7b 0d 0a 20 20 20 20 20          {..     
174c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
174e0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
174f0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
17530 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
17540 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
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 74 72 61 63 65 43            traceC
17570 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
17580 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
175b0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
175c0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
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 20 20 20 20 20 20 20 20                  
175f0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
17600 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
17610 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17640 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 20 20 20 20 20 20                  
176a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
176b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176d0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
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 20 7d 0d 0a 0d 0a 20 20           }....  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
17720 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33  uration.noNetFx3
17730 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  5 = (bool)value;
17740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17750 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17770 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
17780 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
17790 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d  , "noNetFx40")).
177a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
177c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
177e0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
177f0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 69 66 20 28 76 61 6c           if (val
17820 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17860 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
17870 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
17880 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
17890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
178c0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
178d0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17900 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
17910 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
17940 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
17950 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
17960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
17990 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
179a0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
179b0 20 20 20 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 74 72                tr
179d0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
179e0 0a 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 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
17a10 20 20 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
17a40 0a 0d 0a 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 20 20 20 20                  
17a60 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17aa0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
17ab0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
17ac0 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  40 = (bool)value
17ad0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17ae0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
17b10 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
17b20 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22 29 29  g, "noNetFx45"))
17b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
17b70 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
17b80 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
17bb0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
17c00 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
17c10 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c40 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
17c50 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
17c60 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
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 20 20 20 74 72 61 63              trac
17c90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
17ca0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17cd0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
17ce0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
17cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 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 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
17d20 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
17d30 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 74                 t
17d60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
17d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dc0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
17dd0 0d 0a 0d 0a 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 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
17e40 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
17e50 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x45 = (bool)valu
17e60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
17e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
17ea0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
17eb0 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 31 22  rg, "noNetFx451"
17ec0 29 29 0d 0a 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 7b 0d 0a 20              {.. 
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ef0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
17f00 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
17f10 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17f40 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17f90 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17fa0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17fe0 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
17ff0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18020 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
18030 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
18070 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
18080 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
180b0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
180c0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
18100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
18130 0a 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 20 20 20 20 20                  
18150 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
18160 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
18190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
181b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
181d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
181e0 74 46 78 34 35 31 20 3d 20 28 62 6f 6f 6c 29 76  tFx451 = (bool)v
181f0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18220 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
18230 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
18240 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74 69 6d  ewArg, "noRuntim
18250 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20  eVersion"))..   
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18270 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18290 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
182a0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
182b0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
182e0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18320 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
18330 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
18340 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18370 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
18380 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18390 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
183c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
183d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
183e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183f0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
18400 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
18410 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18440 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
18450 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
18460 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18490 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
184a0 20 20 20 20 20 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 69 66 20               if 
184c0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
184f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18520 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
18570 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
18580 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29 76 61  rsion = (bool)va
18590 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
185b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
185c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
185d0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
185e0 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29  wArg, "noTrace")
185f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 62 6f 6f 6c 3f 20            bool? 
18630 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
18640 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
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 69 66 20 28 76             if (v
18670 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 20 65 72                er
186c0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
186d0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18700 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
18710 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
18720 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
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 20 74 72 61               tra
18750 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
18760 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
18770 20 20 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
187a0 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
187b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
187c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187d0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
187e0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
187f0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18820 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
18830 0a 0d 0a 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 20 20 20 20 20                  
18850 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
18890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
188a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188b0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
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 7d 0d 0a 0d              }...
188e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18900 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
18910 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ce = (bool)value
18920 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18930 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18950 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
18960 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
18970 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29 29 0d  g, "noVs2005")).
18980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18990 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
189a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
189c0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
189d0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 20 69 66 20 28 76 61 6c           if (val
18a00 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
18a50 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
18a60 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
18a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a90 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
18aa0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
18ab0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ad0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18ae0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
18af0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
18b00 20 20 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 22 49                "I
18b20 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
18b30 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
18b40 0a 20 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 20 20 20 20 20 20                  
18b60 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
18b70 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
18b80 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
18b90 20 20 20 20 20 20 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 74 72                tr
18bb0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18be0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
18c20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c40 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18c90 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
18ca0 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  5 = (bool)value;
18cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ce0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
18cf0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
18d00 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a  , "noVs2008"))..
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 7b 0d 0a 20 20 20 20 20          {..     
18d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d40 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18d50 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18d60 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d80 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18d90 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
18de0 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
18df0 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18e30 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18e40 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e60 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18e70 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18e80 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
18eb0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
18ec0 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ef0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
18f00 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
18f10 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18f40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f70 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fa0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fd0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
19020 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
19030 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
19040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19050 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19070 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
19080 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
19090 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d 0a 20   "noVs2010")).. 
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190d0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
190e0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
190f0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
19120 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19160 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19170 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
19180 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
191b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
191c0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
191d0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
191e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19200 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
19210 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
19240 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
19250 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
19290 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
192a0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
192d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19300 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
19340 0a 20 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 20 20                  
19360 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
193b0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
193c0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
19410 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
19420 22 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a 20 20  "noVs2012"))..  
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
19470 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
19480 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
194b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 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 65 72 72 6f 72 20 3d           error =
19500 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
19510 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
19520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
19540 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
19550 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
19560 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
19570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19580 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
19590 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
195a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
195d0 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
195e0 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
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 20 20 20 20 20 20                  
19610 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
19620 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
19630 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 74 72 61 63 65             trace
19660 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19690 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
196c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19710 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
19740 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32 20 3d  ation.noVs2012 =
19750 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
197a0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
197b0 6e 6f 56 73 32 30 31 33 22 29 29 0d 0a 20 20 20  noVs2013"))..   
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
19800 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
19810 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
19840 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 65 72 72 6f 72 20 3d 20          error = 
19890 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
198a0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
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 20 20 20 54 72 61               Tra
198d0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
198e0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
198f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
19920 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
19930 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
19960 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
19970 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
199b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
199c0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
199f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19a20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19a50 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19a80 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
19ad0 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d 20  tion.noVs2013 = 
19ae0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
19af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
19b30 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70  ption(newArg, "p
19b40 65 72 55 73 65 72 22 29 29 0d 0a 20 20 20 20 20  erUser"))..     
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 7b 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 20 20                  
19b80 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
19b90 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
19ba0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
19bd0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
19c20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
19c30 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
19c60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
19c70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
19c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ca0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
19cb0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
19cc0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ce0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
19cf0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
19d00 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
19d30 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
19d40 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
19d50 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
19d80 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69 66 20 28 73             if (s
19db0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
19de0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19e10 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
19e60 6f 6e 2e 70 65 72 55 73 65 72 20 3d 20 28 62 6f  on.perUser = (bo
19e70 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
19eb0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
19ec0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 70 72 6f 76  on(newArg, "prov
19ed0 69 64 65 72 46 6c 61 67 73 22 29 29 0d 0a 20 20  iderFlags"))..  
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
19f20 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 74 79 70 65 6f 66 28 50 72 6f 76 69 64 65 72 46  typeof(ProviderF
19f60 6c 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75  lags), text, tru
19f70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f90 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
19fa0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
19ff0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1a000 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a030 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1a040 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1a050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1a080 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a090 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0b0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1a0c0 20 70 72 6f 76 69 64 65 72 20 66 6c 61 67 73 20   provider flags 
1a0d0 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20  value: {0}",..  
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 20 20 20 20 20 20 20 20                  
1a100 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78    ForDisplay(tex
1a110 74 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t)), traceCatego
1a120 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
1a150 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1a160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a170 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1a180 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1a1b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1a200 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20  providerFlags = 
1a210 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 29 76  (ProviderFlags)v
1a220 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a250 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1a260 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1a270 65 77 41 72 67 2c 20 22 72 65 67 69 73 74 72 79  ewArg, "registry
1a280 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20  Version"))..    
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1a2d0 2e 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  .registryVersion
1a2e0 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1a320 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1a330 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69 63  n(newArg, "stric
1a340 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1a380 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
1a390 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
1a3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a3c0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
1a3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
1a420 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
1a430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a450 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1a460 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
1a470 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
1a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1a4b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
1a4f0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
1a500 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1a530 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
1a540 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
1a550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1a580 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5a0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
1a5b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1a5e0 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a600 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1a610 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 2f 2f 20 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74  // NOTE: Allow t
1a680 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
1a690 61 72 67 75 6d 65 6e 74 73 20 74 6f 0d 0a 20 20  arguments to..  
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1a6c0 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 65 20     override the 
1a6d0 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
1a6e0 74 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ting..          
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a700 20 20 2f 2f 20 20 20 20 20 20 20 70 72 6f 76 69    //       provi
1a710 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
1a720 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a760 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76  strict = (bool)v
1a770 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a7a0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1a7b0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1a7c0 65 77 41 72 67 2c 20 22 74 68 72 6f 77 4f 6e 4d  ewArg, "throwOnM
1a7d0 69 73 73 69 6e 67 22 29 29 0d 0a 20 20 20 20 20  issing"))..     
1a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a810 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1a820 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1a830 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1a860 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a880 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1a8b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1a8c0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1a8f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1a900 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1a910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a930 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1a940 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a950 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1a980 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1a990 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1a9c0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1a9d0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1a9e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1aa10 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1aa40 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1aa70 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1aaa0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1aaf0 6f 6e 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  on.throwOnMissin
1ab00 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
1ab10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1ab50 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1ab60 2c 20 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29  , "traceFormat")
1ab70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ab80 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1abb0 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72  uration.traceFor
1abc0 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  mat = text;..   
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1abf0 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20  s.TraceFormat = 
1ac00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1ac10 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  aceFormat;..    
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ac50 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1ac60 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
1ac70 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
1acc0 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d  ue = ParseEnum(.
1acd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acf0 20 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69   typeof(TracePri
1ad00 6f 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72  ority), text, tr
1ad10 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1ad40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ad70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad80 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1ad90 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1ada0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1add0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1ade0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1adf0 0d 0a 20 20 20 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 20 20 20                  
1ae10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1ae20 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1ae30 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1ae60 64 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d  d {0} value: {1}
1ae70 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1aea0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1aeb0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1aef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1af20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1af50 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1af80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1afa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1afc0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
1afd0 65 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61  ePriority = (Tra
1afe0 63 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65  cePriority)value
1aff0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1b010 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
1b020 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
1b030 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
1b040 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b070 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1b080 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1b090 77 41 72 67 2c 20 22 76 65 72 62 6f 73 65 22 29  wArg, "verbose")
1b0a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b0b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
1b0e0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
1b0f0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
1b100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1b120 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1b170 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
1b180 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20 20 20 20 20 20 20 20                  
1b1b0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1b1c0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
1b1d0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1b200 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1b210 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.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 20 20 20 20 20                  
1b240 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
1b250 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
1b260 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1b290 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
1b2a0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1b2e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1b310 20 20 20 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 20                  
1b330 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1b340 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1b3b0 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f  figuration.verbo
1b3c0 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  se = (bool)value
1b3d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b3e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b400 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1b410 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1b420 67 2c 20 22 76 73 56 65 72 73 69 6f 6e 53 75 66  g, "vsVersionSuf
1b430 66 69 78 22 29 29 0d 0a 20 20 20 20 20 20 20 20  fix"))..        
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b470 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 73 56  onfiguration.vsV
1b480 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 74  ersionSuffix = t
1b490 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b4c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1b4d0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
1b4e0 77 41 72 67 2c 20 22 77 68 61 74 49 66 22 29 29  wArg, "whatIf"))
1b4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b500 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b520 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1b530 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1b540 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b560 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1b570 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1b5c0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1b5d0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b600 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1b610 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1b620 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b640 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1b650 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1b660 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b690 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1b6a0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1b6b0 0d 0a 20 20 20 20 20 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 20                  
1b6d0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1b6e0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1b6f0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b720 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1b730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1b790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1b800 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
1b810 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
1b820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b830 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
1b860 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
1b870 20 22 77 6f 77 36 34 22 29 29 0d 0a 20 20 20 20   "wow64"))..    
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8b0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1b8c0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1b8d0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1b900 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b920 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b940 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1b950 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1b960 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b990 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1b9a0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1b9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b9e0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1b9f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba10 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1ba20 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1ba30 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1ba40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba60 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1ba70 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1ba80 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
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 74 72 61 63 65 43 61           traceCa
1bab0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1bae0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1bb10 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1bb40 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb80 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1bb90 69 6f 6e 2e 77 6f 77 36 34 20 3d 20 28 62 6f 6f  ion.wow64 = (boo
1bba0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1bbe0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1bbf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc10 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1bc20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1bc30 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 20 54 72 61 63 65             Trace
1bc60 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1bc70 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1bc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1bcb0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
1bcf0 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1bd00 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1bd30 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
1bd40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1bd70 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1bda0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bdd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bdf0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1be00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1be20 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1be30 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1be40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1be50 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1be60 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1be70 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1be80 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1beb0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1bec0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
1bed0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1bee0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1bef0 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64  = "Failed to mod
1bf00 69 66 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ify configuratio
1bf10 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
1bf20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1bf30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1bf40 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1bf50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1bf60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1bf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1bfb0 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
1bfc0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
1bfd0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
1bfe0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
1bff0 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1c000 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20  bool Process(.. 
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c020 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20  tring[] args,.. 
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
1c040 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1c050 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1c070 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
1c080 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1c090 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1c0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c0d0 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
1c0e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c0f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1c100 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1c110 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c120 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1c150 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61  nvalid configura
1c160 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
1c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c180 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
1c1c0 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d  embly assembly =
1c1d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61   configuration.a
1c1e0 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20  ssembly;....    
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20  if (assembly == 
1c210 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c240 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49        error = "I
1c250 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e  nvalid assembly.
1c260 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1c270 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c280 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1c290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c2a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c2b0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
1c2c0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61  figuration.noTra
1c2d0 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
1c2e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1c310 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d  ration.noLog &&.
1c320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
1c340 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1c350 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  y(configuration.
1c360 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  logFileName)).. 
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c380 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 55        // NOTE: U
1c3d0 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c  se the default l
1c3e0 6f 67 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  og file name... 
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1c430 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1c440 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
1c450 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 20 20 20 22 74 72 61 63 65 22 29          "trace")
1c480 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c4f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c500 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1c510 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1c520 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20  Console)..      
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c560 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72   // NOTE: In ver
1c590 62 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67  bose mode, debug
1c5a0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
1c5b0 65 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ets..           
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f   //       the co
1c5e0 6e 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74  nfigured priorit
1c5f0 79 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c  y criteria) will
1c600 20 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20   be..           
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61   //       displa
1c630 79 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f  yed to the conso
1c640 6c 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74  le; otherwise, t
1c650 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
1c660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c670 20 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75    //       outpu
1c680 74 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68  t (that meets th
1c690 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69  e configured pri
1c6a0 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20  ority..         
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 20 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74     //       crit
1c6d0 65 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69  eria) will be di
1c6e0 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63  splayed to the c
1c6f0 6f 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20  onsole...       
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c730 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1c740 72 61 74 69 6f 6e 2e 64 65 62 75 67 29 0d 0a 20  ration.debug).. 
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74    // NOTE: Add t
1c7c0 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65  he console trace
1c7d0 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65   listener to the
1c7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20    //       list 
1c810 6f 66 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65  of trace listene
1c820 72 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 62 79  rs maintained by
1c830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 54    //       the T
1c860 72 61 63 65 4f 70 73 20 63 6c 61 73 73 20 28 69  raceOps class (i
1c870 2e 65 2e 20 6f 6e 6c 79 20 6d 65 73 73 61 67 65  .e. only message
1c880 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
1c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8a0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 61 74     //       that
1c8b0 20 6d 65 65 74 20 74 68 65 20 64 65 62 75 67 20   meet the debug 
1c8c0 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62 65  priority will be
1c8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 2f 2f 20 20 20 20 20 20 20 73 65 65 6e 20    //       seen 
1c900 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
1c910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
1c960 65 74 75 70 44 65 62 75 67 4c 69 73 74 65 6e 65  etupDebugListene
1c970 72 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rs();..         
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1ca20 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
1ca30 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
1ca40 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ca70 20 20 20 20 6c 69 73 74 20 6f 66 20 62 75 69 6c      list of buil
1ca80 74 2d 69 6e 20 74 72 61 63 65 20 6c 69 73 74 65  t-in trace liste
1ca90 6e 65 72 73 20 28 69 2e 65 2e 0d 0a 20 20 20 20  ners (i.e...    
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1cac0 20 20 20 20 20 6f 6e 6c 79 20 6d 65 73 73 61 67       only messag
1cad0 65 73 20 74 68 61 74 20 6d 65 65 74 20 74 68 65  es that meet the
1cae0 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20   trace..        
1caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1cb10 20 70 72 69 6f 72 69 74 79 20 77 69 6c 6c 20 62   priority will b
1cb20 65 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f  e seen on the co
1cb30 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20  nsole)...       
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1cb80 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41 64 64  ce.Listeners.Add
1cb90 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72 61 63  (new ConsoleTrac
1cba0 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d 0a 20  eListener());.. 
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1cc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc50 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
1cc60 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
1cc70 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
1cc90 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1cca0 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69  mpty(configurati
1ccb0 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  on.logFileName))
1ccc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ccd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c           Trace.L
1cd00 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77  isteners.Add(new
1cd10 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63 65   TextWriterTrace
1cd20 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20 20  Listener(..     
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1cd50 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1cd60 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name));....     
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1cdb0 54 65 63 68 6e 69 63 61 6c 6c 79 2c 20 77 65 20  Technically, we 
1cdc0 63 72 65 61 74 65 64 20 74 68 65 20 6c 6f 67 20  created the log 
1cdd0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...         
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 66 69 6c 65 73 43 72 65 61 74 65 64 2b     filesCreated+
1ce20 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d      // NOTE: Dum
1ce90 70 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  p the configurat
1cea0 69 6f 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20  ion now in case 
1ceb0 77 65 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20  we need to..    
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 2f 2f 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65  //       trouble
1cee0 73 68 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73  shoot any issues
1cef0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cf00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1cf20 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
1cf30 2e 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3c  .debugPriority <
1cf40 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  = TracePriority.
1cf50 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20  Medium)..       
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf70 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
1cf80 75 6d 70 28 64 65 62 75 67 43 61 6c 6c 62 61 63  ump(debugCallbac
1cf90 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  k);....         
1cfa0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1cfb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
1cfc0 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  cePriority <= Tr
1cfd0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1cfe0 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1d000 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
1d010 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 29 3b 0d  traceCallback);.
1d020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d030 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d050 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  / NOTE: Show whe
1d060 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e  re we are runnin
1d070 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77  g from and how w
1d080 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20 20  e were..        
1d090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d0a0 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20       invoked... 
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0c0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d0d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1d0e0 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73  g location = ass
1d0f0 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d  embly.Location;.
1d100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d110 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1d120 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1d130 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1d140 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  umLow,..        
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d160 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1d170 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1d180 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1a0 20 20 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 65        "Running e
1d1b0 78 65 63 75 74 61 62 6c 65 20 69 73 3a 20 7b 30  xecutable is: {0
1d1c0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  }", ForDisplay(l
1d1d0 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
1d200 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1d210 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d220 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1d230 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1d240 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d260 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1d270 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1d280 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1d290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d2a0 20 20 20 20 20 20 20 20 20 20 22 4f 72 69 67 69            "Origi
1d2b0 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  nal command line
1d2c0 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20   is: {0}",..    
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e      Environment.
1d2f0 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20 74 72  CommandLine), tr
1d300 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d320 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1d330 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1d340 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1d350 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1d370 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1d380 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1d390 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 22 52 75 6e 6e 69 6e 67 20 70 72 6f      "Running pro
1d3c0 63 65 73 73 20 69 73 20 7b 30 7d 2e 22 2c 20 49  cess is {0}.", I
1d3d0 73 36 34 42 69 74 50 72 6f 63 65 73 73 28 29 20  s64BitProcess() 
1d3e0 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
1d3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d400 36 34 2d 62 69 74 22 20 3a 20 22 33 32 2d 62 69  64-bit" : "32-bi
1d410 74 22 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t"), traceCatego
1d420 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1d430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d440 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77  !configuration.w
1d450 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
1d460 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d480 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
1d4b0 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61  he debugger is a
1d4c0 74 74 61 63 68 65 64 20 61 6e 64 20 22 77 68 61  ttached and "wha
1d4d0 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20  t-if"..         
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d4f0 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 69 73 20  /       mode is 
1d500 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20  [now] disabled, 
1d510 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e  issue a warning.
1d520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d530 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67        if (Debugg
1d560 65 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a  er.IsAttached)..
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d580 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1d590 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1d5a0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1d5b0 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20  .MediumHigh,..  
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1d5e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1d5f0 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f               "Fo
1d620 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20  rced to disable 
1d630 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65  \"what-if\" mode
1d640 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20   with " +..     
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75             "debu
1d670 67 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c  gger attached.",
1d680 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1d6c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d6d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1d700 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1d710 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
1d720 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
1d750 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d770 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 20 61             "No a
1d780 63 74 75 61 6c 20 63 68 61 6e 67 65 73 20 77 69  ctual changes wi
1d790 6c 6c 20 62 65 20 6d 61 64 65 20 74 6f 20 74 68  ll be made to th
1d7a0 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7c0 20 20 20 20 22 73 79 73 74 65 6d 20 62 65 63 61      "system beca
1d7d0 75 73 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20  use \"what-if\" 
1d7e0 6d 6f 64 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  mode is enabled.
1d7f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d810 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d830 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d860 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
1d870 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  f the command li
1d880 6e 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  ne has not been 
1d890 6d 61 6e 75 61 6c 6c 79 0d 0a 20 20 20 20 20 20  manually..      
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d8b0 20 20 20 20 20 20 20 63 6f 6e 66 69 72 6d 65 64         confirmed
1d8c0 20 28 69 2e 65 2e 20 76 69 61 20 74 68 65 20 65   (i.e. via the e
1d8d0 78 70 6c 69 63 69 74 20 63 6f 6d 6d 61 6e 64 20  xplicit command 
1d8e0 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20  line..          
1d8f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1d900 20 20 20 6f 70 74 69 6f 6e 29 2c 20 74 68 65 6e     option), then
1d910 20 73 74 6f 70 20 70 72 6f 63 65 73 73 69 6e 67   stop processing
1d920 20 6e 6f 77 2e 20 20 57 65 20 65 6e 66 6f 72 63   now.  We enforc
1d930 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1d940 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1d950 74 68 69 73 20 72 75 6c 65 20 73 6f 20 74 68 61  this rule so tha
1d960 74 20 73 69 6d 70 6c 79 20 64 6f 75 62 6c 65 2d  t simply double-
1d970 63 6c 69 63 6b 69 6e 67 20 74 68 65 0d 0a 20 20  clicking the..  
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63 75    //       execu
1d9a0 74 61 62 6c 65 20 77 69 6c 6c 20 6e 6f 74 20 72  table will not r
1d9b0 65 73 75 6c 74 20 69 6e 20 61 6e 79 20 63 68 61  esult in any cha
1d9c0 6e 67 65 73 20 62 65 69 6e 67 0d 0a 20 20 20 20  nges being..    
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9e0 2f 2f 20 20 20 20 20 20 20 6d 61 64 65 20 74 6f  //       made to
1d9f0 20 74 68 65 20 73 79 73 74 65 6d 2e 0d 0a 20 20   the system...  
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1da20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1da30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e  onfiguration.con
1da40 66 69 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  firm)..         
1da50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da70 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 43        error = "C
1da80 61 6e 6e 6f 74 20 63 6f 6e 74 69 6e 75 65 2c 20  annot continue, 
1da90 74 68 65 20 5c 22 63 6f 6e 66 69 72 6d 5c 22 20  the \"confirm\" 
1daa0 6f 70 74 69 6f 6e 20 69 73 20 22 20 2b 0d 0a 20  option is " +.. 
1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dac0 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 74 20             "not 
1dad0 65 6e 61 62 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20  enabled.";....  
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1db00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1db10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1db40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db50 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1db60 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
1db70 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
1db80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1dba0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1dbb0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1dbc0 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20  ity.Highest,..  
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbe0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1dbf0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1dc00 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65  ck, e, traceCate
1dc10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1dc30 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
1dc40 20 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75   process configu
1dc50 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
1dc60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1dc90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1dcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1dcf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
1dd00 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
1dd10 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
1dd20 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
1dd30 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
1dd40 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52  atic bool CheckR
1dd50 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
1dd80 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1dda0 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1ddc0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1ddd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1dde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de00 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
1de10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1de20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1de30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1de40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1de50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1de80 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
1de90 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1deb0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1dec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ded0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1def0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df00 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
1df10 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
1df20 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74  he runtime was t
1df30 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79  he core (primary
1df40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1df50 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1df60 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
1df70 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20  d against (e.g. 
1df80 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d  "v2.0.50727" or.
1df90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dfa0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76       //       "v
1dfb0 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20  4.0.30319")...  
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfd0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1dfe0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1dff0 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
1e000 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d  eVersion = GetIm
1e010 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1e020 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1e030 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1e040 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
1e050 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1e080 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1e090 20 57 65 20 61 6c 6c 6f 77 20 74 68 65 20 61 63   We allow the ac
1e0a0 74 75 61 6c 20 69 6d 61 67 65 20 72 75 6e 74 69  tual image runti
1e0b0 6d 65 20 63 68 65 63 6b 69 6e 67 20 74 6f 20 62  me checking to b
1e0c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1e0d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1e0e0 62 79 70 61 73 73 65 64 20 76 69 61 20 74 68 65  bypassed via the
1e0f0 20 22 2d 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   "-noRuntimeVers
1e100 69 6f 6e 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  ion" command lin
1e110 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1e120 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1e130 6f 70 74 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d  option.  The com
1e140 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
1e150 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
1e160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e170 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
1e180 78 70 65 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d  xpert use only..
1e190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e1a0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1e1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1e1c0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  (configuration.n
1e1d0 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  oRuntimeVersion)
1e1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e1f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e210 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1e220 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1e230 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1e260 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1e270 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1e280 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1e290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2a0 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
1e2b0 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
1e2c0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1e2d0 6b 20 7b 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20  k {0}; " +..    
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2f0 20 20 20 20 20 20 20 20 22 68 6f 77 65 76 65 72          "however
1e300 2c 20 69 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72  , installation r
1e310 65 73 74 72 69 63 74 69 6f 6e 73 20 62 61 73 65  estrictions base
1e320 64 20 6f 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20  d on this " +.. 
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e340 20 20 20 20 20 20 20 20 20 20 20 22 66 61 63 74             "fact
1e350 20 68 61 76 65 20 62 65 65 6e 20 64 69 73 61 62   have been disab
1e360 6c 65 64 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  led via the comm
1e370 61 6e 64 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20  and line.",..   
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
1e3a0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1e3b0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1e3c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e3e0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e400 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e410 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e430 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69   // TODO: Restri
1e440 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  ct the configura
1e450 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68  tion based on wh
1e460 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20  ich image..     
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e480 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20  /       runtime 
1e490 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20  versions (which 
1e4a0 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72  more-or-less cor
1e4b0 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20  respond..       
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1e4d0 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72        to .NET Fr
1e4e0 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
1e4f0 29 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  ) are supported 
1e500 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
1e510 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1e520 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66       versions of
1e530 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74   Visual Studio t
1e540 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65  hat are installe
1e550 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
1e560 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1e590 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49 6d 61  lOrEmpty(coreIma
1e5a0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1e5b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1e5c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1e5f0 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d  lid core file im
1e600 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73  age runtime vers
1e610 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e630 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e650 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1e660 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
1e670 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28   (String.Equals(
1e680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1e6a0 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
1e6b0 72 73 69 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67  rsion, CLRv2Imag
1e6c0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1e6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1e6f0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
1e700 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20  rdinal))..      
1e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e730 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e750 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
1e760 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72  r the CLR v2.0 r
1e770 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  untime, make sur
1e780 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20  e we disable..  
1e790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1e7b0 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73  ny attempt to us
1e7c0 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20  e it for things 
1e7d0 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20  that require..  
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1e800 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69  n assembly compi
1e810 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20  led for the CLR 
1e820 76 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20  v4.0.  It is..  
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75        //       u
1e850 6e 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73  ncertain if this
1e860 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70   is actually a p
1e870 72 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20  roblem in..     
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63     //       prac
1e8a0 74 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20  tice as the CLR 
1e8b0 76 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e  v4.0 can load an
1e8c0 64 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20  d use an..      
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8e0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
1e8f0 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  bly compiled wit
1e900 68 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20  h the CLR v2.0; 
1e910 68 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20  however,..      
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e930 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65    //       since
1e940 20 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66   this project of
1e950 66 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67  fers both config
1e960 75 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20  urations,..     
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63     //       we c
1e990 75 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f  urrently disallo
1e9a0 77 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e  w this mismatch.
1e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e9c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1e9f0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  ion.noNetFx40 = 
1ea00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1ea10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1ea20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1ea30 65 74 46 78 34 35 20 3d 20 74 72 75 65 3b 0d 0a  etFx45 = true;..
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea50 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1ea60 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31  ation.noNetFx451
1ea70 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea90 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1eaa0 6e 6f 56 73 32 30 31 30 20 3d 20 74 72 75 65 3b  noVs2010 = true;
1eab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eac0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1ead0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32  uration.noVs2012
1eae0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb00 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1eb10 6e 6f 56 73 32 30 31 33 20 3d 20 74 72 75 65 3b  noVs2013 = true;
1eb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eb30 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1eb40 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1eb50 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
1eb60 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20  .Medium,..      
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1eb90 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1eba0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1ebb0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
1ebe0 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
1ebf0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1ec00 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
1ec30 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1ec40 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69  rk {1} is now di
1ec50 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20  sabled.",..     
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec70 20 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67         CLRv2Imag
1ec80 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c  eRuntimeVersion,
1ec90 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69   CLRv4ImageRunti
1eca0 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ecd0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ecf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed00 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
1ed10 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed30 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
1ed40 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1ed50 6e 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e  n, CLRv4ImageRun
1ed60 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  timeVersion,..  
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
1ed90 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
1eda0 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  al))..          
1edb0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68   // NOTE: For th
1ee00 65 20 43 4c 52 20 76 34 2e 30 20 72 75 6e 74 69  e CLR v4.0 runti
1ee10 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65  me, make sure we
1ee20 20 64 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20   disable..      
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee40 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61    //       any a
1ee50 74 74 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74  ttempt to use it
1ee60 20 66 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74   for things that
1ee70 20 72 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20   require..      
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee90 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73    //       an as
1eea0 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled 
1eeb0 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
1eec0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1eed0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eef0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1ef00 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  tion.noNetFx20 =
1ef10 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef30 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1ef40 4e 65 74 46 78 33 35 20 3d 20 74 72 75 65 3b 0d  NetFx35 = true;.
1ef50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef60 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1ef70 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 35 20  ration.noVs2005 
1ef80 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1efb0 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65 3b 0d  oVs2008 = true;.
1efc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1efd0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1efe0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1eff0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1f000 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20  Medium,..       
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1f030 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1f040 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1f050 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f070 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70  Assembly is comp
1f080 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45  iled for the .NE
1f090 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c  T Framework {0},
1f0a0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0c0 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20 74    "support for t
1f0d0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1f0e0 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
1f0f0 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1f120 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69  (CLRv4ImageRunti
1f130 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f150 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1f160 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52 75  lay(CLRv2ImageRu
1f170 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d  ntimeVersion)),.
1f180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
1f1a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
1f1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1f1d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1f1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1f210 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
1f220 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63    "unsupported c
1f250 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72  ore file image r
1f260 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 22  untime version "
1f270 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f290 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65 20 7b 31  "{0}, must be {1
1f2a0 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  } or {2}",..    
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1f2d0 61 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74  ay(coreImageRunt
1f2e0 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  imeVersion),..  
1f2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f300 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1f310 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67 65 52  play(CLRv2ImageR
1f320 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
1f330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1f350 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61  Display(CLRv4Ima
1f360 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1f370 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f390 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f3c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f3d0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1f3e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1f400 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1f410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f430 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1f440 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1f450 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
1f460 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
1f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1f480 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1f490 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
1f4a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1f4b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f4c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1f4d0 46 61 69 6c 65 64 20 74 6f 20 63 68 65 63 6b 20  Failed to check 
1f4e0 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
1f4f0 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  rsion.";..      
1f500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f520 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1f530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f540 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
1f550 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
1f560 20 20 20 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 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1f5b0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
1f5c0 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20  ivate Methods.. 
1f5d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1f5e0 74 65 20 73 74 72 69 6e 67 20 47 65 74 49 6e 76  te string GetInv
1f5f0 61 72 69 61 6e 74 4e 61 6d 65 28 29 0d 0a 20 20  ariantName()..  
1f600 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1f620 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f 72 74  urn IsEf6Support
1f630 65 64 28 29 20 3f 20 45 66 36 49 6e 76 61 72 69  ed() ? Ef6Invari
1f640 61 6e 74 4e 61 6d 65 20 3a 20 49 6e 76 61 72 69  antName : Invari
1f650 61 6e 74 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  antName;..      
1f660 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f670 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1f680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1f690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f6d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1f6e0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1f6f0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
1f700 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1f710 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
1f730 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
1f740 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
1f750 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
1f770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f790 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f7b0 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
1f7c0 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
1f7d0 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1f800 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f810 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
1f820 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
1f830 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
1f840 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1f850 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f860 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f8b0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
1f8c0 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20 20 20  HasFlags(..     
1f8d0 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 76 69             Provi
1f8e0 64 65 72 46 6c 61 67 73 20 68 61 73 46 6c 61 67  derFlags hasFlag
1f8f0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
1f900 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20      bool all..  
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
1f920 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20 20  if (all)..      
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f960 74 75 72 6e 20 28 28 70 72 6f 76 69 64 65 72 46  turn ((providerF
1f970 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
1f980 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
1f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1f9b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1f9c0 20 28 28 70 72 6f 76 69 64 65 72 46 6c 61 67 73   ((providerFlags
1f9d0 20 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20   & hasFlags) != 
1f9e0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 4e 6f  ProviderFlags.No
1f9f0 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne);..          
1fa00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1fa10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1fa60 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
1fa70 6c 20 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65  l IsLinqSupporte
1fa80 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
1fa90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1faa0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1fab0 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1fac0 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
1fad0 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61 73 20   the caller has 
1fae0 66 6f 72 63 65 64 20 4c 49 4e 51 20 73 75 70 70  forced LINQ supp
1faf0 6f 72 74 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  ort to..        
1fb00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1fb10 20 62 65 20 65 6e 61 62 6c 65 64 20 2d 4f 52 2d   be enabled -OR-
1fb20 20 64 69 73 61 62 6c 65 64 2c 20 74 68 65 72 65   disabled, there
1fb30 62 79 20 62 79 70 61 73 73 69 6e 67 20 74 68 65  by bypassing the
1fb40 20 6e 65 65 64 0d 0a 20 20 20 20 20 20 20 20 20   need..         
1fb50 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1fb60 66 6f 72 20 22 61 75 74 6f 6d 61 74 69 63 20 64  for "automatic d
1fb70 65 74 65 63 74 69 6f 6e 22 20 62 79 20 74 68 69  etection" by thi
1fb80 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  s method...     
1fb90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1fbb0 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76  f (HasFlags(Prov
1fbc0 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 4c  iderFlags.ForceL
1fbd0 69 6e 71 45 6e 61 62 6c 65 64 2c 20 74 72 75 65  inqEnabled, true
1fbe0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1fbf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fc00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1fc10 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
1fc20 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f  rFlags.DidLinqFo
1fc30 72 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29  rceTrace, true))
1fc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fc70 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1fc80 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1fc90 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68  ority.MediumHigh
1fca0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1fcc0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1fcd0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
1fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcf0 20 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65            "Force
1fd00 64 20 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70  d to enable supp
1fd10 6f 72 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22  ort for \"Linq\"
1fd20 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1fd50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76              prov
1fd70 69 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f  iderFlags |= Pro
1fd80 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69  viderFlags.DidLi
1fd90 6e 71 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20  nqForceTrace;.. 
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1fdd0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1fde0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1fe00 65 20 69 66 20 28 48 61 73 46 6c 61 67 73 28 50  e if (HasFlags(P
1fe10 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72  roviderFlags.For
1fe20 63 65 4c 69 6e 71 44 69 73 61 62 6c 65 64 2c 20  ceLinqDisabled, 
1fe30 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
1fe40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1fe60 66 20 28 21 48 61 73 46 6c 61 67 73 28 50 72 6f  f (!HasFlags(Pro
1fe70 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69  viderFlags.DidLi
1fe80 6e 71 46 6f 72 63 65 54 72 61 63 65 2c 20 74 72  nqForceTrace, tr
1fe90 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
1fea0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1fed0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1fee0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1fef0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
1ff20 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
1ff50 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65  orced to disable
1ff60 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22 4c   support for \"L
1ff70 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20  inq\".",..      
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1ffa0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffc0 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c   providerFlags |
1ffd0 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  = ProviderFlags.
1ffe0 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63  DidLinqForceTrac
1fff0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
20000 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20020 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20040 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20050 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20060 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
20070 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  : Return non-zer
20080 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e  o if the System.
20090 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
200a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
200b0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
200c0 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72  bly should be pr
200d0 6f 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74  ocessed during t
200e0 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20  he install...   
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
20100 20 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72        If the tar
20110 67 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74  get is Visual St
20120 75 64 69 6f 20 32 30 30 35 2c 20 74 68 69 73 20  udio 2005, this 
20130 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..          
20140 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
20150 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20180 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65 74 46 78   return !noNetFx
20190 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 30  35 || !noNetFx40
201a0 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 20 7c   || !noNetFx45 |
201b0 7c 20 21 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a  | !noNetFx451;..
201c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
201d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
201e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
201f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20230 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 45 66  public bool IsEf
20240 36 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20 20  6Supported()..  
20250 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20280 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20   // NOTE: Check 
20290 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 61  to see if the ca
202a0 6c 6c 65 72 20 68 61 73 20 66 6f 72 63 65 64 20  ller has forced 
202b0 45 46 36 20 73 75 70 70 6f 72 74 20 74 6f 0d 0a  EF6 support to..
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 2f 2f 20 20 20 20 20 20 20 62 65 20 65 6e 61 62  //       be enab
202e0 6c 65 64 20 2d 4f 52 2d 20 64 69 73 61 62 6c 65  led -OR- disable
202f0 64 2c 20 74 68 65 72 65 62 79 20 62 79 70 61 73  d, thereby bypas
20300 73 69 6e 67 20 74 68 65 20 6e 65 65 64 0d 0a 20  sing the need.. 
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20320 2f 20 20 20 20 20 20 20 66 6f 72 20 22 61 75 74  /       for "aut
20330 6f 6d 61 74 69 63 20 64 65 74 65 63 74 69 6f 6e  omatic detection
20340 22 20 62 79 20 74 68 69 73 20 6d 65 74 68 6f 64  " by this method
20350 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20360 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20370 20 20 20 20 20 20 20 69 66 20 28 48 61 73 46 6c         if (HasFl
20380 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67  ags(ProviderFlag
20390 73 2e 46 6f 72 63 65 45 66 36 45 6e 61 62 6c 65  s.ForceEf6Enable
203a0 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  d, true))..     
203b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
203c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203d0 20 20 69 66 20 28 21 48 61 73 46 6c 61 67 73 28    if (!HasFlags(
203e0 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
203f0 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 2c 20  dEf6ForceTrace, 
20400 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
20410 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20430 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
20440 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
20450 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
20460 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
20470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20480 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
20490 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
204a0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204c0 22 46 6f 72 63 65 64 20 74 6f 20 65 6e 61 62 6c  "Forced to enabl
204d0 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c 22  e support for \"
204e0 45 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20 20  Ef6\".",..      
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20500 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20510 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20530 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c   providerFlags |
20540 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  = ProviderFlags.
20550 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63 65  DidEf6ForceTrace
20560 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20590 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
205b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
205c0 20 65 6c 73 65 20 69 66 20 28 48 61 73 46 6c 61   else if (HasFla
205d0 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73  gs(ProviderFlags
205e0 2e 46 6f 72 63 65 45 66 36 44 69 73 61 62 6c 65  .ForceEf6Disable
205f0 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  d, true))..     
20600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20620 20 20 69 66 20 28 21 48 61 73 46 6c 61 67 73 28    if (!HasFlags(
20630 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69  ProviderFlags.Di
20640 64 45 66 36 46 6f 72 63 65 54 72 61 63 65 2c 20  dEf6ForceTrace, 
20650 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
20660 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20680 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
20690 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
206a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
206b0 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206d0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
206e0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
206f0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20710 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62  "Forced to disab
20720 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72 20 5c  le support for \
20730 22 45 66 36 5c 22 2e 22 2c 0d 0a 20 20 20 20 20  "Ef6\".",..     
20740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20750 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
20760 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20780 20 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20    providerFlags 
20790 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73  |= ProviderFlags
207a0 2e 44 69 64 45 66 36 46 6f 72 63 65 54 72 61 63  .DidEf6ForceTrac
207b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
207c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
207f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20800 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20810 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20820 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
20830 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  : Return non-zer
20840 6f 20 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e  o if the System.
20850 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 0d  Data.SQLite.EF6.
20860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20870 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
20880 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 70 72 6f  ly should be pro
20890 63 65 73 73 65 64 20 64 75 72 69 6e 67 20 74 68  cessed during th
208a0 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a 20 20 20 20  e install...    
208b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
208c0 20 20 20 20 20 49 66 20 74 68 65 20 74 61 72 67       If the targ
208d0 65 74 20 69 73 20 56 69 73 75 61 6c 20 53 74 75  et is Visual Stu
208e0 64 69 6f 20 32 30 30 35 20 6f 72 20 56 69 73 75  dio 2005 or Visu
208f0 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  al..            
20900 20 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75      //       Stu
20910 64 69 6f 20 32 30 30 38 2c 20 74 68 69 73 20 6d  dio 2008, this m
20920 75 73 74 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e  ust return zero.
20930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20940 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
20950 20 20 20 20 20 20 69 66 20 28 6e 6f 4e 65 74 46        if (noNetF
20960 78 34 30 20 26 26 20 6e 6f 4e 65 74 46 78 34 35  x40 && noNetFx45
20970 20 26 26 20 6e 6f 4e 65 74 46 78 34 35 31 29 0d   && noNetFx451).
20980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20990 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
209a0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
209b0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
209c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
209d0 45 3a 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20  E: Also, if the 
209e0 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d 62 6c  EF6 core assembl
209f0 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
20a00 2c 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  , this..        
20a10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20a20 20 6d 75 73 74 20 72 65 74 75 72 6e 20 7a 65 72   must return zer
20a30 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o...            
20a40 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
20a50 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
20a60 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79  ystemEf6Assembly
20a70 41 76 61 69 6c 61 62 6c 65 28 21 48 61 73 46 6c  Available(!HasFl
20a80 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72                Pr
20aa0 6f 76 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45  oviderFlags.DidE
20ab0 66 36 52 65 73 6f 6c 76 65 54 72 61 63 65 2c 20  f6ResolveTrace, 
20ac0 74 72 75 65 29 29 29 0d 0a 20 20 20 20 20 20 20  true)))..       
20ad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20af0 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 7c 3d  providerFlags |=
20b00 20 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 44   ProviderFlags.D
20b10 69 64 45 66 36 52 65 73 6f 6c 76 65 54 72 61 63  idEf6ResolveTrac
20b20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
20b30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
20b40 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
20b50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20b60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 2f 2f 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79  // NOTE: Finally
20b90 2c 20 69 66 20 74 68 65 20 45 46 36 20 63 6f 72  , if the EF6 cor
20ba0 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 6e 6f  e assembly is no
20bb0 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20  t available..   
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
20bd0 20 20 20 20 20 20 67 6c 6f 62 61 6c 6c 79 20 5b        globally [
20be0 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 72 65  and this is a re
20bf0 71 75 69 72 65 6d 65 6e 74 20 66 6f 72 20 74 68  quirement for th
20c00 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
20c10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
20c20 20 20 20 20 69 6e 73 74 61 6c 6c 5d 2c 20 72 65      install], re
20c30 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...    
20c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c60 72 65 74 75 72 6e 20 48 61 73 46 6c 61 67 73 28  return HasFlags(
20c70 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e 53 79  ProviderFlags.Sy
20c80 73 74 65 6d 45 66 36 4d 75 73 74 42 65 47 6c 6f  stemEf6MustBeGlo
20c90 62 61 6c 2c 20 74 72 75 65 29 20 3f 0d 0a 20 20  bal, true) ?..  
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 49 73 53 79 73 74 65 6d 45 66 36 41 73 73    IsSystemEf6Ass
20cc0 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 20 3a 20  emblyGlobal() : 
20cd0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
20ce0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20cf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20d40 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52         /* REQUIR
20d50 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
20d60 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
20d70 6c 79 4e 61 6d 65 20 47 65 74 43 6f 72 65 41 73  lyName GetCoreAs
20d80 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20  semblyName() /* 
20d90 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
20da0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20db0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 72           if (cor
20dc0 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d  eAssemblyName ==
20dd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
20de0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
20e00 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  oreAssemblyName 
20e10 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47  = AssemblyName.G
20e20 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d  etAssemblyName(.
20e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e40 20 20 20 20 20 20 20 20 20 43 6f 72 65 46 69 6c           CoreFil
20e50 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
20e60 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
20e70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20e80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20e90 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d   coreAssemblyNam
20ea0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
20eb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20ec0 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
20f10 20 20 20 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20      /* OPTIONAL 
20f20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
20f30 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 4e  public AssemblyN
20f40 61 6d 65 20 47 65 74 4c 69 6e 71 41 73 73 65 6d  ame GetLinqAssem
20f50 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 74 68 72  blyName() /* thr
20f60 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ow */..         
20f70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20f80 20 20 20 20 20 20 69 66 20 28 49 73 4c 69 6e 71        if (IsLinq
20f90 53 75 70 70 6f 72 74 65 64 28 29 20 26 26 20 28  Supported() && (
20fa0 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  linqAssemblyName
20fb0 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fe0 20 20 20 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e     linqAssemblyN
20ff0 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
21000 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
21010 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
21020 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 69 6e               Lin
21030 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  qFileName); /* t
21040 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
21050 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21070 74 75 72 6e 20 6c 69 6e 71 41 73 73 65 6d 62 6c  turn linqAssembl
21080 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
21090 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
210a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
210b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210e0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
210f0 20 20 20 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f          /* OPTIO
21100 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
21110 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
21120 62 6c 79 4e 61 6d 65 20 47 65 74 45 66 36 41 73  blyName GetEf6As
21130 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20  semblyName() /* 
21140 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
21150 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21160 20 20 20 20 20 20 20 20 20 69 66 20 28 49 73 45           if (IsE
21170 66 36 53 75 70 70 6f 72 74 65 64 28 29 20 26 26  f6Supported() &&
21180 20 28 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d   (ef6AssemblyNam
21190 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  e == null))..   
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c 79 4e      ef6AssemblyN
211d0 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
211e0 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
211f0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 45 66 36               Ef6
21210 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
21220 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
21230 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21250 75 72 6e 20 65 66 36 41 73 73 65 6d 62 6c 79 4e  urn ef6AssemblyN
21260 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
21270 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21280 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
212d0 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52 45        /* REQUIRE
212e0 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  D */..          
212f0 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
21300 79 4e 61 6d 65 20 47 65 74 44 65 73 69 67 6e 65  yName GetDesigne
21310 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20  rAssemblyName() 
21320 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
21330 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21340 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21350 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
21360 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
21380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21390 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 41 73        designerAs
213a0 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73  semblyName = Ass
213b0 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73  emblyName.GetAss
213c0 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20  emblyName(..    
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213e0 20 20 20 20 44 65 73 69 67 6e 65 72 46 69 6c 65      DesignerFile
213f0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
21400 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
21410 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21420 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21430 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  designerAssembly
21440 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
21450 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21460 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
214a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
214b0 20 20 20 20 20 20 20 2f 2a 20 52 45 51 55 49 52         /* REQUIR
214c0 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
214d0 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
214e0 6c 79 4e 61 6d 65 20 47 65 74 50 72 6f 76 69 64  lyName GetProvid
214f0 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  erAssemblyName()
21500 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
21510 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21520 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21530 75 72 6e 20 49 73 45 66 36 53 75 70 70 6f 72 74  urn IsEf6Support
21540 65 64 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ed() ?..        
21550 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 45              GetE
21560 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  f6AssemblyName()
21570 20 3a 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62   : GetCoreAssemb
21580 6c 79 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20  lyName();..     
21590 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
215a0 20 20 20 20 20 20 20 20 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 0d 0a 0d 0a 20  ///////////.... 
215f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
21600 63 20 73 74 72 69 6e 67 20 47 65 74 43 6f 6e 66  c string GetConf
21610 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28  igInvariantName(
21620 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21640 20 20 72 65 74 75 72 6e 20 47 65 74 49 6e 76 61    return GetInva
21650 72 69 61 6e 74 4e 61 6d 65 28 29 3b 0d 0a 20 20  riantName();..  
21660 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21670 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
21680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
216a0 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
216c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
216d0 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74 50  blic string GetP
216e0 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
216f0 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20 20 20 20  Name()..        
21700 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21710 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
21720 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29  tInvariantName()
21730 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21750 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
217a0 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
217b0 20 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e   GetFactoryTypeN
217c0 61 6d 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ame()..         
217d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
217e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73 45        return IsE
217f0 66 36 53 75 70 70 6f 72 74 65 64 28 29 20 3f 20  f6Supported() ? 
21800 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e 61  Ef6FactoryTypeNa
21810 6d 65 20 3a 20 46 61 63 74 6f 72 79 54 79 70 65  me : FactoryType
21820 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
21830 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21840 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21880 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21890 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
218a0 69 64 20 44 75 6d 70 28 0d 0a 20 20 20 20 20 20  id Dump(..      
218b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
218c0 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
218d0 6c 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20 20  lback..         
218e0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
218f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21900 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61           if (tra
21910 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
21920 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
21930 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21940 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21950 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
21960 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
21970 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c       "Assembly",
219a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65   ForDisplay(asse
219b0 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  mbly)),..       
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
219e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
219f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21a00 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21a10 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21a20 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20   "LogFileName", 
21a50 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69  ForDisplay(logFi
21a60 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a80 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21a90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21aa0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21ab0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
21ac0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
21ad0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21af0 20 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20     "Directory", 
21b00 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
21b10 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b30 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21b50 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21b60 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21b70 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21b80 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ba0 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c   "CoreFileName",
21bb0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
21bc0 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20  FileName)),..   
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21be0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
21bf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21c00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21c10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
21c20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
21c30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61       "LinqFileNa
21c60 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
21c70 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  linqFileName)),.
21c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
21ca0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
21cd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
21ce0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
21cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21d00 20 20 20 20 20 20 20 20 20 22 45 66 36 46 69 6c           "Ef6Fil
21d10 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
21d20 61 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29  ay(ef6FileName))
21d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21d40 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21d50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
21d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d70 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
21d80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
21d90 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
21da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21db0 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 69             "Desi
21dc0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46  gnerFileName", F
21dd0 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e  orDisplay(design
21de0 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  erFileName)),.. 
21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21e10 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21e30 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21e40 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21e50 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 20 20 20 20 20 20 22 52 65 67 69 73 74 72 79         "Registry
21e80 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73  Version", ForDis
21e90 70 6c 61 79 28 72 65 67 69 73 74 72 79 56 65 72  play(registryVer
21ea0 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
21eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ec0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
21ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21ee0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
21ef0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
21f00 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
21f10 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 22 43 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22   "ConfigVersion"
21f40 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e  , ForDisplay(con
21f50 66 69 67 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  figVersion)),.. 
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
21f80 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
21f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21fa0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21fb0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21fc0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fe0 20 20 20 20 20 20 20 22 56 73 56 65 72 73 69 6f         "VsVersio
21ff0 6e 53 75 66 66 69 78 22 2c 20 46 6f 72 44 69 73  nSuffix", ForDis
22000 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 53 75  play(vsVersionSu
22010 66 66 69 78 29 29 2c 0d 0a 20 20 20 20 20 20 20  ffix)),..       
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22030 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22050 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22060 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22070 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22080 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 22 44 65 62 75 67 46 6f 72 6d 61 74 22 2c 20   "DebugFormat", 
220b0 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
220c0 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
220f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22100 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
22110 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
22120 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
22130 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22150 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
22160 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
22170 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22190 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
221a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
221b0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
221c0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
221d0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
221e0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
221f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22200 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
22210 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
22220 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
22230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22240 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22250 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22270 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22280 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22290 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
222a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
222b0 20 20 20 20 20 20 20 20 20 22 50 72 6f 76 69 64           "Provid
222c0 65 72 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73  erFlags", ForDis
222d0 70 6c 61 79 28 70 72 6f 76 69 64 65 72 46 6c 61  play(providerFla
222e0 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  gs)),..         
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22300 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22320 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22330 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22340 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22350 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22370 44 65 62 75 67 50 72 69 6f 72 69 74 79 22 2c 20  DebugPriority", 
22380 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67  ForDisplay(debug
22390 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20  Priority)),..   
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
223c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
223d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
223e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
223f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22400 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22420 20 20 20 20 20 22 54 72 61 63 65 50 72 69 6f 72       "TracePrior
22430 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ity", ForDisplay
22440 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 29 29  (tracePriority))
22450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22460 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22470 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
224a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
224b0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
224c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
224d0 20 20 20 20 20 20 20 20 20 20 20 22 50 65 72 55             "PerU
224e0 73 65 72 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ser", ForDisplay
224f0 28 70 65 72 55 73 65 72 29 29 2c 0d 0a 20 20 20  (perUser)),..   
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22520 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22530 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22540 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22550 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22560 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22580 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20       "Install", 
22590 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61  ForDisplay(insta
225a0 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ll)),..         
225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
225c0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
225d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
225e0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
225f0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22600 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22610 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22630 57 6f 77 36 34 22 2c 20 46 6f 72 44 69 73 70 6c  Wow64", ForDispl
22640 61 79 28 77 6f 77 36 34 29 29 2c 0d 0a 20 20 20  ay(wow64)),..   
22650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22660 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22670 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22680 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22690 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
226a0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
226b0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226d0 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d 65 56       "NoRuntimeV
226e0 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70  ersion", ForDisp
226f0 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56 65 72  lay(noRuntimeVer
22700 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22740 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22750 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22760 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22770 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22790 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f   "NoDesktop", Fo
227a0 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74  rDisplay(noDeskt
227b0 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  op)),..         
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
227d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
227e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
227f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22800 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22810 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22820 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22840 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44  NoCompact", ForD
22850 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74  isplay(noCompact
22860 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22880 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
228b0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
228c0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
228d0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
228f0 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69 73  NetFx20", ForDis
22900 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29 29  play(noNetFx20))
22910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22920 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22930 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
22960 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
22970 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
22980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22990 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
229a0 74 46 78 33 35 22 2c 20 46 6f 72 44 69 73 70 6c  tFx35", ForDispl
229b0 61 79 28 6e 6f 4e 65 74 46 78 33 35 29 29 2c 0d  ay(noNetFx35)),.
229c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
229d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
229e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22a10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22a20 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a40 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
22a50 78 34 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  x40", ForDisplay
22a60 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20  (noNetFx40)),.. 
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a80 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22a90 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22ab0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22ac0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22ad0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34         "NoNetFx4
22b00 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  5", ForDisplay(n
22b10 6f 4e 65 74 46 78 34 35 29 29 2c 0d 0a 20 20 20  oNetFx45)),..   
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22b40 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22b50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22b60 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22b70 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22b80 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ba0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 35 31       "NoNetFx451
22bb0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
22bc0 4e 65 74 46 78 34 35 31 29 29 2c 0d 0a 20 20 20  NetFx451)),..   
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22be0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22bf0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22c00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22c10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22c20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22c30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c50 20 20 20 20 20 22 4e 6f 56 73 32 30 30 35 22 2c       "NoVs2005",
22c60 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
22c70 32 30 30 35 29 29 2c 0d 0a 20 20 20 20 20 20 20  2005)),..       
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22cb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22cc0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22cd0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22ce0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72   "NoVs2008", For
22d10 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38  Display(noVs2008
22d20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22d40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
22d70 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
22d80 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
22d90 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
22db0 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70  Vs2010", ForDisp
22dc0 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d  lay(noVs2010)),.
22dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22de0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22df0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22e20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22e30 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e50 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
22e60 31 32 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  12", ForDisplay(
22e70 6e 6f 56 73 32 30 31 32 29 29 2c 0d 0a 20 20 20  noVs2012)),..   
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22ea0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22ec0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22ed0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22ee0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 20 20 20 20 22 4e 6f 56 73 32 30 31 33 22 2c       "NoVs2013",
22f10 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
22f20 32 30 31 33 29 29 2c 0d 0a 20 20 20 20 20 20 20  2013)),..       
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22f60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22f70 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22f80 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22f90 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72 44   "NoTrace", ForD
22fc0 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29 29  isplay(noTrace))
22fd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22fe0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22ff0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23010 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23020 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23030 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23040 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23050 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f             "NoCo
23060 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c  nsole", ForDispl
23070 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d  ay(noConsole)),.
23080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23090 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
230a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
230d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
230e0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
230f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23100 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22           "NoLog"
23110 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c  , ForDisplay(noL
23120 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  og)),..         
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23140 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23160 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23170 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23180 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23190 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
231b0 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 2c  ThrowOnMissing",
231c0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 68 72 6f   ForDisplay(thro
231d0 77 4f 6e 4d 69 73 73 69 6e 67 29 29 2c 0d 0a 20  wOnMissing)),.. 
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
23200 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23220 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
23230 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
23240 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23260 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c         "WhatIf",
23270 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74   ForDisplay(what
23280 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  If)),..         
23290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
232a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
232b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
232c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
232d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
232e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
232f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23310 44 65 62 75 67 22 2c 20 46 6f 72 44 69 73 70 6c  Debug", ForDispl
23320 61 79 28 64 65 62 75 67 29 29 2c 0d 0a 20 20 20  ay(debug)),..   
23330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23340 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23350 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23360 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23370 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23380 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23390 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 20 20 20 22 56 65 72 62 6f 73 65 22 2c 20       "Verbose", 
233c0 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72 62 6f  ForDisplay(verbo
233d0 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  se)),..         
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
233f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23410 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23420 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23430 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23440 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23460 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44 69 73  Confirm", ForDis
23470 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d  play(confirm)),.
23480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23490 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
234a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23510 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
23520 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23550 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23560 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
23570 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
23580 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235a0 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 54        "AssemblyT
235b0 69 74 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  itle",..        
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 47      ForDisplay(G
235e0 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
235f0 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20  assembly))),..  
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23620 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23640 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
23650 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
23660 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
23670 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23690 20 20 22 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69    "AssemblyConfi
236a0 67 75 72 61 74 69 6f 6e 22 2c 0d 0a 20 20 20 20  guration",..    
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236c0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
236d0 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 43 6f  ay(GetAssemblyCo
236e0 6e 66 69 67 75 72 61 74 69 6f 6e 28 61 73 73 65  nfiguration(asse
236f0 6d 62 6c 79 29 29 29 2c 0d 0a 20 20 20 20 20 20  mbly))),..      
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
23720 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
23730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23750 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
23790 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
237a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
237b0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
237c0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
237d0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
237e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237f0 22 49 73 53 79 73 74 65 6d 45 66 36 41 73 73 65  "IsSystemEf6Asse
23800 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 22 2c 20  mblyAvailable", 
23810 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23830 20 20 20 20 20 49 73 53 79 73 74 65 6d 45 66 36       IsSystemEf6
23840 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c  AssemblyAvailabl
23850 65 28 66 61 6c 73 65 29 29 29 2c 0d 0a 20 20 20  e(false))),..   
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23880 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23890 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
238a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
238b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
238c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 20 20 20 20 20 22 49 73 53 79 73 74 65 6d 45 66       "IsSystemEf
238f0 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c 22  6AssemblyGlobal"
23900 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 20 20 20 20 49 73 53 79 73 74 65 6d 45         IsSystemE
23930 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
23940 28 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ())),..         
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23960 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23980 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
239c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
239d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
239e0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
239f0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
23a00 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 20 22 49 73 4c 69 6e 71 53 75 70 70 6f 72 74    "IsLinqSupport
23a30 65 64 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ed", ForDisplay(
23a40 49 73 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28  IsLinqSupported(
23a50 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23a70 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
23a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
23aa0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
23ab0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
23ac0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
23ae0 73 45 66 36 53 75 70 70 6f 72 74 65 64 22 2c 20  sEf6Supported", 
23af0 46 6f 72 44 69 73 70 6c 61 79 28 49 73 45 66 36  ForDisplay(IsEf6
23b00 53 75 70 70 6f 72 74 65 64 28 29 29 29 2c 0d 0a  Supported())),..
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
23b30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
23bb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bd0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
23be0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
23bf0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23c00 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c20 20 20 20 22 47 65 74 43 6f 72 65 41 73 73 65 6d     "GetCoreAssem
23c30 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  blyName", ForDis
23c40 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20  play(..         
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 20 20 20 47 65 74 43 6f 72 65 41 73 73 65 6d 62     GetCoreAssemb
23c70 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72 61 63  lyName())), trac
23c80 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ca0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23cb0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
23cc0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23d00 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23d10 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23d20 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 20 20 20 22 47 65 74 43 6f 72           "GetCor
23d50 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  eAssemblyName", 
23d60 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d  ForDisplay(e)),.
23d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23d90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23db0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23e20 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
23e30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23e60 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23e70 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23ea0 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e  GetLinqAssemblyN
23eb0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
23ec0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
23ee0 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61  etLinqAssemblyNa
23ef0 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43 61 74  me())), traceCat
23f00 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f30 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
23f40 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f70 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
23f80 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23f90 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23fa0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fc0 20 20 20 20 20 22 47 65 74 4c 69 6e 71 41 73 73       "GetLinqAss
23fd0 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
23fe0 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20  isplay(e)),..   
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24000 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24010 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24030 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24040 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24080 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24090 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
240d0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
240e0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
240f0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24110 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 45             "GetE
24120 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  f6AssemblyName",
24130 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24150 20 20 20 20 20 20 20 20 20 20 47 65 74 45 66 36            GetEf6
24160 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29  AssemblyName()))
24170 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
24180 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24190 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
241b0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
241c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
241d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24200 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24210 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24220 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24240 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61  GetEf6AssemblyNa
24250 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
24260 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
24290 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
242a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
24320 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24350 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24360 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24370 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 20 20 20 20 22 47 65 74 44 65 73 69 67 6e 65 72      "GetDesigner
243a0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
243b0 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
243c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243d0 20 20 20 20 20 20 20 20 47 65 74 44 65 73 69 67          GetDesig
243e0 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  nerAssemblyName(
243f0 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
24400 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
24410 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
24440 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
24450 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24470 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
24480 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
24490 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
244a0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244c0 20 20 22 47 65 74 44 65 73 69 67 6e 65 72 41 73    "GetDesignerAs
244d0 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
244e0 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20  Display(e)),..  
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24500 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24510 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
24530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24540 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24590 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
245a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
245b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
245c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 20 20 20 22 47 65 74 49 6e 76 61 72 69 61 6e      "GetInvarian
245f0 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  tName", ForDispl
24600 61 79 28 47 65 74 49 6e 76 61 72 69 61 6e 74 4e  ay(GetInvariantN
24610 61 6d 65 28 29 29 29 2c 0d 0a 20 20 20 20 20 20  ame())),..      
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24630 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
24640 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24650 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24660 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
24670 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
24680 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 22 47 65 74 43 6f 6e 66 69 67 49 6e 76 61    "GetConfigInva
246b0 72 69 61 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44  riantName", ForD
246c0 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 47 65 74 43 6f 6e 66 69 67 49 6e 76 61 72 69   GetConfigInvari
246f0 61 6e 74 4e 61 6d 65 28 29 29 29 2c 20 74 72 61  antName())), tra
24700 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
24730 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
24740 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
24750 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
24770 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61  tProviderInvaria
24780 6e 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  ntName", ForDisp
24790 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lay(..          
247a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
247b0 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61  tProviderInvaria
247c0 6e 74 4e 61 6d 65 28 29 29 29 2c 20 74 72 61 63  ntName())), trac
247d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
24800 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
24810 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
24820 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
24830 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74              "Get
24840 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 22  FactoryTypeName"
24850 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
24860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24870 20 20 20 20 20 20 20 47 65 74 46 61 63 74 6f 72         GetFactor
24880 79 54 79 70 65 4e 61 6d 65 28 29 29 29 2c 20 74  yTypeName())), t
24890 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
248a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
248b0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
248c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
24900 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24940 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
24950 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
24960 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 20 20 20 20 20 22 47 65 74 50 72            "GetPr
24990 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61  oviderAssemblyNa
249a0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
249b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
249d0 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c  tProviderAssembl
249e0 79 4e 61 6d 65 28 29 29 29 2c 20 74 72 61 63 65  yName())), trace
249f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24a20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78         catch (Ex
24a30 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20  ception e)..    
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24a60 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
24a70 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
24a80 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
24a90 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
24aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ab0 20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f 76          "GetProv
24ac0 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
24ad0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29  ", ForDisplay(e)
24ae0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b00 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
24b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24b20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24b30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24b40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
24b50 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
24b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24bb0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24bc0 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
24bd0 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
24be0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24bf0 65 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d  e Assembly assem
24c00 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
24c10 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c    public Assembl
24c20 79 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  y Assembly..    
24c30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24c40 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
24c50 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79   return assembly
24c60 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
24c70 20 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d       set { assem
24c80 62 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  bly = value; }..
24c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
24cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24d00 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c  private string l
24d10 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  ogFileName;..   
24d20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24d30 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61  string LogFileNa
24d40 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
24d50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24d60 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24d70 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  logFileName; }..
24d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d90 73 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d  set { logFileNam
24da0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
24db0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24e20 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72  ivate string dir
24e30 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
24e40 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
24e50 6e 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  ng Directory..  
24e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
24e80 20 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74   { return direct
24e90 6f 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ory; }..        
24ea0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69          set { di
24eb0 72 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b  rectory = value;
24ec0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24ed0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24ee0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24f30 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
24f40 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b  ng coreFileName;
24f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
24f60 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65  blic string Core
24f70 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
24f80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24f90 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24fa0 65 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61  eturn coreFileNa
24fb0 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
24fc0 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72         set { cor
24fd0 65 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  eFileName = valu
24fe0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24ff0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25000 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25040 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25050 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25060 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
25070 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25080 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69  public string Li
25090 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  nqFileName..    
250a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
250b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
250c0 20 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65   return linqFile
250d0 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
250e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c           set { l
250f0 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  inqFileName = va
25100 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25120 20 20 20 20 20 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 2f  ////////////////
25160 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25170 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25180 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61  string ef6FileNa
25190 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
251a0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 45   public string E
251b0 66 36 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  f6FileName..    
251c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
251d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
251e0 20 72 65 74 75 72 6e 20 65 66 36 46 69 6c 65 4e   return ef6FileN
251f0 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
25200 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 65 66          set { ef
25210 36 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  6FileName = valu
25220 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
25230 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25240 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25290 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
252a0 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c  ring designerFil
252b0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
252c0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
252d0 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g DesignerFileNa
252e0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
252f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25300 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
25310 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
25320 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25330 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67       set { desig
25340 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61  nerFileName = va
25350 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25360 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25370 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
253c0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
253d0 73 74 72 69 6e 67 20 72 65 67 69 73 74 72 79 56  string registryV
253e0 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
253f0 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
25400 6e 67 20 52 65 67 69 73 74 72 79 56 65 72 73 69  ng RegistryVersi
25410 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
25420 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25430 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
25440 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b  registryVersion;
25450 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25460 20 20 20 20 73 65 74 20 7b 20 72 65 67 69 73 74      set { regist
25470 72 79 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75  ryVersion = valu
25480 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
25490 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
254a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
254b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
254f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25500 72 69 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69  ring configVersi
25510 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
25520 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43   public string C
25530 6f 6e 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20  onfigVersion..  
25540 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
25560 20 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67   { return config
25570 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20  Version; }..    
25580 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
25590 7b 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20  { configVersion 
255a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
255b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
255c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
255d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25610 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25620 61 74 65 20 73 74 72 69 6e 67 20 76 73 56 65 72  ate string vsVer
25630 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20  sionSuffix;..   
25640 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
25650 73 74 72 69 6e 67 20 56 73 56 65 72 73 69 6f 6e  string VsVersion
25660 53 75 66 66 69 78 0d 0a 20 20 20 20 20 20 20 20  Suffix..        
25670 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25680 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
25690 75 72 6e 20 76 73 56 65 72 73 69 6f 6e 53 75 66  urn vsVersionSuf
256a0 66 69 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  fix; }..        
256b0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 73          set { vs
256c0 56 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20  VersionSuffix = 
256d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
256e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
256f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25700 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
25740 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
25750 65 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  e string debugFo
25760 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
25770 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
25780 20 44 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20   DebugFormat..  
25790 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
257a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
257b0 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
257c0 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ormat; }..      
257d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
257e0 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61  debugFormat = va
257f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25800 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25810 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25850 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
25860 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25870 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
25880 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
25890 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54   public string T
258a0 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20  raceFormat..    
258b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
258c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
258d0 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72   return traceFor
258e0 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
258f0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72          set { tr
25900 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
25910 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
25920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25930 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25970 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25980 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49 6e        private In
25990 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
259a0 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
259b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73        public Ins
259c0 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c  tallFlags Instal
259d0 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20  lFlags..        
259e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
259f0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
25a00 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  urn installFlags
25a10 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25a20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61       set { insta
25a30 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b  llFlags = value;
25a40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25a50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25a60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25aa0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25ab0 20 20 20 20 70 72 69 76 61 74 65 20 50 72 6f 76      private Prov
25ac0 69 64 65 72 46 6c 61 67 73 20 70 72 6f 76 69 64  iderFlags provid
25ad0 65 72 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  erFlags;..      
25ae0 20 20 20 20 20 20 70 75 62 6c 69 63 20 50 72 6f        public Pro
25af0 76 69 64 65 72 46 6c 61 67 73 20 50 72 6f 76 69  viderFlags Provi
25b00 64 65 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  derFlags..      
25b10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25b20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
25b30 65 74 75 72 6e 20 70 72 6f 76 69 64 65 72 46 6c  eturn providerFl
25b40 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ags; }..        
25b50 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70 72          set { pr
25b60 6f 76 69 64 65 72 46 6c 61 67 73 20 3d 20 76 61  oviderFlags = va
25b70 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25b80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25b90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25bb0 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
25be0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25bf0 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
25c00 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
25c10 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
25c20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 44   TracePriority D
25c30 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a 20 20  ebugPriority..  
25c40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
25c60 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 50   { return debugP
25c70 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
25c80 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
25c90 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 20  { debugPriority 
25ca0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
25cb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25cc0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
25cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25d10 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25d20 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
25d30 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  y tracePriority;
25d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
25d50 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
25d60 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ty TracePriority
25d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25d80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d90 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
25da0 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  acePriority; }..
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72  set { tracePrior
25dd0 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
25de0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25e50 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 70 65 72  private bool per
25e60 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
25e70 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 50     public bool P
25e80 65 72 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20  erUser..        
25e90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25ea0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
25eb0 75 72 6e 20 70 65 72 55 73 65 72 3b 20 7d 0d 0a  urn perUser; }..
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ed0 73 65 74 20 7b 20 70 65 72 55 73 65 72 20 3d 20  set { perUser = 
25ee0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
25ef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25f00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25f50 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
25f60 65 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d  e bool install;.
25f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
25f80 6c 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c  lic bool Install
25f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25fb0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e   get { return in
25fc0 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20  stall; }..      
25fd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
25fe0 69 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b  install = value;
25ff0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26000 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26010 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26050 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26060 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
26070 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20   wow64;..       
26080 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
26090 20 57 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20   Wow64..        
260a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
260b0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
260c0 75 72 6e 20 77 6f 77 36 34 3b 20 7d 0d 0a 20 20  urn wow64; }..  
260d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
260e0 74 20 7b 20 77 6f 77 36 34 20 3d 20 76 61 6c 75  t { wow64 = valu
260f0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
26100 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26110 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26150 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26160 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
26170 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  ol noRuntimeVers
26180 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
26190 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
261a0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 0d 0a  RuntimeVersion..
261b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
261d0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 52 75  et { return noRu
261e0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 20 7d 0d  ntimeVersion; }.
261f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26200 20 73 65 74 20 7b 20 6e 6f 52 75 6e 74 69 6d 65   set { noRuntime
26210 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
26220 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26230 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26280 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26290 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
262a0 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20   noDesktop;..   
262b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
262c0 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a  bool NoDesktop..
262d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
262f0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65  et { return noDe
26300 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20  sktop; }..      
26310 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
26320 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75  noDesktop = valu
26330 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
26340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26350 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26390 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
263a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
263b0 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20  ol noCompact;.. 
263c0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
263d0 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74  c bool NoCompact
263e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
263f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26400 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
26410 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20  Compact; }..    
26420 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
26430 7b 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61  { noCompact = va
26440 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
26450 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26460 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
264b0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
264c0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d  bool noNetFx20;.
264d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
264e0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
264f0 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  20..            
26500 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26510 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
26520 6e 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20  noNetFx20; }..  
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
26540 74 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20  t { noNetFx20 = 
26550 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
26560 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26570 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
265b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
265c0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
265d0 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 33 35  e bool noNetFx35
265e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
265f0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
26600 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx35..          
26610 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26620 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
26630 6e 20 6e 6f 4e 65 74 46 78 33 35 3b 20 7d 0d 0a  n noNetFx35; }..
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 33 35 20  set { noNetFx35 
26660 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
26670 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26680 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
266d0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
266e0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
266f0 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
26700 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
26710 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20  etFx40..        
26720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26730 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
26740 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d  urn noNetFx40; }
26750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26760 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34    set { noNetFx4
26770 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
26780 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26790 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
267a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
267e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
267f0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
26800 46 78 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx45;..         
26810 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
26820 6f 4e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20  oNetFx45..      
26830 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26840 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
26850 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 3b  eturn noNetFx45;
26860 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26870 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
26880 78 34 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x45 = value; }..
26890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
268a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
268b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26900 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
26910 65 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20  etFx451;..      
26920 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
26930 6c 20 4e 6f 4e 65 74 46 78 34 35 31 0d 0a 20 20  l NoNetFx451..  
26940 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
26960 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
26970 78 34 35 31 3b 20 7d 0d 0a 20 20 20 20 20 20 20  x451; }..       
26980 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
26990 6f 4e 65 74 46 78 34 35 31 20 3d 20 76 61 6c 75  oNetFx451 = valu
269a0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
269b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
269c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
269d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a00 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26a10 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
26a20 6f 6c 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20 20  ol noVs2005;..  
26a30 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
26a40 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 35 0d 0a   bool NoVs2005..
26a50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
26a70 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
26a80 32 30 30 35 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2005; }..       
26a90 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
26aa0 6f 56 73 32 30 30 35 20 3d 20 76 61 6c 75 65 3b  oVs2005 = value;
26ab0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26ac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26ad0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26b20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
26b30 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20   noVs2008;..    
26b40 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
26b50 6f 6f 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20  ool NoVs2008..  
26b60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26b70 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
26b80 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30   { return noVs20
26b90 30 38 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  08; }..         
26ba0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56         set { noV
26bb0 73 32 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d  s2008 = value; }
26bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26bd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c20 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26c30 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
26c40 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20  oVs2010;..      
26c50 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
26c60 6c 20 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20  l NoVs2010..    
26c70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26c80 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
26c90 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30   return noVs2010
26ca0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
26cb0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
26cc0 30 31 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  010 = value; }..
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26d40 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
26d50 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20 20  s2012;..        
26d60 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
26d70 4e 6f 56 73 32 30 31 32 0d 0a 20 20 20 20 20 20  NoVs2012..      
26d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26d90 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
26da0 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 32 3b 20  eturn noVs2012; 
26db0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
26dc0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
26dd0 32 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  2 = value; }..  
26de0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26df0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
26e50 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
26e60 30 31 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  013;..          
26e70 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
26e80 56 73 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20  Vs2013..        
26e90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26ea0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
26eb0 75 72 6e 20 6e 6f 56 73 32 30 31 33 3b 20 7d 0d  urn noVs2013; }.
26ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ed0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 33 20   set { noVs2013 
26ee0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
26ef0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26f00 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26f50 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
26f60 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65  ate bool noTrace
26f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
26f80 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61  ublic bool NoTra
26f90 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
26fa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26fb0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
26fc0 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20  noTrace; }..    
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
26fe0 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75  { noTrace = valu
26ff0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
27000 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27010 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27050 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27060 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
27070 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20  ol noConsole;.. 
27080 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
27090 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65  c bool NoConsole
270a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
270b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
270c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
270d0 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20  Console; }..    
270e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
270f0 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61  { noConsole = va
27100 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
27110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27120 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27160 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27170 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27180 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  bool noLog;..   
27190 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
271a0 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20  bool NoLog..    
271b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
271c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
271d0 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d   return noLog; }
271e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
271f0 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20    set { noLog = 
27200 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
27210 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27220 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27270 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27280 65 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69  e bool throwOnMi
27290 73 73 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20  ssing;..        
272a0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
272b0 54 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a  ThrowOnMissing..
272c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
272e0 65 74 20 7b 20 72 65 74 75 72 6e 20 74 68 72 6f  et { return thro
272f0 77 4f 6e 4d 69 73 73 69 6e 67 3b 20 7d 0d 0a 20  wOnMissing; }.. 
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27310 65 74 20 7b 20 74 68 72 6f 77 4f 6e 4d 69 73 73  et { throwOnMiss
27320 69 6e 67 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ing = value; }..
27330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27340 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
27350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27390 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
273a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68 61  private bool wha
273b0 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf;..          
273c0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68    public bool Wh
273d0 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20  atIf..          
273e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
273f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27400 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20  n whatIf; }..   
27410 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
27420 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61 6c 75   { whatIf = valu
27430 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
27440 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27450 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27490 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
274a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
274b0 6f 6c 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20  ol debug;..     
274c0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
274d0 6f 6c 20 44 65 62 75 67 0d 0a 20 20 20 20 20 20  ol Debug..      
274e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
274f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
27500 65 74 75 72 6e 20 64 65 62 75 67 3b 20 7d 0d 0a  eturn debug; }..
27510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27520 73 65 74 20 7b 20 64 65 62 75 67 20 3d 20 76 61  set { debug = va
27530 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
27540 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27550 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27590 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
275a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
275b0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
275c0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
275d0 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
275e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
27600 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
27610 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
27620 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
27630 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
27640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
27660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
276b0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
276c0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
276d0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
276e0 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
276f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27700 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
27710 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
27720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27730 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
27740 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
27750 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
27760 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
27770 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
27780 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
27790 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
277a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
277e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
277f0 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
27800 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
27810 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
27820 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
27830 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
27840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
27850 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
27860 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
27870 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
27880 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
27890 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
278b0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
278c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
278d0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
278e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
278f0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27930 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27940 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
27950 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
27960 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
27970 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
27980 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20  ey rootKey;..   
27990 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
279a0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
279b0 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20  RootKey..       
279c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
279d0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
279e0 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d  turn rootKey; }.
279f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a00 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d   set { rootKey =
27a10 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
27a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27a30 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
27a80 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
27a90 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 6e 61  te StringList na
27aa0 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
27ab0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
27ac0 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20  ist Names..     
27ad0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27ae0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
27af0 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d  return names; }.
27b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b10 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d 20 76   set { names = v
27b20 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
27b30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27b40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
27b90 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
27ba0 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65 72 73   VersionMap vers
27bb0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
27bc0 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
27bd0 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d 0a 20  nMap Versions.. 
27be0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
27c00 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73 69  t { return versi
27c10 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ons; }..        
27c20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
27c30 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20  rsions = value; 
27c40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ca0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
27cb0 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
27cc0 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e 61  gList platformNa
27cd0 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mes;..          
27ce0 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c    public StringL
27cf0 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist PlatformName
27d00 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
27d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
27d30 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d  latformNames; }.
27d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d50 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72 6d 4e   set { platformN
27d60 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
27d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
27d80 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
27d90 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
27da0 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
27db0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
27dc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27e10 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73 4c 69      #region VsLi
27e20 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  st Class..      
27e30 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
27e40 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d 0a 20   class VsList.. 
27e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27e60 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
27e70 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
27e80 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
27e90 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29 0d 0a  ublic VsList()..
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27ec0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
27ed0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27ee0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
27ef0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
27f00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
27f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27f50 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
27f60 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
27f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
27f80 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
27f90 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a  ryKey rootKey;..
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
27fb0 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
27fc0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
27fd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27fe0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
27ff0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
28000 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28010 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
28020 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
28030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
280a0 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
280b0 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
280c0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
280d0 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
280e0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
280f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28100 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
28110 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
28120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
28130 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
28140 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
28150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
28160 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
28170 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
28180 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
28190 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
281a0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
281b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281f0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28200 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
28210 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
28220 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
28230 50 61 63 6b 61 67 65 20 26 20 50 72 6f 76 69 64  Package & Provid
28240 65 72 20 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20  er Names..      
28250 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
28260 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e  string CoreFileN
28270 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
28280 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d  ta.SQLite.dll";.
28290 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
282a0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 69   const string Li
282b0 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  nqFileName = "Sy
282c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
282d0 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20  .Linq.dll";..   
282e0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
282f0 73 74 20 73 74 72 69 6e 67 20 45 66 36 46 69 6c  st string Ef6Fil
28300 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
28310 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
28320 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
28330 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
28340 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65  ing DesignerFile
28350 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e 44  Name = "SQLite.D
28360 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20  esigner.dll";.. 
28370 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
28380 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 76  onst string Prov
28390 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69  iderName = "SQLi
283a0 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  te Data Provider
283b0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
283c0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
283d0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22   ProjectName = "
283e0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
283f0 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  te";..        pr
28400 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
28410 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74  ng LegacyProject
28420 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22 3b  Name = "SQLite";
28430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28480 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
28490 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
284a0 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20  ing Description 
284b0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
284c0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 44  .NET Framework D
284d0 61 74 61 20 50 72 6f 76 69 64 65 72 20 66 6f 72  ata Provider for
284e0 20 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20   SQLite";..     
284f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
28500 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28560 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
28570 20 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69   CLRv2ImageRunti
28580 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e  meVersion = "v2.
28590 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20  0.50727";..     
285a0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
285b0 20 73 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61   string CLRv4Ima
285c0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
285d0 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b   = "v4.0.30319";
285e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
285f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28630 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
28640 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
28650 69 6e 67 20 53 79 73 74 65 6d 45 66 36 41 73 73  ing SystemEf6Ass
28660 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 22 45 6e 74  emblyName = "Ent
28670 69 74 79 46 72 61 6d 65 77 6f 72 6b 2c 20 22 20  ityFramework, " 
28680 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  +..            "
28690 56 65 72 73 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c  Version=6.0.0.0,
286a0 20 43 75 6c 74 75 72 65 3d 6e 65 75 74 72 61 6c   Culture=neutral
286b0 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f 6b 65 6e  , PublicKeyToken
286c0 3d 62 37 37 61 35 63 35 36 31 39 33 34 65 30 38  =b77a5c561934e08
286d0 39 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  9";....        /
286e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
286f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28720 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
28730 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
28740 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61  string NameAndVa
28750 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d  lueFormat = "{0}
28760 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20  : {1}";..       
28770 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
28780 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66  tring LogFileSuf
28790 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d  fix = ".log";...
287a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
287b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28800 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
28810 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 46 6f   VsDevEnvSetupFo
28820 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d  rmat = "{0}: {1}
28830 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
28840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
28890 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
288a0 74 72 69 6e 67 20 52 6f 6f 74 4b 65 79 4e 61 6d  tring RootKeyNam
288b0 65 20 3d 20 22 53 6f 66 74 77 61 72 65 22 3b 0d  e = "Software";.
288c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
288d0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 57 6f   const string Wo
288e0 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20 3d 20  w64SubKeyName = 
288f0 22 57 6f 77 36 34 33 32 4e 6f 64 65 22 3b 0d 0a  "Wow6432Node";..
28900 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
28910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28950 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
28960 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
28970 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
28980 77 6f 72 6b 20 68 61 73 20 62 6f 74 68 20 33 32  work has both 32
28990 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69 74 20  -bit and 64-bit 
289a0 65 64 69 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  editions...     
289b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70     //..        p
289c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
289d0 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 4e 65 74 46  adonly bool NetF
289e0 78 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 66  xIs32BitOnly = f
289f0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
28a00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
28a50 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
28a60 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77  // NOTE: For now
28a70 2c 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  , Visual Studio 
28a80 69 73 20 61 6c 77 61 79 73 20 61 20 33 32 2d 62  is always a 32-b
28a90 69 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d  it application..
28aa0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
28ab0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28ac0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 62 6f 6f  tic readonly boo
28ad0 6c 20 56 73 49 73 33 32 42 69 74 4f 6e 6c 79 20  l VsIs32BitOnly 
28ae0 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
28af0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
28b40 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
28b50 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
28b60 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20  ring VsIdFormat 
28b70 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  = "B";....      
28b80 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28bd0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
28be0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
28bf0 69 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64 45  ing XPathForAddE
28c00 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
28c10 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
28c20 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61  tion/system.data
28c30 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  /DbProviderFacto
28c40 72 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69  ries/add[@invari
28c50 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a  ant=\"{0}\"]";..
28c60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
28c70 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
28c80 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f  y string XPathFo
28c90 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d  rRemoveElement =
28ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63  ..            "c
28cb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73  onfiguration/sys
28cc0 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69  tem.data/DbProvi
28cd0 64 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d  derFactories/rem
28ce0 6f 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c  ove[@invariant=\
28cf0 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20  "{0}\"]";..     
28d00 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
28d10 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
28d70 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
28d80 69 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  ic Data..       
28d90 20 23 72 65 67 69 6f 6e 20 44 69 61 67 6e 6f 73   #region Diagnos
28da0 74 69 63 73 20 26 20 4c 6f 67 67 69 6e 67 0d 0a  tics & Logging..
28db0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28dc0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 61 63      // NOTE: Cac
28dd0 68 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  he the current p
28de0 72 6f 63 65 73 73 20 61 6e 64 20 61 73 73 65 6d  rocess and assem
28df0 62 6c 79 20 61 73 20 74 68 65 79 20 64 6f 20 6e  bly as they do n
28e00 6f 74 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20  ot change..     
28e10 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
28e20 6d 61 79 20 62 65 20 6e 65 65 64 65 64 20 69 6e  may be needed in
28e30 20 71 75 69 74 65 20 61 20 66 65 77 20 64 69 66   quite a few dif
28e40 66 65 72 65 6e 74 20 70 6c 61 63 65 73 2e 0d 0a  ferent places...
28e50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28e60 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28e70 69 63 20 50 72 6f 63 65 73 73 20 74 68 69 73 50  ic Process thisP
28e80 72 6f 63 65 73 73 20 3d 20 50 72 6f 63 65 73 73  rocess = Process
28e90 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65  .GetCurrentProce
28ea0 73 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 70  ss();..        p
28eb0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
28ec0 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
28ed0 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
28ee0 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
28ef0 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
28f00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28f50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
28f60 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 74 72   // NOTE: The tr
28f70 61 63 65 20 63 61 74 65 67 6f 72 79 20 69 73 20  ace category is 
28f80 74 68 65 20 73 61 6d 65 20 66 6f 72 20 62 6f 74  the same for bot
28f90 68 20 74 68 65 20 64 65 62 75 67 20 61 6e 64 20  h the debug and 
28fa0 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 2f  trace..        /
28fb0 2f 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b  /       callback
28fc0 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a  s...        //..
28fd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28fe0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
28ff0 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 28 74  aceCategory = (t
29000 68 69 73 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e  hisAssembly != n
29010 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
29020 20 20 20 20 50 61 74 68 2e 47 65 74 46 69 6c 65      Path.GetFile
29030 4e 61 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c  Name(thisAssembl
29040 79 2e 4c 6f 63 61 74 69 6f 6e 29 20 3a 20 6e 75  y.Location) : nu
29050 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ll;....        /
29060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
290a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
290b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
290c0 20 4e 4f 54 45 3a 20 53 65 74 20 74 68 65 20 64   NOTE: Set the d
290d0 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 20 6c  ebug and trace l
290e0 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 73  ogging callbacks
290f0 20 75 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20   used by the..  
29100 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
29110 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
29120 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
29130 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
29140 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
29150 62 75 67 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  bugCallback = Ap
29160 70 44 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20  pDebug;..       
29170 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
29180 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
29190 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  aceCallback = Ap
291a0 70 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  pTrace;..       
291b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
291c0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
291d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
291f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
29210 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
29220 6e 20 53 79 73 74 65 6d 20 44 69 72 65 63 74 6f  n System Directo
29230 72 79 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ry..        priv
29240 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
29250 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72  g systemDirector
29260 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66  y = null;....#if
29270 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20   WINDOWS..      
29280 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29290 20 73 74 72 69 6e 67 20 73 79 73 74 65 6d 44 69   string systemDi
292a0 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d 20 6e  rectoryWow64 = n
292b0 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ull;..#endif..  
292c0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
292d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
292e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
292f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
29330 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72 79 20  region Registry 
29340 53 74 61 74 69 73 74 69 63 73 0d 0a 20 20 20 20  Statistics..    
29350 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
29360 69 63 20 69 6e 74 20 66 69 6c 65 73 43 72 65 61  ic int filesCrea
29370 74 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  ted = 0;..      
29380 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29390 20 69 6e 74 20 66 69 6c 65 73 4d 6f 64 69 66 69   int filesModifi
293a0 65 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  ed = 0;..       
293b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
293c0 69 6e 74 20 66 69 6c 65 73 44 65 6c 65 74 65 64  int filesDeleted
293d0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 23   = 0;..        #
293e0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
293f0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
29400 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
29460 69 6f 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69  ion Trace Handli
29470 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
29480 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
29490 67 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65  g GetLogFileName
294a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  (..            s
294b0 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 0d 0a  tring typeName..
294c0 20 20 20 20 20 20 20 20 20 20 20 20 29 20 2f 2a              ) /*
294d0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
294e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
294f0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
29500 65 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70  e = Path.GetTemp
29510 46 69 6c 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20  FileName();..   
29520 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
29530 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
29540 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
29550 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20  e(fileName);..  
29560 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
29570 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20   fileNameOnly = 
29580 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
29590 57 69 74 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e  WithoutExtension
295a0 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
295b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
295c0 67 20 6e 65 77 46 69 6c 65 4e 61 6d 65 20 3d 20  g newFileName = 
295d0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
295e0 65 63 74 6f 72 79 2c 20 53 74 72 69 6e 67 2e 46  ectory, String.F
295f0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
29600 20 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b          "{0}{1}{
29610 32 7d 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f  2}", traceCatego
29620 72 79 2c 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  ry, !String.IsNu
29630 6c 6c 4f 72 45 6d 70 74 79 28 74 79 70 65 4e 61  llOrEmpty(typeNa
29640 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  me) ?..         
29650 20 20 20 20 20 20 20 20 20 20 20 22 2e 22 20 2b             "." +
29660 20 74 79 70 65 4e 61 6d 65 20 3a 20 53 74 72 69   typeName : Stri
29670 6e 67 2e 45 6d 70 74 79 2c 20 22 2e 22 20 2b 20  ng.Empty, "." + 
29680 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a  fileNameOnly +..
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296a0 20 20 20 20 4c 6f 67 46 69 6c 65 53 75 66 66 69      LogFileSuffi
296b0 78 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x));....        
296c0 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 66 69      File.Move(fi
296d0 6c 65 4e 61 6d 65 2c 20 6e 65 77 46 69 6c 65 4e  leName, newFileN
296e0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
296f0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 46       return newF
29700 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
29710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29770 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29780 20 76 6f 69 64 20 41 70 70 44 65 62 75 67 28 0d   void AppDebug(.
29790 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
297a0 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
297b0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
297c0 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
297d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
297e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
297f0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 43   TraceOps.DebugC
29800 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ore(String.Forma
29810 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
29820 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
29830 75 67 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ugFormat, TraceO
29840 70 73 2e 4e 65 78 74 44 65 62 75 67 49 64 28 29  ps.NextDebugId()
29850 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29860 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
29870 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
29880 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
29890 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
298a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
298b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
298c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29900 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
29910 61 74 69 63 20 76 6f 69 64 20 41 70 70 54 72 61  atic void AppTra
29920 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
29930 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
29940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29950 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
29960 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
29970 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29980 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
29990 61 63 65 43 6f 72 65 28 53 74 72 69 6e 67 2e 46  aceCore(String.F
299a0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
299b0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
299c0 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 54 72  .TraceFormat, Tr
299d0 61 63 65 4f 70 73 2e 4e 65 78 74 54 72 61 63 65  aceOps.NextTrace
299e0 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
299f0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
29a00 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
29a10 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
29a20 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
29a30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
29a40 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29a50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29aa0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
29ab0 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 50 6c  egion Generic Pl
29ac0 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d  atform Handling.
29ad0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
29ae0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 36   static bool Is6
29af0 34 42 69 74 50 72 6f 63 65 73 73 28 29 0d 0a 20  4BitProcess().. 
29b00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29b10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
29b20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
29b30 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74  eturns true if t
29b40 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
29b50 73 73 20 69 73 20 36 34 2d 62 69 74 2e 20 20 49  ss is 64-bit.  I
29b60 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  f this..        
29b70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20      //       is 
29b80 74 72 75 65 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20  true, we *know* 
29b90 74 68 61 74 20 77 65 20 6d 75 73 74 20 62 65 20  that we must be 
29ba0 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d  running on a 64-
29bb0 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bit..           
29bc0 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74   //       operat
29bd0 69 6e 67 20 73 79 73 74 65 6d 20 61 73 20 77 65  ing system as we
29be0 6c 6c 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  ll.  However, if
29bf0 20 74 68 69 73 20 69 73 20 66 61 6c 73 65 2c 20   this is false, 
29c00 77 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  we..            
29c10 2f 2f 20 20 20 20 20 20 20 64 6f 20 6e 6f 74 20  //       do not 
29c20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77  necessarily know
29c30 20 74 68 61 74 20 77 65 20 61 72 65 20 72 75 6e   that we are run
29c40 6e 69 6e 67 20 6f 6e 20 61 20 33 32 2d 62 69 74  ning on a 32-bit
29c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29c60 20 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67         operating
29c70 20 73 79 73 74 65 6d 2c 20 64 75 65 20 74 6f 20   system, due to 
29c80 57 6f 57 36 34 20 28 57 69 6e 33 32 2d 6f 6e 2d  WoW64 (Win32-on-
29c90 57 69 6e 36 34 29 2c 20 65 74 63 2e 0d 0a 20 20  Win64), etc...  
29ca0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
29cb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
29cc0 20 28 49 6e 74 50 74 72 2e 53 69 7a 65 20 3d 3d   (IntPtr.Size ==
29cd0 20 73 69 7a 65 6f 66 28 6c 6f 6e 67 29 29 3b 20   sizeof(long)); 
29ce0 2f 2f 20 4e 4f 54 45 3a 20 50 6f 69 6e 74 65 72  // NOTE: Pointer
29cf0 20 69 73 20 36 34 2d 62 69 74 73 3f 0d 0a 20 20   is 64-bits?..  
29d00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29d10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29d60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
29d70 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 75 70 70  atic bool IsSupp
29d80 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 0d 0a 20  ortedRootKey(.. 
29d90 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
29da0 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72 79  egistry registry
29db0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ,..            M
29dc0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
29dd0 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ootKey..        
29de0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
29df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
29e00 74 75 72 6e 20 4f 62 6a 65 63 74 2e 52 65 66 65  turn Object.Refe
29e10 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
29e20 4b 65 79 2c 20 72 65 67 69 73 74 72 79 2e 43 75  Key, registry.Cu
29e30 72 72 65 6e 74 55 73 65 72 29 20 7c 7c 0d 0a 20  rrentUser) ||.. 
29e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f                 O
29e50 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
29e60 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 72  quals(rootKey, r
29e70 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
29e80 68 69 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  hine);..        
29e90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
29ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ee0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29ef0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
29f00 74 72 69 6e 67 20 47 65 74 52 6f 6f 74 4b 65 79  tring GetRootKey
29f10 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
29f20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
29f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
29f40 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
29f50 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
29f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29f70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
29f80 2f 2f 20 42 55 47 46 49 58 3a 20 41 70 70 61 72  // BUGFIX: Appar
29f90 65 6e 74 6c 79 2c 20 74 68 65 20 70 65 72 2d 75  ently, the per-u
29fa0 73 65 72 20 72 65 67 69 73 74 72 79 20 68 69 76  ser registry hiv
29fb0 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 0d 0a  e does not use..
29fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29fd0 20 20 20 20 20 20 20 74 68 65 20 22 57 6f 77 36         the "Wow6
29fe0 34 33 32 4e 6f 64 65 22 20 6e 6f 64 65 20 74 6f  432Node" node to
29ff0 20 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 20   store settings 
2a000 66 6f 72 20 33 32 2d 62 69 74 0d 0a 20 20 20 20  for 32-bit..    
2a010 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2a020 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20     applications 
2a030 72 75 6e 6e 69 6e 67 20 6f 6e 20 61 20 36 34 2d  running on a 64-
2a040 62 69 74 20 6f 70 65 72 61 74 69 6e 67 20 73 79  bit operating sy
2a050 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20  stem...         
2a060 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 54 69     //         Ti
2a070 63 6b 65 74 20 5b 61 30 36 37 37 33 30 39 66 30  cket [a0677309f0
2a080 5d 20 68 61 73 20 66 75 72 74 68 65 72 20 64 65  ] has further de
2a090 74 61 69 6c 73 2e 0d 0a 20 20 20 20 20 20 20 20  tails...        
2a0a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2a0b0 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
2a0c0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 7b 31 7d  g.Format("{0}{1}
2a0d0 22 2c 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d  ", RootKeyName,.
2a0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a0f0 20 21 70 65 72 55 73 65 72 20 26 26 20 77 6f 77   !perUser && wow
2a100 36 34 20 26 26 20 49 73 36 34 42 69 74 50 72 6f  64 && Is64BitPro
2a110 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20  cess() ?..      
2a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
2a130 5c 22 20 2b 20 57 6f 77 36 34 53 75 62 4b 65 79  \" + Wow64SubKey
2a140 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d  Name : String.Em
2a150 70 74 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  pty);..        }
2a160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a1b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2a1c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2a1d0 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44 69  ring GetSystemDi
2a1e0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
2a1f0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2a200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2a210 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
2a220 57 49 4e 44 4f 57 53 0d 0a 20 20 20 20 20 20 20  WINDOWS..       
2a230 20 20 20 20 20 69 66 20 28 77 6f 77 36 34 29 0d       if (wow64).
2a240 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a260 69 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74  if (systemDirect
2a270 6f 72 79 57 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c  oryWow64 == null
2a280 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2a290 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a2a0 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d            system
2a2b0 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34 20 3d  DirectoryWow64 =
2a2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a2d0 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
2a2e0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65  NativeMethods.Ge
2a2f0 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  tSystemDirectory
2a300 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2a310 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a330 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79   systemDirectory
2a340 57 6f 77 36 34 3b 0d 0a 20 20 20 20 20 20 20 20  Wow64;..        
2a350 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2a360 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64 69 66 0d     else..#endif.
2a370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a390 69 66 20 28 73 79 73 74 65 6d 44 69 72 65 63 74  if (systemDirect
2a3a0 6f 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ory == null)..  
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3c0 20 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72    systemDirector
2a3d0 79 20 3d 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  y = Environment.
2a3e0 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 3b  SystemDirectory;
2a3f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a400 20 20 20 20 72 65 74 75 72 6e 20 73 79 73 74 65      return syste
2a410 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20  mDirectory;..   
2a420 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2a430 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
2a440 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
2a450 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2a460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2a4a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2a4b0 47 65 6e 65 72 69 63 20 53 74 72 69 6e 67 20 48  Generic String H
2a4c0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
2a4d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2a4e0 73 74 72 69 6e 67 20 46 6f 72 44 69 73 70 6c 61  string ForDispla
2a4f0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2a500 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
2a510 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2a520 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a530 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
2a540 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2a550 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
2a560 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20  <null>";....    
2a570 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
2a580 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
2a590 20 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20      Type type = 
2a5a0 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 3b  value.GetType();
2a5b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a5c0 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65  if (type == type
2a5d0 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d  of(XmlElement)).
2a5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2a5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a600 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65  XmlElement eleme
2a610 6e 74 20 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74  nt = (XmlElement
2a620 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
2a630 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
2a640 74 20 3d 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65  t = element.Oute
2a650 72 58 6d 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  rXml;..         
2a660 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a670 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20    else if (type 
2a680 3d 3d 20 74 79 70 65 6f 66 28 56 65 72 73 69 6f  == typeof(Versio
2a690 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n))..           
2a6a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a6b0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 65 72 73      Version vers
2a6c0 69 6f 6e 20 3d 20 28 56 65 72 73 69 6f 6e 29 76  ion = (Version)v
2a6d0 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alue;....       
2a6e0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
2a6f0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2a700 22 76 7b 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29  "v{0}", version)
2a710 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2a720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2a730 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
2a740 79 70 65 6f 66 28 50 72 6f 63 65 73 73 53 74 61  ypeof(ProcessSta
2a750 72 74 49 6e 66 6f 29 29 0d 0a 20 20 20 20 20 20  rtInfo))..      
2a760 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a770 20 20 20 20 20 20 20 20 20 50 72 6f 63 65 73 73           Process
2a780 53 74 61 72 74 49 6e 66 6f 20 73 74 61 72 74 49  StartInfo startI
2a790 6e 66 6f 20 3d 20 28 50 72 6f 63 65 73 73 53 74  nfo = (ProcessSt
2a7a0 61 72 74 49 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a  artInfo)value;..
2a7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a7c0 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e    result = Strin
2a7d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2a7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a7f0 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  fileName = {0}, 
2a800 61 72 67 75 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c  arguments = {1},
2a810 20 77 6f 72 6b 69 6e 67 44 69 72 65 63 74 6f 72   workingDirector
2a820 79 20 3d 20 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20  y = {2}, " +..  
2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a840 20 20 22 75 73 65 53 68 65 6c 6c 45 78 65 63 75    "useShellExecu
2a850 74 65 20 3d 20 7b 33 7d 2c 20 72 65 64 69 72 65  te = {3}, redire
2a860 63 74 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74  ctStandardOutput
2a870 20 3d 20 7b 34 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {4}, " +..   
2a880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a890 20 22 72 65 64 69 72 65 63 74 53 74 61 6e 64 61   "redirectStanda
2a8a0 72 64 45 72 72 6f 72 20 3d 20 7b 35 7d 22 2c 20  rdError = {5}", 
2a8b0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8d0 20 73 74 61 72 74 49 6e 66 6f 2e 46 69 6c 65 4e   startInfo.FileN
2a8e0 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame), ForDisplay
2a8f0 28 73 74 61 72 74 49 6e 66 6f 2e 41 72 67 75 6d  (startInfo.Argum
2a900 65 6e 74 73 29 2c 0d 0a 20 20 20 20 20 20 20 20  ents),..        
2a910 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2a920 69 73 70 6c 61 79 28 73 74 61 72 74 49 6e 66 6f  isplay(startInfo
2a930 2e 57 6f 72 6b 69 6e 67 44 69 72 65 63 74 6f 72  .WorkingDirector
2a940 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  y), ForDisplay(.
2a950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a960 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e 55       startInfo.U
2a970 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 29 2c  seShellExecute),
2a980 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
2a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9a0 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69    startInfo.Redi
2a9b0 72 65 63 74 53 74 61 6e 64 61 72 64 4f 75 74 70  rectStandardOutp
2a9c0 75 74 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ut), ForDisplay(
2a9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a9e0 20 20 20 20 20 20 73 74 61 72 74 49 6e 66 6f 2e        startInfo.
2a9f0 52 65 64 69 72 65 63 74 53 74 61 6e 64 61 72 64  RedirectStandard
2aa00 45 72 72 6f 72 29 29 3b 20 2f 2a 20 52 45 43 55  Error)); /* RECU
2aa10 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20 20 20 20  RSIVE */..      
2aa20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2aa30 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79       else if (ty
2aa40 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 50 72 6f  pe == typeof(Pro
2aa50 63 65 73 73 29 29 0d 0a 20 20 20 20 20 20 20 20  cess))..        
2aa60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2aa70 20 20 20 20 20 20 20 50 72 6f 63 65 73 73 20 70         Process p
2aa80 72 6f 63 65 73 73 20 3d 20 28 50 72 6f 63 65 73  rocess = (Proces
2aa90 73 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  s)value;....    
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
2aab0 6c 74 20 3d 20 70 72 6f 63 65 73 73 2e 49 64 2e  lt = process.Id.
2aac0 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
2aad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2aae0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
2aaf0 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
2ab00 44 61 74 61 52 65 63 65 69 76 65 64 45 76 65 6e  DataReceivedEven
2ab10 74 41 72 67 73 29 29 0d 0a 20 20 20 20 20 20 20  tArgs))..       
2ab20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ab30 20 20 20 20 20 20 20 20 44 61 74 61 52 65 63 65          DataRece
2ab40 69 76 65 64 45 76 65 6e 74 41 72 67 73 20 65 76  ivedEventArgs ev
2ab50 65 6e 74 41 72 67 73 20 3d 20 28 44 61 74 61 52  entArgs = (DataR
2ab60 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
2ab70 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
2ab80 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
2ab90 74 20 3d 20 46 6f 72 44 69 73 70 6c 61 79 28 65  t = ForDisplay(e
2aba0 76 65 6e 74 41 72 67 73 2e 44 61 74 61 29 3b 20  ventArgs.Data); 
2abb0 2f 2a 20 52 45 43 55 52 53 49 56 45 20 2a 2f 0d  /* RECURSIVE */.
2abc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
2abe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2abf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac00 20 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e   result = value.
2ac10 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20  ToString();.... 
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ac30 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
2ac40 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
2ac50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ac60 72 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d  rn "<empty>";...
2ac70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac80 20 69 66 20 28 74 79 70 65 2e 49 73 53 75 62 63   if (type.IsSubc
2ac90 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28 45 78  lassOf(typeof(Ex
2aca0 63 65 70 74 69 6f 6e 29 29 29 0d 0a 20 20 20 20  ception)))..    
2acb0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acd0 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69     result = Stri
2ace0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2acf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad00 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 30 7d 22 2c      "{0}{1}{0}",
2ad10 20 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 4e 65 77   Environment.New
2ad20 4c 69 6e 65 2c 20 72 65 73 75 6c 74 29 3b 0d 0a  Line, result);..
2ad30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2ad50 20 20 20 65 6c 73 65 20 69 66 20 28 21 74 79 70     else if (!typ
2ad60 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74  e.IsSubclassOf(t
2ad70 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29  ypeof(ValueType)
2ad80 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ad90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ada0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
2adb0 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  t = String.Forma
2adc0 74 28 22 5c 22 7b 30 7d 5c 22 22 2c 20 72 65 73  t("\"{0}\"", res
2add0 75 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ult);..         
2ade0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2adf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ae00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
2ae10 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
2ae20 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
2ae30 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2ae40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ae90 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
2aea0 62 6c 79 20 41 74 74 72 69 62 75 74 65 20 48 61  bly Attribute Ha
2aeb0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
2aec0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
2aed0 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
2aee0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a  Configuration(..
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2af00 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mbly assembly.. 
2af10 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2af20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2af30 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
2af40 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
2af50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2af60 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
2af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2af80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2af90 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
2afa0 62 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a  bly.IsDefined(..
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2afc0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
2afd0 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69  of(AssemblyConfi
2afe0 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74  gurationAttribut
2aff0 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  e), false))..   
2b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b020 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
2b030 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
2b040 6e 41 74 74 72 69 62 75 74 65 20 63 6f 6e 66 69  nAttribute confi
2b050 67 75 72 61 74 69 6f 6e 20 3d 0d 0a 20 20 20 20  guration =..    
2b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b070 20 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c          (Assembl
2b080 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74  yConfigurationAt
2b090 74 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20  tribute)..      
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0b0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47        assembly.G
2b0c0 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74  etCustomAttribut
2b0d0 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0f0 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
2b100 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f  mblyConfiguratio
2b110 6e 41 74 74 72 69 62 75 74 65 29 2c 0d 0a 20 20  nAttribute),..  
2b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
2b140 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20  lse)[0];....    
2b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b160 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6e 66 69      return confi
2b170 67 75 72 61 74 69 6f 6e 2e 43 6f 6e 66 69 67 75  guration.Configu
2b180 72 61 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ration;..       
2b190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2b1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2b1c0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
2b1d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1f0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
2b200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b210 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2b220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b230 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
2b240 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b250 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b2a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2b2b0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41  atic string GetA
2b2c0 73 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20  ssemblyTitle(.. 
2b2d0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
2b2e0 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  bly assembly..  
2b2f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2b300 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2b310 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
2b320 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
2b330 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b340 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b370 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
2b380 6c 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20  ly.IsDefined(.. 
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
2b3b0 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41  f(AssemblyTitleA
2b3c0 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65  ttribute), false
2b3d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2b3e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b400 20 20 20 41 73 73 65 6d 62 6c 79 54 69 74 6c 65     AssemblyTitle
2b410 41 74 74 72 69 62 75 74 65 20 74 69 74 6c 65 20  Attribute title 
2b420 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
2b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2b440 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74  AssemblyTitleAtt
2b450 72 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20  ribute)..       
2b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b470 20 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65       assembly.Ge
2b480 74 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65  tCustomAttribute
2b490 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b4b0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
2b4c0 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
2b4d0 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a  e), false)[0];..
2b4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b4f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2b500 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20   title.Title;.. 
2b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b520 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2b530 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2b540 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
2b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b570 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
2b580 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
2b590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2b5a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b5b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2b5c0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
2b5d0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2b5e0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
2b5f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b630 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2b640 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72   #region .NET Fr
2b650 61 6d 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67  amework Handling
2b660 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
2b670 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
2b680 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74  GetFrameworkRoot
2b690 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
2b6a0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2b6b0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2b6c0 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
2b6d0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
2b6e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b6f0 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67     return String
2b700 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69  .Format("{0}\\Mi
2b710 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61  crosoft\\.NETFra
2b720 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20  mework",..      
2b730 20 20 20 20 20 20 20 20 20 20 47 65 74 52 6f 6f            GetRoo
2b740 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
2b750 2c 20 77 6f 77 36 34 29 29 3b 0d 0a 20 20 20 20  , wow64));..    
2b760 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2b770 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2b780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2b7c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2b7d0 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61  ic string GetFra
2b7e0 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a  meworkKeyName(..
2b7f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2b800 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2b810 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2b820 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2b830 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2b840 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2b850 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2b860 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2b870 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2b880 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20     bool wow64.. 
2b890 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2b8a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b8b0 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
2b8c0 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
2b8d0 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
2b8e0 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
2b8f0 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2b900 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
2b910 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a  \\v{2}\\{3}" :..
2b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b930 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
2b940 5c 7b 31 7d 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a  \{1}\\v{2}";....
2b950 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2b960 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
2b970 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74  (format, GetRoot
2b980 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c  KeyName(perUser,
2b990 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20   wow64),..      
2b9a0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2b9b0 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
2b9c0 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66  rkVersion, platf
2b9d0 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
2b9e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2b9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ba40 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2ba50 63 20 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67  c string GetImag
2ba60 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28  eRuntimeVersion(
2ba70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2ba80 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20  ring fileName.. 
2ba90 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2baa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bab0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
2bac0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bad0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2bae0 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 41 73 73  y assembly = Ass
2baf0 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e  embly.Reflection
2bb00 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 0d 0a 20  OnlyLoadFrom(.. 
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb20 20 20 20 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a     fileName); /*
2bb30 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20   throw */....   
2bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2bb50 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
2bb60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2bb70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61          return a
2bb80 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e  ssembly.ImageRun
2bb90 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20  timeVersion;..  
2bba0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2bbb0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a           catch..
2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2bbe0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
2bbf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2bc10 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20  rn null;..      
2bc20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bc70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2bc80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2bc90 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
2bca0 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2bcc0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2bcd0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2bce0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
2bcf0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
2bd00 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
2bd10 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2bd20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
2bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bd40 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
2bd50 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
2bd60 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
2bd70 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
2bd80 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2bd90 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2bda0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2bdb0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2bdc0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2bdd0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2bde0 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 52 6f 6f   GetFrameworkRoo
2bdf0 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65 72  tKeyName(perUser
2be00 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20  , wow64),..     
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2be20 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2be30 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2be40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2be50 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2be60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2be80 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
2be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
2bea0 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67  ject value = Reg
2beb0 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56  istryHelper.GetV
2bec0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2bed0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
2bee0 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e  "InstallRoot", n
2bef0 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ull, whatIf, ver
2bf00 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
2bf10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
2bf20 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
2bf30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2bf40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2bf50 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
2bf60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 61         return Pa
2bf70 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
2bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf90 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20   (string)value, 
2bfa0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76  String.Format("v
2bfb0 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56  {0}", frameworkV
2bfc0 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
2bfd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bfe0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2bff0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2c000 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2c010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2c050 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65        #region Pe
2c060 72 2d 46 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74  r-Framework/Plat
2c070 66 6f 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  form Handling.. 
2c080 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2c090 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
2c0a0 61 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69  alizeFrameworkLi
2c0b0 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
2c0c0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2c0d0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2c0e0 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
2c0f0 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
2c100 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2c110 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69   ref FrameworkLi
2c120 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
2c130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2c140 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2c150 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2c160 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
2c170 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2c180 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2c190 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f 72  t = new Framewor
2c1a0 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  kList();....    
2c1b0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2c1c0 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
2c1d0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2c1e0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2c1f0 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
2c200 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a  y = rootKey;....
2c210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2c220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2c260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2c270 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2c280 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  .Names == null).
2c290 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2b0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2c2c0 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  mes = new String
2c2d0 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
2c2e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
2c2f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
2c300 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
2c310 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
2c320 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
2c330 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2c340 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
2c350 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  (".NETFramework"
2c360 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c370 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2c380 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2c390 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2c3a0 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
2c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2c3d0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2c3e0 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
2c3f0 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
2c400 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
2c410 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2c420 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2c430 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
2c440 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20  tFramework");.. 
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2c470 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
2c480 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
2c490 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2c4a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c4b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2c4c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c500 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c510 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
2c520 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
2c530 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
2c540 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c550 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2c560 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
2c570 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  ns = new Version
2c580 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Map();....      
2c590 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2c5a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
2c5b0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
2c5c0 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f  uration.NoDeskto
2c5d0 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p)..            
2c5e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c5f0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2c600 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f 70 56 65  onList desktopVe
2c610 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20  rsionList = new 
2c620 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
2c630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c640 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2c650 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2c660 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2c670 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a  ion.NoNetFx20)..
2c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c690 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
2c6a0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
2c6b0 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
2c6c0 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20   50727));....   
2c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2c6f0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2c700 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
2c710 77 6f 72 6b 20 33 2e 35 20 64 6f 65 73 20 6e 6f  work 3.5 does no
2c720 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a  t have its own..
2c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c740 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72      //       dir
2c750 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c  ectory; however,
2c760 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61   it still may ha
2c770 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ve assembly..   
2c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c790 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72   //       folder
2c7a0 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73  s for use in Vis
2c7b0 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e  ual Studio, etc.
2c7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2c7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2c7f0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2c800 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2c810 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
2c820 74 46 78 33 35 29 0d 0a 20 20 20 20 20 20 20 20  tFx35)..        
2c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c840 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
2c850 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
2c860 6f 6e 28 33 2c 20 35 29 29 3b 0d 0a 0d 0a 20 20  on(3, 5));....  
2c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c880 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2c890 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2c8a0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2c8b0 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20 20 20  NoNetFx40)..    
2c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8d0 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
2c8e0 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2c8f0 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33  ersion(4, 0, 303
2c900 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  19));....       
2c910 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c930 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2c940 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2c950 20 34 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68 61   4.5 does not ha
2c960 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20  ve its own..    
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6f  //       directo
2c990 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  ry; however, it 
2c9a0 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61  still may have a
2c9b0 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2c9d0 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f        folders fo
2c9e0 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20  r use in Visual 
2c9f0 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20  Studio, etc...  
2ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2ca20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2ca30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
2ca40 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
2ca50 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34  uration.NoNetFx4
2ca60 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5)..            
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
2ca80 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
2ca90 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34  dd(new Version(4
2caa0 2c 20 35 2c 20 35 30 37 30 39 29 29 3b 0d 0a 0d  , 5, 50709));...
2cab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cac0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2cae0 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
2caf0 72 61 6d 65 77 6f 72 6b 20 34 2e 35 2e 31 20 64  ramework 4.5.1 d
2cb00 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73  oes not have its
2cb10 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20   own..          
2cb20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2cb30 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f     directory; ho
2cb40 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20  wever, it still 
2cb50 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c  may have assembl
2cb60 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
2cb70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2cb80 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20  folders for use 
2cb90 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  in Visual Studio
2cba0 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20  , etc...        
2cbb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbd0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2cbe0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2cbf0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2cc00 6e 2e 4e 6f 4e 65 74 46 78 34 35 31 29 0d 0a 20  n.NoNetFx451).. 
2cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
2cc30 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
2cc40 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20  w Version(4, 5, 
2cc50 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  1));....        
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2cc70 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
2cc80 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d  ns.Add(".NETFram
2cc90 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccb0 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
2ccc0 69 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist);..         
2ccd0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ccf0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
2cd00 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
2cd10 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70  iguration.NoComp
2cd20 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
2cd30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2cd50 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69  meworkList.Versi
2cd60 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  ons.Add(".NETCom
2cd70 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  pactFramework",.
2cd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cd90 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
2cda0 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72  sionList(new Ver
2cdb0 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  sion[] {..      
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdd0 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c    new Version(2,
2cde0 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20 56   0, 0, 0), new V
2cdf0 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20  ersion(3, 5, 0, 
2ce00 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2ce10 20 20 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20 20          }));..  
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2ce30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ce40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ce50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ce90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2cea0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
2ceb0 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
2cec0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2ced0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cee0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2cef0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2cf00 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69  Names = new Stri
2cf10 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
2cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2cf30 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2cf40 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2cf50 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
2cf60 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
2cf70 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2cf80 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
2cf90 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c 29  mNames.Add(null)
2cfa0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2cfb0 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
2cfc0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
2cfd0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
2cfe0 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20  on.NoCompact).. 
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2d000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d010 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2d020 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2d030 73 2e 41 64 64 28 22 50 6f 63 6b 65 74 50 43 22  s.Add("PocketPC"
2d040 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2d050 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2d060 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2d070 6d 65 73 2e 41 64 64 28 22 53 6d 61 72 74 70 68  mes.Add("Smartph
2d080 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  one");..        
2d090 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2d0a0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
2d0b0 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 57 69 6e  rmNames.Add("Win
2d0c0 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20 20  dowsCE");..     
2d0d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2d0e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d0f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2d100 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2d110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d140 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2d150 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2d160 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61  tic bool HaveFra
2d170 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
2d180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2d190 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2d1a0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2d1b0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
2d1c0 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
2d1d0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
2d1e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
2d1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
2d200 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
2d210 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2d220 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2d230 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2d240 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2d250 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2d260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2d270 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2d280 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2d290 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ing installDirec
2d2a0 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
2d2b0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2d2d0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
2d2e0 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
2d2f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d300 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
2d310 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2d320 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
2d330 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
2d340 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
2d350 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
2d360 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2d370 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
2d380 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
2d390 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3b0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
2d3c0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
2d3d0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
2d3e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d3f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
2d400 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d420 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d440 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
2d450 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e  me != null) // N
2d460 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e 2d 64 65  OTE: Skip non-de
2d470 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20 20 20 20  sktop...        
2d480 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d490 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20  rn true;....    
2d4a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2d4b0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47  ng directory = G
2d4c0 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
2d4d0 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
2d4e0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
2d4f0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ey, frameworkVer
2d500 73 69 6f 6e 2c 20 70 65 72 55 73 65 72 2c 20 77  sion, perUser, w
2d510 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ow64, whatIf,.. 
2d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d530 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
2d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d550 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
2d560 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
2d570 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2d580 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d590 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2d5a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2d5b0 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
2d5c0 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d5f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2d600 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2d610 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2d620 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
2d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d640 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2d650 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2d660 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2d670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d680 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
2d690 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20  ework {0} found 
2d6a0 76 69 61 20 64 69 72 65 63 74 6f 72 79 20 7b 31  via directory {1
2d6b0 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
2d6c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2d6d0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2d6e0 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
2d6f0 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
2d700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d710 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
2d720 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
2d730 20 20 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44          installD
2d740 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63  irectory = direc
2d750 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
2d760 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
2d770 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2d780 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
2d790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2d7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d7e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2d7f0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
2d800 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65 67  HaveFrameworkReg
2d810 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
2d820 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2d830 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2d840 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2d850 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
2d860 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
2d870 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
2d880 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2d890 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2d8a0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
2d8b0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
2d8c0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2d8d0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
2d8e0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2d8f0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
2d900 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
2d910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2d920 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2d930 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2d940 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d  eyName = GetFram
2d950 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20  eworkKeyName(.. 
2d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2d970 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2d980 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2d990 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
2d9a0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2d9b0 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
2d9c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2d9d0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2d9e0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2d9f0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2da00 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2da10 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2da20 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
2da30 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
2da40 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2da50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2da60 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2da70 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2da80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2da90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2dab0 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
2dac0 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a  = null) // NOTE:
2dad0 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f   Skip non-deskto
2dae0 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p...            
2daf0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2db00 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
2db10 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2db20 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2db30 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2db40 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
2db50 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2db60 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2db70 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2db80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2db90 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2dba0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66   Framework {0} f
2dbb0 6f 75 6e 64 20 76 69 61 20 72 65 67 69 73 74 72  ound via registr
2dbc0 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20  y {1}.",..      
2dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2dbe0 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
2dbf0 72 6b 56 65 72 73 69 6f 6e 29 2c 20 46 6f 72 44  rkVersion), ForD
2dc00 69 73 70 6c 61 79 28 6b 65 79 4e 61 6d 65 29 29  isplay(keyName))
2dc10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dc20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2dc30 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2dc40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2dc50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
2dc60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2dc70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2dc80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dc90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dcb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dcc0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5b  ///....        [
2dcd0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
2dce0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
2dcf0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
2dd00 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2dd10 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72  c bool ForEachFr
2dd20 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a  ameworkConfig(..
2dd30 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2dd40 52 65 67 69 73 74 72 79 20 72 65 67 69 73 74 72  Registry registr
2dd50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2dd60 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
2dd70 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20  ameworkList,..  
2dd80 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
2dd90 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63  orkConfigCallbac
2dda0 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
2ddb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2ddc0 76 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45  version, /* NOTE
2ddd0 3a 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a  : Optional. */..
2dde0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2ddf0 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ng invariantName
2de00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
2de10 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
2de20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2de30 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
2de40 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2de50 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
2de60 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2de70 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
2de80 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2de90 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
2dea0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
2deb0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2dec0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ded0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2dee0 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e      bool throwOn
2def0 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20  Missing,..      
2df00 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2df10 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2df20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
2df30 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
2df40 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
2df50 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
2df60 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
2df70 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2df80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2df90 69 66 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20  if (registry == 
2dfa0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2dfb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2dfc0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2dfd0 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72 79 22  nvalid registry"
2dfe0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2dff0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2e000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2e020 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2e030 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e040 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e050 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e060 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65  = "invalid frame
2e070 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20  work list";..   
2e080 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2e090 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2e0a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2e0b0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2e0c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
2e0d0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
2e0e0 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
2e0f0 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
2e100 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
2e110 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2e120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2e130 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
2e140 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
2e150 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e160 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2e170 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e180 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53 75         if (!IsSu
2e190 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72  pportedRootKey(r
2e1a0 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79  egistry, rootKey
2e1b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e1c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e1d0 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74     error = "root
2e1e0 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65 72   key must be per
2e1f0 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63  -user or per-mac
2e200 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  hine";..        
2e210 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2e220 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2e230 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2e240 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2e250 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
2e260 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2e270 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2e280 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
2e290 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
2e2a0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2e2b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e2c0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2e2d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2e2e0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2e2f0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
2e300 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e310 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e320 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2e330 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
2e340 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
2e350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e360 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2e370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2e380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2e390 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
2e3a0 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d  PlatformNames ==
2e3b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e3c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2e3d0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2e3e0 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  no platform name
2e3f0 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
2e400 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2e410 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2e420 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2e430 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2e440 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
2e450 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72  ount != framewor
2e460 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2e470 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20  mes.Count)..    
2e480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e490 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2e4a0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
2e4b0 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  ("framework name
2e4c0 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20   count {0} does 
2e4d0 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  not " +..       
2e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 61               "ma
2e4f0 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  tch platform nam
2e500 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72  e count {1}", fr
2e510 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
2e520 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20  s.Count,..      
2e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2e540 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2e550 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
2e560 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e570 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2e580 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e590 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2e5a0 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
2e5b0 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61  = 0; index < fra
2e5c0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
2e5d0 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29  .Count; index++)
2e5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2e5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e600 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2e610 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
2e620 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ab the name of t
2e630 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e  he framework (e.
2e640 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  g. ".NETFramewor
2e650 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k")..           
2e660 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
2e670 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  d the name of th
2e680 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e  e platform (e.g.
2e690 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a   "WindowsCE")...
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2e6c0 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
2e6d0 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65  workName = frame
2e6e0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69  workList.Names[i
2e6f0 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20  ndex];..        
2e700 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
2e710 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72  latformName = fr
2e720 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2e730 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  formNames[index]
2e740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2e750 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2e760 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2e770 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64  : Skip all non-d
2e780 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b  esktop framework
2e790 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65 20 70  s (i.e. if the p
2e7a0 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..       
2e7b0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2e7c0 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75    name is not nu
2e7d0 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ll)...          
2e7e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2e7f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
2e800 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
2e810 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e820 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
2e830 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2e840 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2e850 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2e860 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70  E: Grab the supp
2e870 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f  orted versions o
2e880 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  f this particula
2e890 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
2e8a0 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d     //       fram
2e8b0 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20  ework...        
2e8c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2e8d0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
2e8e0 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  ionList framewor
2e8f0 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  kVersionList;...
2e900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e910 20 69 66 20 28 76 65 72 73 69 6f 6e 20 21 3d 20   if (version != 
2e920 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e930 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2e940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2e950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e960 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d        // NOTE: M
2e970 61 6e 75 61 6c 20 6f 76 65 72 72 69 64 65 20 6f  anual override o
2e980 66 20 74 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d  f the *ONE* fram
2e990 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20  ework version.. 
2e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e9b0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 70     //       to p
2e9c0 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  rocess...       
2e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e9f0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
2ea00 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20  rsionList = new 
2ea10 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a  VersionList();..
2ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea30 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
2ea40 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
2ea50 20 56 65 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e   Version(version
2ea60 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
2ea70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ea80 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2ea90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2eaa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eab0 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
2eac0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
2ead0 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
2eae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eaf0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2eb00 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72  workName, out fr
2eb10 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
2eb20 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  st) ||..        
2eb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb40 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
2eb50 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d  nList == null)).
2eb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eb70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb90 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ebb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ebc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ebd0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
2ebe0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
2ebf0 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
2ec00 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2ec10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ec20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ec30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2ec40 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2ec50 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2ec60 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2ec80 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2ec90 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2eca0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2ecb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ecc0 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e       "frameworkN
2ecd0 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65  ame = {0}, frame
2ece0 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31  workVersion = {1
2ecf0 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
2ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed10 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20  "platformName = 
2ed20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {2}", ForDisplay
2ed30 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c  (frameworkName),
2ed40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ed50 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2ed60 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2ed70 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed90 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74   ForDisplay(plat
2eda0 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63  formName)), trac
2edb0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edd0 20 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c     string instal
2ede0 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c  lDirectory = nul
2edf0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
2ee00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48            if (!H
2ee10 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  aveFrameworkDire
2ee20 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
2ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee40 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
2ee50 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
2ee60 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
2ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee80 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
2ee90 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65 72  ormName, perUser
2eea0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
2eeb0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eed0 20 20 20 20 20 20 20 72 65 66 20 69 6e 73 74 61         ref insta
2eee0 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  llDirectory)).. 
2eef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2ef20 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2ef30 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2ef40 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef60 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2ef70 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2ef80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2ef90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2efb0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
2efc0 30 7d 20 64 69 72 65 63 74 6f 72 79 20 6e 6f 74  0} directory not
2efd0 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20   found, " +..   
2efe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eff0 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69           "skippi
2f000 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c  ng...", ForDispl
2f010 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ay(frameworkVers
2f020 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
2f030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f040 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2f050 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2f070 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
2f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2f090 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f0a0 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62         if (callb
2f0b0 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack == null)..  
2f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2f0e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f0f0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
2f100 72 65 63 74 6f 72 79 20 3d 20 69 6e 73 74 61 6c  rectory = instal
2f110 6c 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20  lDirectory;.... 
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f130 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
2f140 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
2f150 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
2f160 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f180 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2f190 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2f1a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2f1b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2f1d0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2f1e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2f1f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
2f220 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72  ramework {0} dir
2f230 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69  ectory is invali
2f240 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  d, " +..        
2f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f260 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e      "skipping...
2f270 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
2f280 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
2f290 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2f2b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2f2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f2d0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2f2e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2f2f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61    directory = Pa
2f320 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
2f330 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b  tory, "Config");
2f340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2f350 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
2f360 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
2f370 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
2f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f3a0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2f3b0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2f3c0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2f3d0 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
2f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f3f0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2f400 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2f410 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2f420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f430 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2f440 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
2f450 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64 6f 65  irectory {1} doe
2f460 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
2f470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f480 20 20 20 20 20 20 20 22 65 78 69 73 74 2c 20 73         "exist, s
2f490 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
2f4a0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2f4b0 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
2f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4d0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2f4e0 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 20  ay(directory)), 
2f4f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2f500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f510 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2f520 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2f530 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f550 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
2f560 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
2f570 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 6d 61  e(directory, "ma
2f580 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29 3b 0d  chine.config");.
2f590 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f5a0 20 20 20 20 20 20 20 69 66 20 28 21 46 69 6c 65         if (!File
2f5b0 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61 6d 65  .Exists(fileName
2f5c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2f5d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5f0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2f600 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2f610 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20  riority.Low,..  
2f620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f630 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2f640 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2f650 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2f660 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f680 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
2f690 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d  ork {0} file {1}
2f6a0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
2f6b0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6d0 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
2f6e0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2f6f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
2f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f710 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2f720 69 73 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29  isplay(fileName)
2f730 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
2f740 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2f760 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2f780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f790 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c        bool local
2f7a0 53 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  Saved = false;..
2f7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f7c0 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62        if (!callb
2f7d0 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ack(..          
2f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7f0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
2f800 72 69 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c  riantName, name,
2f810 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
2f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f830 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e             typeN
2f840 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
2f850 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  e, installDirect
2f860 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
2f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f880 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70 65    clientData, pe
2f890 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 74 68  rUser, wow64, th
2f8a0 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8c0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
2f8d0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
2f8e0 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66 20  localSaved, ref 
2f8f0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f920 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f930 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f940 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2f970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f990 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c         if (local
2f9a0 53 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29  Saved && !saved)
2f9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
2f9d0 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ved = true;.... 
2f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9f0 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
2fa00 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
2fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
2fa30 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
2fa40 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2fa70 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2fa80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2fa90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2faa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f               "lo
2fac0 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20  calSaved = {0}, 
2fad0 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20  saved = {1}",.. 
2fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2fb00 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53  orDisplay(localS
2fb10 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61  aved), ForDispla
2fb20 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20  y(saved)),..    
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 74 72 61 63              trac
2fb50 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2fb80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2fb90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fba0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2fbb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
2fbc0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2fc10 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
2fc20 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
2fc30 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
2fc40 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
2fc50 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
2fc60 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  l ForEachFramewo
2fc70 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  rkRegistry(..   
2fc80 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
2fc90 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d  istry registry,.
2fca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61  .            Fra
2fcb0 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65  meworkList frame
2fcc0 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20  workList,..     
2fcd0 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
2fce0 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b  RegistryCallback
2fcf0 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
2fd00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76          string v
2fd10 65 72 73 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a  ersion, /* NOTE:
2fd20 20 4f 70 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20   Optional. */.. 
2fd30 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
2fd40 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
2fd50 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fd60 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
2fd70 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
2fd80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2fd90 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
2fda0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
2fdb0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
2fdc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2fdd0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
2fde0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
2fdf0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
2fe00 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
2fe10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2fe20 20 28 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75   (registry == nu
2fe30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2fe40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fe50 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2fe60 61 6c 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d  alid registry";.
2fe70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fe80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2fe90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2fea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2feb0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
2fec0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2fed0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2fee0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2fef0 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
2ff00 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  rk list";..     
2ff10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2ff20 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2ff30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2ff40 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2ff50 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
2ff60 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
2ff70 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
2ff80 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
2ff90 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2ffa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ffb0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2ffc0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
2ffd0 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
2ffe0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2fff0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
30000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
30010 20 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70       if (!IsSupp
30020 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67  ortedRootKey(reg
30030 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29  istry, rootKey))
30040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30060 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b   error = "root k
30070 65 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75  ey must be per-u
30080 73 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69  ser or per-machi
30090 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ne";..          
300a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
300b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
300c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
300d0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
300e0 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
300f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
30100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30110 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66     error = "no f
30120 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66  ramework names f
30130 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
30140 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
30150 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
30160 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30170 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
30180 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
30190 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
301a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
301b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
301c0 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  "no framework ve
301d0 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a  rsions found";..
301e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
30200 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
30210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30220 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
30230 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e  atformNames == n
30240 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
30250 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30260 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
30270 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20   platform names 
30280 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
30290 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
302a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
302b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
302c0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
302d0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
302e0 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  nt != frameworkL
302f0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
30300 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20  s.Count)..      
30310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30320 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
30330 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
30340 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63  framework name c
30350 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f  ount {0} does no
30360 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  t " +..         
30370 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63             "matc
30380 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  h platform name 
30390 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d  count {1}", fram
303a0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
303b0 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  Count,..        
303c0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
303d0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
303e0 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d  rmNames.Count);.
303f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
30400 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
30410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
30430 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
30440 30 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65  0; index < frame
30450 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
30460 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ount; index++)..
30470 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30490 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
304a0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
304b0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
304c0 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e   framework (e.g.
304d0 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22   ".NETFramework"
304e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
304f0 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20     //       and 
30500 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
30510 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22  platform (e.g. "
30520 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20  WindowsCE")...  
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
30540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30550 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
30560 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f  rkName = framewo
30570 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64  rkList.Names[ind
30580 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex];..          
30590 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
305a0 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d  tformName = fram
305b0 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
305c0 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d  rmNames[index];.
305d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
305e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
305f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
30600 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74  Grab the support
30610 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  ed versions of t
30620 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a  his particular..
30630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30640 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f  //       framewo
30650 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rk...           
30660 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
30670 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
30680 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65  List frameworkVe
30690 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  rsionList;....  
306a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
306b0 20 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c   (version != nul
306c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
306d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
306e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
306f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30700 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75     // NOTE: Manu
30710 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74  al override of t
30720 68 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f  he *ONE* framewo
30730 72 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20  rk version..    
30740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30750 2f 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63  //       to proc
30760 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
30770 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30790 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
307a0 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72  onList = new Ver
307b0 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20  sionList();..   
307c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
307d0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
307e0 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
307f0 72 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b  rsion(version));
30800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30810 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
30820 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
30830 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
30840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30850 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b    if (!framework
30860 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72  List.Versions.Tr
30870 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  yGetValue(..    
30880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30890 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
308a0 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65  kName, out frame
308b0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
308c0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
308d0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72               (fr
308e0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
308f0 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  st == null))..  
30900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30910 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
30930 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
30940 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
30950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30970 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72      foreach (Ver
30980 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
30990 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f  rsion in framewo
309a0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a  rkVersionList)..
309b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
309c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
309d0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
309e0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
309f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
30a00 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
30a10 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
30a20 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
30a30 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
30a40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
30a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a60 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65    "frameworkName
30a70 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72   = {0}, framewor
30a80 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20  kVersion = {1}, 
30a90 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c               "pl
30ab0 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d  atformName = {2}
30ac0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
30ad0 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20  ameworkName),.. 
30ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30af0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
30b00 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
30b10 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
30b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
30b30 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72  rDisplay(platfor
30b40 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  mName)), traceCa
30b50 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30b70 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f  if (!HaveFramewo
30b80 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  rkRegistry(..   
30b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ba0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
30bb0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
30bc0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
30bd0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
30be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30bf0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
30c00 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
30c10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
30c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30c30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c50 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
30c60 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
30c70 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c90 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
30ca0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
30cb0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
30cc0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
30cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ce0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
30cf0 20 7b 30 7d 20 72 65 67 69 73 74 72 79 20 6e 6f   {0} registry no
30d00 74 20 66 6f 75 6e 64 2c 20 22 20 2b 0d 0a 20 20  t found, " +..  
30d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
30d30 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
30d40 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
30d50 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
30d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30d70 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
30d80 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
30d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30da0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
30db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
30dc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30dd0 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
30de0 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e00 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
30e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30e20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
30e30 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
30e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e50 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
30e60 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
30e70 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
30e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30e90 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
30ea0 6f 72 6d 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 63  ormName, null, c
30eb0 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73  lientData, perUs
30ec0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
30ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ee0 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
30ef0 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20  issing, whatIf, 
30f00 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
30f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
30f30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
30f40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
30f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
30f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30f80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
30f90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
30fa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30fb0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
30fc0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
30fd0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
30fe0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
30ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31030 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
31040 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69    #region Per-Vi
31050 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73  sual Studio Vers
31060 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ion Handling..  
31070 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
31080 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61  atic void Initia
31090 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20  lizeVsList(..   
310a0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
310b0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
310c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ,..            C
310d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
310e0 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
310f0 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73 4c           ref VsL
31100 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20  ist vsList..    
31110 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
31120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31130 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
31140 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
31150 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20         vsList = 
31160 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d  new VsList();...
31170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
31180 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  (vsList.RootKey 
31190 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
311a0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
311b0 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74 4b  .RootKey = rootK
311c0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
311d0 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65     if (vsList.Ve
311e0 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
311f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31210 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
31220 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
31230 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
31240 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
31250 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
31260 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
31270 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 35 29 0d  ation.NoVs2005).
31280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31290 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
312a0 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
312b0 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20  sion(8, 0)); // 
312c0 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2005....        
312d0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
312e0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
312f0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
31300 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d  ation.NoVs2008).
31310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31320 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
31330 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
31340 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20  sion(9, 0)); // 
31350 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2008....        
31360 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
31370 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
31380 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
31390 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d  ation.NoVs2010).
313a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
313b0 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
313c0 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
313d0 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20  sion(10, 0));// 
313e0 32 30 31 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2010....        
313f0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
31400 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
31410 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
31420 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 32 29 0d  ation.NoVs2012).
31430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31440 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
31450 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
31460 73 69 6f 6e 28 31 31 2c 20 30 29 29 3b 2f 2f 20  sion(11, 0));// 
31470 32 30 31 32 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2012....        
31480 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
31490 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
314a0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
314b0 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 33 29 0d  ation.NoVs2013).
314c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314d0 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
314e0 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
314f0 73 69 6f 6e 28 31 32 2c 20 30 29 29 3b 2f 2f 20  sion(12, 0));// 
31500 32 30 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20  2013..          
31510 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
31520 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
31530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31570 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
31580 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
31590 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44 69   HaveVsVersionDi
315a0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
315b0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
315c0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
315d0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
315e0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
315f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31600 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
31610 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
31620 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
31630 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
31640 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31650 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
31660 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
31670 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
31680 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73 74   ref string inst
31690 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  allDirectory..  
316a0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
316b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
316c0 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
316d0 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
316e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
316f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
31700 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
31710 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
31720 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
31730 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
31740 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  r, wow64);....  
31750 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
31760 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
31770 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
31780 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
31790 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
317a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
317b0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
317c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
317d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
317e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
317f0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
31800 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31810 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
31820 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
31830 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
31840 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
31850 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
31860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31870 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
31880 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77  allDir", null, w
31890 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
318a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
318b0 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20      if (!(value 
318c0 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20  is string))..   
318d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
318e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
318f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31900 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
31910 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c  ry = (string)val
31920 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
31930 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
31940 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
31950 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
31960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31970 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
31980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31990 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
319a0 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
319b0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
319c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
319d0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
319e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
319f0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
31a00 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
31a10 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
31a20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
31a30 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
31a40 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
31a50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
31a60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69               "Vi
31a70 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d 20  sual Studio {0} 
31a80 66 6f 75 6e 64 20 69 6e 20 64 69 72 65 63 74 6f  found in directo
31a90 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20 20 20 20  ry {1}.",..     
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
31ab0 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
31ac0 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion), ForDisplay
31ad0 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
31ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31af0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
31b00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
31b10 20 20 20 20 20 20 69 6e 73 74 61 6c 6c 44 69 72        installDir
31b20 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
31b30 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
31b40 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
31b50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
31b60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
31b70 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
31b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
31bc0 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f  ..        [Metho
31bd0 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
31be0 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
31bf0 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72  ng)]..        pr
31c00 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
31c10 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  l ForEachVsVersi
31c20 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
31c30 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
31c40 69 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d  istry registry,.
31c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c  .            VsL
31c60 69 73 74 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20  ist vsList,..   
31c70 20 20 20 20 20 20 20 20 20 56 69 73 75 61 6c 53           VisualS
31c80 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c  tudioRegistryCal
31c90 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
31ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
31cb0 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
31cc0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
31cd0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
31ce0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
31cf0 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
31d00 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
31d10 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
31d20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
31d30 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
31d40 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
31d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
31d60 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
31d70 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
31d80 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
31d90 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
31da0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
31db0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
31dc0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
31dd0 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
31de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
31df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e00 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
31e10 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
31e20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
31e30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
31e40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
31e50 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
31e60 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
31e70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
31e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
31e90 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
31ea0 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
31eb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
31ec0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
31ed0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
31ee0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
31ef0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76  yKey rootKey = v
31f00 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a  sList.RootKey;..
31f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
31f20 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
31f30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
31f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
31f50 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
31f60 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
31f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
31f90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31fa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31fb0 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f 74  !IsSupportedRoot
31fc0 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72 6f  Key(registry, ro
31fd0 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20 20  otKey))..       
31fe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
31ff0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32000 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62  "root key must b
32010 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65  e per-user or pe
32020 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20  r-machine";..   
32030 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32040 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
32050 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32060 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
32070 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
32080 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
32090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
320a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
320b0 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f  o VS versions fo
320c0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
320d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
320e0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
320f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
32100 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
32110 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e  ion vsVersion in
32120 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
32130 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
32140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32150 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
32160 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
32170 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
32180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32190 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
321a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
321b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
321c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
321d0 20 20 20 20 20 22 76 73 56 65 72 73 69 6f 6e 20       "vsVersion 
321e0 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
321f0 61 79 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d  ay(vsVersion)),.
32200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32210 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
32220 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
32230 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
32240 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 20  nstallDirectory 
32250 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
32260 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
32270 48 61 76 65 56 73 56 65 72 73 69 6f 6e 44 69 72  HaveVsVersionDir
32280 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
32290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
322a0 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
322b0 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72  ion, suffix, per
322c0 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61  User, wow64, wha
322d0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
322e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
322f0 72 62 6f 73 65 2c 20 72 65 66 20 69 6e 73 74 61  rbose, ref insta
32300 6c 6c 44 69 72 65 63 74 6f 72 79 29 29 0d 0a 20  llDirectory)).. 
32310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
32320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32330 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
32340 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
32350 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
32360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32370 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
32380 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
32390 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
323a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
323b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
323c0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 7b 30  Visual Studio {0
323d0 7d 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69  } not found, ski
323e0 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20  pping...",..    
323f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32400 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 76      ForDisplay(v
32410 73 56 65 72 73 69 6f 6e 29 29 2c 20 74 72 61 63  sVersion)), trac
32420 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
32430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32440 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
32450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32470 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
32480 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
324a0 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
324b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
324c0 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20  callback(..     
324d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
324e0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
324f0 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
32500 61 63 6b 61 67 65 2c 20 69 6e 73 74 61 6c 6c 44  ackage, installD
32510 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
32520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32530 20 20 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 70     clientData, p
32540 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 74  erUser, wow64, t
32550 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20 77  hrowOnMissing, w
32560 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
32570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32580 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
32590 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
325a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
325b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
325c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
325d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
325e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
325f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32600 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
32610 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
32620 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
32630 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
32640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
32680 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
32690 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65  nfiguration File
326a0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
326b0 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
326c0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
326d0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
326e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
326f0 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62  tatic bool AddDb
32700 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
32710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
32720 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
32730 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
32740 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ng invariantName
32750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
32760 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
32770 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
32780 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
32790 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
327a0 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
327b0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
327c0 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
327d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
327e0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
327f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
32800 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
32810 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
32820 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
32830 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
32840 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
32850 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
32860 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
32870 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
32880 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
32890 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
328a0 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
328b0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
328c0 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
328d0 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
328e0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
328f0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
32900 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
32910 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
32920 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65  Element addEleme
32930 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
32940 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d  lectSingleNode(.
32950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32960 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58   String.Format(X
32970 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
32980 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  t, invariantName
32990 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74  )) as XmlElement
329a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
329b0 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20   if (addElement 
329c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
329d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
329e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
329f0 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d  ] elementNames =
32a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32a10 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d 2e          "system.
32a20 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76 69 64  data", "DbProvid
32a30 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a 20 20  erFactories"..  
32a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b                };
32a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32a60 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70      XmlElement p
32a70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
32a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32a90 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44        document.D
32aa0 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20  ocumentElement; 
32ab0 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  /* configuration
32ac0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
32ad0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
32ae0 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61  string elementNa
32af0 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d  me in elementNam
32b00 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es)..           
32b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32b20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
32b30 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75  lement = previou
32b40 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53  sElement.SelectS
32b50 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20  ingleNode(..    
32b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b70 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29      elementName)
32b80 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d   as XmlElement;.
32b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32ba0 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45 6c         if (addEl
32bb0 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
32be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
32bf0 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
32c00 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
32c10 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
32c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c30 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74   elementName, St
32c40 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
32c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c60 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73          previous
32c70 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68  Element.AppendCh
32c80 69 6c 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b  ild(addElement);
32c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32ca0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
32cc0 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
32cd0 20 61 64 64 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20   addElement;..  
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32cf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32d00 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20     addElement = 
32d10 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45  document.CreateE
32d20 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20  lement(..       
32d30 20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64               "ad
32d40 64 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79  d", String.Empty
32d50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
32d60 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c        previousEl
32d70 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c  ement.AppendChil
32d80 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
32d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32da0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
32db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32dd0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
32de0 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
32df0 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29  ttribute("name")
32e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32e10 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72         name, Str
32e20 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
32e30 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20  dinal))..       
32e40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32e50 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
32e60 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
32e70 22 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a  "name", name);..
32e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e90 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
32ea0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
32ec0 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61  !String.Equals(a
32ed0 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  ddElement.GetAtt
32ee0 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e  ribute("invarian
32ef0 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t"),..          
32f00 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72 69            invari
32f10 61 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43  antName, StringC
32f20 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
32f30 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
32f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32f50 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
32f60 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76  etAttribute("inv
32f70 61 72 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61  ariant", invaria
32f80 6e 74 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  ntName);..      
32f90 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
32fa0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
32fb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
32fc0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
32fd0 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d  g.Equals(addElem
32fe0 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
32ff0 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 29 2c  ("description"),
33000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33010 20 20 20 20 20 20 64 65 73 63 72 69 70 74 69 6f        descriptio
33020 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  n, StringCompari
33030 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
33040 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64                ad
33060 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72  dElement.SetAttr
33070 69 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69  ibute("descripti
33080 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69 6f 6e  on", description
33090 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
330a0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
330b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
330c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
330d0 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70 65 4e  string fullTypeN
330e0 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ame = String.For
330f0 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d  mat("{0}, {1}",.
33100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33110 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73 65 6d   typeName, assem
33120 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  blyName);....   
33130 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
33140 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45  ring.Equals(addE
33150 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62  lement.GetAttrib
33160 75 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20 20  ute("type"),..  
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33180 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c 20    fullTypeName, 
33190 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
331a0 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
331b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
331c0 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
331d0 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
331e0 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c 54  te("type", fullT
331f0 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ypeName);..     
33200 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
33210 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
33220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33230 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79         if (dirty
33240 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20   || whatIf)..   
33250 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33260 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
33270 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
33290 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
332a0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
332b0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
332c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332d0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
332e0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
332f0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
33300 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33310 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64 45             "addE
33320 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46  lement = {0}", F
33330 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45 6c 65  orDisplay(addEle
33340 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  ment)),..       
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33360 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
33370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33380 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
33390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
333a0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53        document.S
333b0 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ave(fileName);..
333c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
333d0 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b    filesModified+
333e0 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
333f0 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72        saved = tr
33400 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
33410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
33420 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
33430 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
33440 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
33450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
33490 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
334a0 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
334b0 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
334c0 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  )]..        priv
334d0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
334e0 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72  RemoveDbProvider
334f0 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
33500 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
33510 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
33520 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
33530 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
33540 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
33550 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
33560 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
33570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
33580 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
33590 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
335a0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
335b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
335c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
335d0 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61   bool dirty = fa
335e0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
335f0 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f    XmlDocument do
33600 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c  cument = new Xml
33610 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20  Document();.... 
33620 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
33630 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74  ent.PreserveWhit
33640 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a  espace = true;..
33650 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
33660 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61  ment.Load(fileNa
33670 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
33680 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 61      XmlElement a
33690 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
336a0 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
336b0 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20  eNode(..        
336c0 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
336d0 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41 64  ormat(XPathForAd
336e0 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  dElement, invari
336f0 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c  antName)) as Xml
33700 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
33710 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64 45          if (addE
33720 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
33730 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33750 61 64 64 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e  addElement.Paren
33760 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
33770 64 28 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a  d(addElement);..
33780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33790 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
337a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
337b0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
337c0 6c 65 6d 65 6e 74 20 72 65 6d 6f 76 65 45 6c 65  lement removeEle
337d0 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e  ment = document.
337e0 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
337f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
33800 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
33810 28 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45  (XPathForRemoveE
33820 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
33830 74 4e 61 6d 65 29 29 20 61 73 20 58 6d 6c 45 6c  tName)) as XmlEl
33840 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
33850 20 20 20 20 20 20 69 66 20 28 72 65 6d 6f 76 65        if (remove
33860 45 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29  Element != null)
33870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33890 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2e 50   removeElement.P
338a0 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65  arentNode.Remove
338b0 43 68 69 6c 64 28 72 65 6d 6f 76 65 45 6c 65 6d  Child(removeElem
338c0 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
338d0 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
338e0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
338f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33900 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20     if (dirty || 
33910 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
33920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33930 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
33940 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
33950 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
33960 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
33970 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
33980 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339a0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
339b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
339c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
339d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339e0 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65         "addEleme
339f0 6e 74 20 3d 20 7b 30 7d 2c 20 72 65 6d 6f 76 65  nt = {0}, remove
33a00 45 6c 65 6d 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d  Element = {1}",.
33a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33a20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
33a30 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 2c  lay(addElement),
33a40 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 6d 6f   ForDisplay(remo
33a50 76 65 45 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20  veElement)),..  
33a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a70 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
33a80 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
33a90 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
33aa0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
33ab0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
33ac0 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d  ent.Save(fileNam
33ad0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
33ae0 20 20 20 20 20 20 20 66 69 6c 65 73 4d 6f 64 69         filesModi
33af0 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  fied++;....     
33b00 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
33b10 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
33b20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
33b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
33b40 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
33b50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
33b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ba0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
33bb0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
33bc0 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64   ProcessDbProvid
33bd0 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
33be0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
33bf0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
33c00 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
33c10 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20  ariantName,..   
33c20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
33c30 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
33c40 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
33c50 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
33c60 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
33c70 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
33c80 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
33c90 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
33ca0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
33cb0 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
33cc0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
33cd0 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
33ce0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
33cf0 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
33d00 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
33d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33d20 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
33d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
33d40 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
33d50 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
33d60 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
33d70 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
33d80 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
33d90 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
33da0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
33db0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
33dc0 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
33dd0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
33de0 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
33df0 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
33e00 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
33e10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
33e20 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
33e30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33e40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
33e50 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
33e60 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61  mework config ca
33e70 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
33e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
33e90 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
33ea0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33eb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
33ec0 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
33ed0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33ee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
33ef0 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
33f00 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
33f10 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
33f20 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e  Name, invariantN
33f30 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
33f40 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
33f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33f60 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
33f70 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
33f80 20 20 20 20 20 41 64 64 44 62 50 72 6f 76 69 64       AddDbProvid
33f90 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fb0 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
33fc0 61 6e 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c 20 64  antName, name, d
33fd0 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65  escription, type
33fe0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
33ff0 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
34000 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  blyName, whatIf,
34010 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
34020 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ved, ref error);
34030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
34040 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
34050 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
34060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34070 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44    return RemoveD
34080 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
34090 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
340a0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
340b0 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20   invariantName, 
340c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
340d0 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20   ref saved,..   
340e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340f0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
34100 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
34110 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
34120 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
34130 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34180 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
34190 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72   Assembly Folder
341a0 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  s Handling..    
341b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
341c0 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73 73  ic string GetAss
341d0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e  emblyFoldersKeyN
341e0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
341f0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
34200 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
34210 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
34220 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
34230 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34240 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
34250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34260 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
34270 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
34280 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
34290 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
342a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
342b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
342c0 54 45 3a 20 54 68 69 73 20 72 65 67 69 73 74 72  TE: This registr
342d0 79 20 6b 65 79 20 61 70 70 65 61 72 73 20 74 6f  y key appears to
342e0 20 61 6c 77 61 79 73 20 62 65 20 33 32 2d 62 69   always be 32-bi
342f0 74 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  t only..        
34300 20 20 20 20 2f 2f 20 20 20 20 20 20 20 28 69 2e      //       (i.
34310 65 2e 20 70 72 6f 62 61 62 6c 79 20 62 65 63 61  e. probably beca
34320 75 73 65 20 69 74 20 69 73 20 6f 6e 6c 79 20 75  use it is only u
34330 73 65 64 20 62 79 20 56 69 73 75 61 6c 0d 0a 20  sed by Visual.. 
34340 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
34350 20 20 20 20 53 74 75 64 69 6f 2c 20 77 68 69 63      Studio, whic
34360 68 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  h is currently a
34370 6c 77 61 79 73 20 33 32 2d 62 69 74 20 6f 6e 6c  lways 32-bit onl
34380 79 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y)...           
34390 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
343a0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
343b0 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
343c0 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
343d0 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
343e0 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
343f0 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
34400 32 7d 5c 5c 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c  2}\\{3}\\Assembl
34410 79 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20  yFoldersEx" :.. 
34420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
34430 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  {0}\\Microsoft\\
34440 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d  {1}\\v{2}\\Assem
34450 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a  blyFoldersEx";..
34460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
34470 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
34480 61 74 28 66 6f 72 6d 61 74 2c 20 47 65 74 52 6f  at(format, GetRo
34490 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72 55 73 65  otKeyName(perUse
344a0 72 2c 20 77 6f 77 36 34 29 2c 0d 0a 20 20 20 20  r, wow64),..    
344b0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
344c0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
344d0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
344e0 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20  tformName);..   
344f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
34500 20 20 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 2f  ////////////////
34540 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
34550 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
34560 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73  tic bool AddToAs
34570 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
34580 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
34590 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
345a0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
345b0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
345c0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
345d0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
345e0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
345f0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
34600 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
34610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34620 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
34630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34640 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
34650 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34660 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
34670 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
34680 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
34690 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
346a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
346b0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
346c0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
346d0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
346e0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
346f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34700 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
34710 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  etAssemblyFolder
34720 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
34730 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
34740 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
34750 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
34760 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
34770 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
34780 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
34790 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
347a0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
347b0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
347c0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
347d0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
347e0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
347f0 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20   keyName, true, 
34800 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34810 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
34820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34830 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
34840 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34850 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34860 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
34870 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
34880 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
34890 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
348a0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
348b0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
348c0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
348d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
348e0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
348f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
34910 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
34920 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
34930 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34940 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34950 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
34960 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
34970 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
34980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34990 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
349a0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
349b0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
349c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
349d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
349e0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
349f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34a00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
34a30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
34a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a50 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
34a60 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
34a70 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
34a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a90 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
34aa0 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d   subKeyName);...
34ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34ac0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34ad0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
34ae0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
34af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34b00 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
34b10 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
34b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b30 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 6e         subKey, n
34b40 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 20  ull, directory, 
34b50 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
34b60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34b70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
34b80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34b90 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
34ba0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
34bb0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
34c00 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
34c10 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
34c20 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
34c30 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
34c40 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
34c50 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
34c60 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
34c70 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
34c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
34c90 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
34ca0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
34cb0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
34cc0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
34cd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
34ce0 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
34cf0 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
34d00 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
34d10 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
34d20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34d30 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
34d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34d50 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
34d60 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
34d70 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
34d80 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
34d90 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
34da0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
34db0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34dc0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73   keyName = GetAs
34dd0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
34de0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
34df0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
34e00 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
34e10 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
34e20 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a  Name, perUser,..
34e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34e40 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
34e50 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
34e60 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
34e70 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
34e80 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
34e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34ea0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
34eb0 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74  Name, true, what
34ec0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
34ed0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
34ef0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
34f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34f20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
34f30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
34f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f50 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
34f60 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
34f70 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
34f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34f90 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
34fa0 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
34fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34fe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34ff0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
35000 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
35010 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
35020 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
35030 62 4b 65 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f  bKeyName, throwO
35040 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66  nMissing, whatIf
35050 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
35060 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
35070 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
35080 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
35090 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
350a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
350e0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
350f0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
35100 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d  ool ProcessAssem
35110 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20  blyFolders(..   
35120 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
35130 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
35140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
35150 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
35160 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
35170 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
35180 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
35190 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
351a0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
351b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
351c0 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
351d0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
351e0 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
351f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
35200 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
35210 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
35220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
35230 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
35240 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g,..            
35250 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
35260 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
35270 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
35280 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
35290 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
352a0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
352b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
352c0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
352d0 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
352e0 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
352f0 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
35300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
35310 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
35320 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35340 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
35350 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62   framework callb
35360 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
35370 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
35380 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
35390 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
353a0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
353b0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
353c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
353d0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
353e0 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
353f0 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
35400 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
35410 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
35420 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
35430 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
35440 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
35450 20 20 20 20 20 20 20 20 4c 65 67 61 63 79 50 72          LegacyPr
35460 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 65 72 55 73  ojectName, perUs
35470 65 72 2c 20 77 6f 77 36 34 2c 20 66 61 6c 73 65  er, wow64, false
35480 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
35490 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
354a0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
354b0 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
354c0 20 20 20 20 20 20 20 41 64 64 54 6f 41 73 73 65         AddToAsse
354d0 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
354e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354f0 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
35500 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
35510 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
35520 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
35530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
35540 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61 69 72  rojectName, pair
35550 2e 58 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  .X, perUser, wow
35560 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  64, whatIf, verb
35570 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
35580 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
35590 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
355a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
355b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
355c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
355d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
355e0 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
355f0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
35600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
35610 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
35620 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
35630 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
35640 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
35650 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
35660 63 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c  ctName, perUser,
35670 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d   wow64, throwOnM
35680 69 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d  issing, whatIf,.
35690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
356a0 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65       verbose, re
356b0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
356c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
356d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
356e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
356f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
35700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
35740 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
35750 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64  sual Studio Hand
35760 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
35770 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
35780 69 6e 67 20 47 65 74 56 73 52 6f 6f 74 4b 65 79  ing GetVsRootKey
35790 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
357a0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
357b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
357c0 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20  ol wow64..      
357d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
357e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
357f0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
35800 72 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f  rmat("{0}\\Micro
35810 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64  soft\\VisualStud
35820 69 6f 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  io",..          
35830 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79        GetRootKey
35840 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
35850 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
35860 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
35870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
358c0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
358d0 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61  tring GetVsKeyNa
358e0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
358f0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
35900 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
35910 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
35920 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
35930 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  l perUser,..    
35940 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77          bool wow
35950 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
35960 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35970 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
35980 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
35990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
359a0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
359b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
359c0 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
359d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
359e0 20 20 20 20 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32       "{0}\\{1}{2
359f0 7d 22 2c 20 47 65 74 56 73 52 6f 6f 74 4b 65 79  }", GetVsRootKey
35a00 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
35a10 77 36 34 29 2c 20 76 73 56 65 72 73 69 6f 6e 2c  w64), vsVersion,
35a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35a30 20 20 73 75 66 66 69 78 29 3b 0d 0a 20 20 20 20    suffix);..    
35a40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35a50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
35a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
35aa0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75      #region Visu
35ab0 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20 53  al Studio Data S
35ac0 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ource Handling..
35ad0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
35ae0 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
35af0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
35b00 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
35b10 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
35b20 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
35b30 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
35b40 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
35b50 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a  string suffix,..
35b60 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
35b70 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
35b80 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
35b90 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
35ba0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
35bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
35bc0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
35bd0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
35be0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
35bf0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
35c00 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
35c10 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
35c20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
35c30 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
35c40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
35c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c60 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
35c70 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
35c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35c90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
35ca0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
35cc0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
35cd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
35ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35cf0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
35d00 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
35d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35d20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
35d30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
35d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
35d50 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
35d60 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
35d70 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 65  sion, suffix, pe
35d80 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a  rUser, wow64);..
35d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
35da0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
35db0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
35dc0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
35dd0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
35de0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
35df0 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
35e00 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
35e10 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
35e20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35e30 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
35e40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
35e50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
35e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
35e70 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
35e80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
35e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
35ea0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
35eb0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
35ec0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
35ef0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
35f00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
35f10 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
35f20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
35f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
35f40 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
35f50 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
35f60 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
35f70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
35f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f90 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75     key, "DataSou
35fa0 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  rces", true, wha
35fb0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35fe0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
35ff0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
36000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36020 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
36030 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
36040 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
36060 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
36070 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
36080 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d  \\DataSources",.
36090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
360b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
360c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
360d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
360e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36100 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
36110 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
36120 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d   dataSourceKey =
36130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
36150 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
36160 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
36170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
36190 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
361a0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
361b0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
361c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361d0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
361e0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
361f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
36200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36210 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74           if (dat
36220 61 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75  aSourceKey == nu
36230 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
36240 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36260 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
36270 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
36280 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
36290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362a0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63      "could not c
362b0 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b  reate registry k
362c0 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  ey: {0}\\{1}", k
362d0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
362e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362f0 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
36300 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69  aSourceId.ToStri
36310 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
36320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36340 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36360 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36380 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
36390 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
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 64 61 74 61 53 6f            dataSo
363c0 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53  urceKey, null, S
363d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
363e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
363f0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20             "{0} 
36400 44 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20  Database File", 
36410 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68  ProjectName), wh
36420 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
36430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36440 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
36450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36460 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36480 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
36490 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61  s value is new a
364a0 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a  s of 1.0.83.0...
364b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
364d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364e0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
364f0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
36500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36510 20 20 20 20 20 20 20 20 20 20 64 61 74 61 53 6f            dataSo
36520 75 72 63 65 4b 65 79 2c 20 22 44 65 66 61 75 6c  urceKey, "Defaul
36530 74 50 72 6f 76 69 64 65 72 22 2c 0d 0a 20 20 20  tProvider",..   
36540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36550 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
36560 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
36570 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
36580 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
36590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365a0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
365b0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
365c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
365e0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
365f0 53 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20  SourceKey,..    
36600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36610 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46          String.F
36620 6f 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e  ormat("Supportin
36630 67 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22  gProviders\\{0}"
36640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
36660 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
36670 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
36680 73 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20  sIdFormat)),..  
36690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366a0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
366b0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
366c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
366e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
366f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36700 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
36710 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
36720 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
36730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
36770 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
36780 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
36790 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
367a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  (..            M
367b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
367c0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
367d0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
367e0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
367f0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
36800 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
36810 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
36820 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
36830 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
36840 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
36850 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
36860 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
36870 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
36880 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
36890 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
368a0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
368b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
368c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
368d0 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
368e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
368f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36900 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
36910 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
36920 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
36930 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
36940 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
36950 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
36960 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
36970 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
36980 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36990 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
369a0 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
369b0 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
369c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
369d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
369e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
369f0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
36a00 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
36a10 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
36a20 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  x, perUser, wow6
36a30 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
36a40 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
36a50 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
36a60 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
36a70 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
36a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a90 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
36aa0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
36ab0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
36ac0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36ad0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
36ae0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
36af0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b10 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
36b20 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
36b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b40 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
36b50 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
36b60 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b80 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
36b90 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
36ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bb0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36be0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
36bf0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
36c00 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
36c10 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
36c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c30 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
36c40 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
36c50 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
36c60 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
36c70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36c80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
36c90 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
36ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36cb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36cd0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
36ce0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
36cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d00 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
36d10 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
36d20 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
36d30 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
36d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d50 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
36d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36d90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
36db0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
36dc0 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
36dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36de0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
36df0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
36e00 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
36e10 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e30 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
36e40 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
36e50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36e60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
36e70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
36e80 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
36e90 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
36ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36ee0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
36ef0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
36f00 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 53  l ProcessVsDataS
36f10 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
36f20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
36f30 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
36f40 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
36f50 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
36f60 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
36f70 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
36f80 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
36f90 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
36fa0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
36fb0 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
36fc0 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
36fd0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
36fe0 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
36ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37000 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
37010 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
37020 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
37030 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
37040 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
37050 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
37060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
37070 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
37080 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
37090 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
370a0 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
370b0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
370c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
370d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
370e0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
370f0 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
37100 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37110 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37120 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37130 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
37140 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
37150 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
37160 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
37170 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
37180 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
37190 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
371a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
371b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
371c0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
371d0 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
371e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
371f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
37200 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
37210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
37220 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
37230 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37240 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
37250 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
37260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37270 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
37280 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
37290 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c  ackage, perUser,
372a0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
372b0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
372c0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
372d0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
372e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
372f0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
37300 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
37310 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
37320 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f  n RemoveVsDataSo
37330 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
37340 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
37350 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
37360 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
37370 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d  perUser, wow64,.
37380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37390 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
373a0 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
373b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
373c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
373d0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
373e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
373f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37430 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
37440 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
37450 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65  dio Data Provide
37460 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  r Handling..    
37470 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
37480 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74  ic bool AddVsDat
37490 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
374a0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
374b0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
374c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
374d0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
374e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
374f0 72 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20  ring suffix,..  
37500 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
37510 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
37520 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
37530 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
37540 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
37550 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
37560 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
37570 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
37580 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
37590 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
375a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
375b0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
375c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
375d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
375e0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
375f0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
37600 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
37610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
37620 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
37630 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
37650 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
37660 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37670 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
37680 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
37690 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
376a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
376b0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
376c0 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
376e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
376f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
37700 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
37710 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
37720 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
37730 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
37740 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  r, wow64);....  
37750 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
37760 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
37770 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
37780 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
37790 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
377a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
377b0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
377c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
377d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
377e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
377f0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
37800 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
37810 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37820 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
37830 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
37840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37850 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
37860 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
37870 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
37880 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
37890 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
378a0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
378b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
378c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
378d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
378e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
378f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
37900 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
37910 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
37920 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
37930 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
37940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
37950 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65  ey, "DataProvide
37960 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  rs", true, whatI
37970 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
37980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
379a0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
379b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
379c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
379d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
379e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
379f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
37a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
37a20 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
37a30 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
37a40 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d  DataProviders",.
37a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37a60 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
37a70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
37a90 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ab0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
37ac0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
37ad0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
37ae0 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
37af0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
37b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
37b20 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
37b30 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
37b60 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
37b70 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
37b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b90 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
37ba0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
37bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37be0 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
37bf0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
37c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c30 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
37c40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
37c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c60 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
37c70 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
37c80 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
37c90 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20  1}", key,..     
37ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37cb0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
37cc0 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
37cd0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
37ce0 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
37cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
37d10 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
37d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
37d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37d40 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
37d50 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
37d60 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d80 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
37d90 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70  y, null, Descrip
37da0 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20  tion, whatIf,.. 
37db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37dc0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
37dd0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
37de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37df0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
37e00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
37e10 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20  OTE: This value 
37e20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30  is new as of 1.0
37e30 2e 38 33 2e 30 2e 20 20 48 6f 77 65 76 65 72 2c  .83.0.  However,
37e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37e50 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
37e60 20 20 20 69 74 20 73 68 6f 75 6c 64 20 6f 6e 6c     it should onl
37e70 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 20  y be set if the 
37e80 70 61 63 6b 61 67 65 20 61 73 73 65 6d 62 6c 79  package assembly
37e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ea0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
37eb0 20 20 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 61     and all the a
37ec0 73 73 65 6d 62 6c 69 65 73 20 69 74 20 72 65 66  ssemblies it ref
37ed0 65 72 73 20 74 6f 20 61 72 65 20 62 65 69 6e 67  ers to are being
37ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37ef0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
37f00 20 20 20 70 6c 61 63 65 64 20 69 6e 74 6f 20 74     placed into t
37f10 68 65 20 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62  he global assemb
37f20 6c 79 20 63 61 63 68 65 2e 0d 0a 20 20 20 20 20  ly cache...     
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f40 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
37f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
37f60 66 20 28 70 61 63 6b 61 67 65 2e 47 6c 6f 62 61  f (package.Globa
37f70 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 29 0d  lAssemblyCache).
37f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fb0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
37fc0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
37fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ff0 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
38000 79 2c 20 22 41 73 73 65 6d 62 6c 79 22 2c 0d 0a  y, "Assembly",..
38010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38030 70 61 63 6b 61 67 65 2e 44 65 73 69 67 6e 65 72  package.Designer
38040 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53  AssemblyName.ToS
38050 74 72 69 6e 67 28 29 2c 0d 0a 20 20 20 20 20 20  tring(),..      
38060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38070 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
38080 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
38090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
380b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
380e0 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75   NOTE: This valu
380f0 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31  e is new as of 1
38100 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20  .0.83.0...      
38110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38120 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
38130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
38140 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
38150 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
38160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38170 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
38180 4b 65 79 2c 20 22 41 73 73 6f 63 69 61 74 65 64  Key, "Associated
38190 53 6f 75 72 63 65 22 2c 0d 0a 20 20 20 20 20 20  Source",..      
381a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381b0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
381c0 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
381d0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
381e0 0d 0a 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 77 68                wh
38200 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
38210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
38220 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
38230 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
38240 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
38250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38260 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
38270 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  , "InvariantName
38280 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
38290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382a0 70 61 63 6b 61 67 65 2e 50 72 6f 76 69 64 65 72  package.Provider
382b0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77  InvariantName, w
382c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
382d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
382e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
382f0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
38300 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38320 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
38330 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c  y, "Technology",
38340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
38360 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68  ckage.AdoNetTech
38370 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72 69 6e  nologyId.ToStrin
38380 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
38390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383a0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
383b0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
383c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
383d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
383e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
383f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
38400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
38410 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
38420 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c 65  "CodeBase", file
38430 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20  Name, whatIf,.. 
38440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38450 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
38460 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38480 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
38490 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
384a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384b0 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
384c0 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79 53  erKey, "FactoryS
384d0 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20 20  ervice",..      
384e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384f0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65        package.Se
38500 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
38510 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
38520 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
38530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38540 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
38550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38560 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
38570 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
38580 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
38590 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
385a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385b0 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
385c0 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74  cts\\DataConnect
385d0 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a  ionUIControl",..
385e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385f0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
38600 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
38610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38620 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
38630 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
38640 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
38650 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
38660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38670 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
38680 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63  ects\\DataConnec
38690 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 22 2c  tionProperties",
386a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
386b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
386c0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
386d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
386e0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
386f0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
38700 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
38710 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
38720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38730 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
38740 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
38750 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20  ectionSupport", 
38760 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
38770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38780 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
38790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
387a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
387b0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
387c0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
387d0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
387e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387f0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
38800 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63  jects\\DataObjec
38810 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49  tSupport", whatI
38820 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
38830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20