System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact cc26c9c44dc792e4691e5c7073888c0874cfd6ea:


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 43 6f 72 65 47 6c  ..        CoreGl
0d60: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
0d70: 65 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20  e = 0x1,..      
0d80: 20 20 4c 69 6e 71 47 6c 6f 62 61 6c 41 73 73 65    LinqGlobalAsse
0d90: 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78 32 2c  mblyCache = 0x2,
0da0: 0d 0a 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f  ..        Ef6Glo
0db0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
0dc0: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20   = 0x4,..       
0dd0: 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73   AssemblyFolders
0de0: 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20   = 0x8,..       
0df0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
0e00: 72 79 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20 20  ry = 0x10,..    
0e10: 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d 20      VsPackage = 
0e20: 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 56  0x20,..        V
0e30: 73 50 61 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73  sPackageGlobalAs
0e40: 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30 78  semblyCache = 0x
0e50: 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  40,..        VsD
0e60: 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78 38 30  ataSource = 0x80
0e70: 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 61 74  ,..        VsDat
0e80: 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78 31 30  aProvider = 0x10
0e90: 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44 65  0,..        VsDe
0ea0: 76 45 6e 76 53 65 74 75 70 20 3d 20 30 78 32 30  vEnvSetup = 0x20
0eb0: 30 2c 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  0,..        #end
0ec0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
0ed0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0f20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6d       #region Com
0f30: 70 6f 73 69 74 65 20 56 61 6c 75 65 73 0d 0a 20  posite Values.. 
0f40: 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
0f50: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
0f60: 63 68 65 20 3d 20 43 6f 72 65 47 6c 6f 62 61 6c  che = CoreGlobal
0f70: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 0d  AssemblyCache |.
0f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fa0: 20 20 20 20 20 20 20 20 4c 69 6e 71 47 6c 6f 62          LinqGlob
0fb0: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20  alAssemblyCache 
0fc0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fe0: 20 20 20 20 20 20 20 20 20 20 45 66 36 47 6c 6f            Ef6Glo
0ff0: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1000: 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ,....        ///
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1060: 46 72 61 6d 65 77 6f 72 6b 20 3d 20 46 72 61 6d  Framework = Fram
1070: 65 77 6f 72 6b 47 6c 6f 62 61 6c 41 73 73 65 6d  eworkGlobalAssem
1080: 62 6c 79 43 61 63 68 65 20 7c 20 41 73 73 65 6d  blyCache | Assem
1090: 62 6c 79 46 6f 6c 64 65 72 73 20 7c 0d 0a 20 20  blyFolders |..  
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b0: 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74    DbProviderFact
10c0: 6f 72 79 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ory,....        
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1120: 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b 61 67     Vs = VsPackag
1130: 65 20 7c 20 56 73 50 61 63 6b 61 67 65 47 6c 6f  e | VsPackageGlo
1140: 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65  balAssemblyCache
1150: 20 7c 20 56 73 44 61 74 61 53 6f 75 72 63 65 20   | VsDataSource 
1160: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
1170: 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 20 7c  VsDataProvider |
1180: 20 56 73 44 65 76 45 6e 76 53 65 74 75 70 2c 0d   VsDevEnvSetup,.
1190: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 41 6c  //....        Al
11f0: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1200: 61 63 68 65 20 3d 20 46 72 61 6d 65 77 6f 72 6b  ache = Framework
1210: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1220: 63 68 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20  che |..         
1230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1240: 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61 67          VsPackag
1250: 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  eGlobalAssemblyC
1260: 61 63 68 65 2c 0d 0a 0d 0a 20 20 20 20 20 20 20  ache,....       
1270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12c0: 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77      All = Framew
12d0: 6f 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20  ork | Vs,....   
12e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1330: 20 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70          AllExcep
1340: 74 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  tGlobalAssemblyC
1350: 61 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 41 6c  ache = All & ~Al
1360: 6c 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43  lGlobalAssemblyC
1370: 61 63 68 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  ache,..        #
1380: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1390: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
13a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13e0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
13f0: 53 75 67 67 65 73 74 65 64 20 44 65 66 61 75 6c  Suggested Defaul
1400: 74 20 56 61 6c 75 65 73 0d 0a 20 20 20 20 20 20  t Values..      
1410: 20 20 44 65 66 61 75 6c 74 20 3d 20 41 6c 6c 0d    Default = All.
1420: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
1430: 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ion..    }....  
1440: 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1490: 0a 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a  .    [Flags()]..
14a0: 20 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20      public enum 
14b0: 50 72 6f 76 69 64 65 72 46 6c 61 67 73 0d 0a 20  ProviderFlags.. 
14c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 72     {..        #r
14d0: 65 67 69 6f 6e 20 4e 6f 72 6d 61 6c 20 56 61 6c  egion Normal Val
14e0: 75 65 73 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e  ues..        Non
14f0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
1500: 20 20 53 79 73 74 65 6d 45 66 36 4d 75 73 74 42    SystemEf6MustB
1510: 65 47 6c 6f 62 61 6c 20 3d 20 30 78 31 2c 0d 0a  eGlobal = 0x1,..
1520: 20 20 20 20 20 20 20 20 44 69 64 4c 69 6e 71 46          DidLinqF
1530: 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 32 2c  orceTrace = 0x2,
1540: 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66 36  ..        DidEf6
1550: 46 6f 72 63 65 54 72 61 63 65 20 3d 20 30 78 34  ForceTrace = 0x4
1560: 2c 0d 0a 20 20 20 20 20 20 20 20 44 69 64 45 66  ,..        DidEf
1570: 36 52 65 73 6f 6c 76 65 54 72 61 63 65 20 3d 20  6ResolveTrace = 
1580: 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 46 6f  0x8,..        Fo
1590: 72 63 65 4c 69 6e 71 45 6e 61 62 6c 65 64 20 3d  rceLinqEnabled =
15a0: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
15b0: 46 6f 72 63 65 4c 69 6e 71 44 69 73 61 62 6c 65  ForceLinqDisable
15c0: 64 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20 20 20  d = 0x20,..     
15d0: 20 20 20 46 6f 72 63 65 45 66 36 45 6e 61 62 6c     ForceEf6Enabl
15e0: 65 64 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20  ed = 0x40,..    
15f0: 20 20 20 20 46 6f 72 63 65 45 66 36 44 69 73 61      ForceEf6Disa
1600: 62 6c 65 64 20 3d 20 30 78 38 30 2c 0d 0a 20 20  bled = 0x80,..  
1610: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1680: 72 65 67 69 6f 6e 20 53 75 67 67 65 73 74 65 64  region Suggested
1690: 20 44 65 66 61 75 6c 74 20 56 61 6c 75 65 73 0d   Default Values.
16a0: 0a 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74  .        Default
16b0: 20 3d 20 4e 6f 6e 65 0d 0a 20 20 20 20 20 20 20   = None..       
16c0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
16d0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
16e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1720: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c  /////....    [Fl
1730: 61 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c  ags()]..    publ
1740: 69 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69  ic enum TracePri
1750: 6f 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20  ority..    {..  
1760: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4e 6f        #region No
1770: 72 6d 61 6c 20 56 61 6c 75 65 73 0d 0a 20 20 20  rmal Values..   
1780: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1790: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
17a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
17b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
17c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
17d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
17e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
17f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1800: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1810: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1820: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1830: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1840: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1850: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1860: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1870: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18d0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18e0: 6e 20 53 75 67 67 65 73 74 65 64 20 44 65 66 61  n Suggested Defa
18f0: 75 6c 74 20 46 6c 61 67 73 0d 0a 20 20 20 20 20  ult Flags..     
1900: 20 20 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64     Default = Med
1910: 69 75 6d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ium..        #en
1920: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
1930: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1940: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
1950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1970: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
19a0: 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61 73 73   Installer Class
19b0: 0d 0a 23 69 66 20 4e 45 54 5f 34 30 20 7c 7c 20  ..#if NET_40 || 
19c0: 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35  NET_45 || NET_45
19d0: 31 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74 79  1..    [Security
19e0: 43 72 69 74 69 63 61 6c 28 29 5d 0d 0a 23 65 6c  Critical()]..#el
19f0: 73 65 0d 0a 20 20 20 20 5b 53 65 63 75 72 69 74  se..    [Securit
1a00: 79 50 65 72 6d 69 73 73 69 6f 6e 28 53 65 63 75  yPermission(Secu
1a10: 72 69 74 79 41 63 74 69 6f 6e 2e 4c 69 6e 6b 44  rityAction.LinkD
1a20: 65 6d 61 6e 64 2c 20 55 6e 6d 61 6e 61 67 65 64  emand, Unmanaged
1a30: 43 6f 64 65 20 3d 20 74 72 75 65 29 5d 0d 0a 23  Code = true)]..#
1a40: 65 6e 64 69 66 0d 0a 20 20 20 20 69 6e 74 65 72  endif..    inter
1a50: 6e 61 6c 20 73 74 61 74 69 63 20 63 6c 61 73 73  nal static class
1a60: 20 49 6e 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20   Installer..    
1a70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  {..        #regi
1a80: 6f 6e 20 55 6e 73 61 66 65 20 4e 61 74 69 76 65  on Unsafe Native
1a90: 20 4d 65 74 68 6f 64 73 20 43 6c 61 73 73 0d 0a   Methods Class..
1aa0: 20 20 20 20 20 20 20 20 5b 53 75 70 70 72 65 73          [Suppres
1ab0: 73 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 53 65  sUnmanagedCodeSe
1ac0: 63 75 72 69 74 79 28 29 5d 0d 0a 20 20 20 20 20  curity()]..     
1ad0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
1ae0: 64 20 63 6c 61 73 73 20 55 6e 73 61 66 65 4e 61  d class UnsafeNa
1af0: 74 69 76 65 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tiveMethods..   
1b00: 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
1b10: 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
1b20: 20 23 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20   #region Native 
1b30: 57 69 6e 33 32 20 43 6f 6e 73 74 61 6e 74 73 0d  Win32 Constants.
1b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
1b50: 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 4d  vate const int M
1b60: 41 58 5f 50 41 54 48 20 3d 20 32 36 30 3b 0d 0a  AX_PATH = 260;..
1b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1bd0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
1be0: 6e 74 20 43 53 49 44 4c 5f 53 59 53 54 45 4d 58  nt CSIDL_SYSTEMX
1bf0: 38 36 20 3d 20 30 78 30 30 32 39 3b 0d 0a 0d 0a  86 = 0x0029;....
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1c60: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74  rivate const int
1c70: 20 53 48 47 46 50 5f 54 59 50 45 5f 43 55 52 52   SHGFP_TYPE_CURR
1c80: 45 4e 54 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20  ENT = 0;....    
1c90: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1ce0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1cf0: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 53 5f 4f  te const int S_O
1d00: 4b 20 3d 20 30 3b 20 2f 2a 20 48 52 45 53 55 4c  K = 0; /* HRESUL
1d10: 54 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  T */..          
1d20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1d30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1d90: 72 65 67 69 6f 6e 20 4e 61 74 69 76 65 20 57 69  region Native Wi
1da0: 6e 64 6f 77 73 20 4d 65 74 68 6f 64 73 0d 0a 20  ndows Methods.. 
1db0: 20 20 20 20 20 20 20 20 20 20 20 5b 44 6c 6c 49             [DllI
1dc0: 6d 70 6f 72 74 28 22 73 68 66 6f 6c 64 65 72 2e  mport("shfolder.
1dd0: 64 6c 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  dll",..         
1de0: 20 20 20 20 20 20 20 43 61 6c 6c 69 6e 67 43 6f         CallingCo
1df0: 6e 76 65 6e 74 69 6f 6e 20 3d 20 43 61 6c 6c 69  nvention = Calli
1e00: 6e 67 43 6f 6e 76 65 6e 74 69 6f 6e 2e 57 69 6e  ngConvention.Win
1e10: 61 70 69 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  api,..          
1e20: 20 20 20 20 20 20 43 68 61 72 53 65 74 20 3d 20        CharSet = 
1e30: 43 68 61 72 53 65 74 2e 41 75 74 6f 2c 20 42 65  CharSet.Auto, Be
1e40: 73 74 46 69 74 4d 61 70 70 69 6e 67 20 3d 20 66  stFitMapping = f
1e50: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
1e60: 20 20 20 20 20 20 20 54 68 72 6f 77 4f 6e 55 6e         ThrowOnUn
1e70: 6d 61 70 70 61 62 6c 65 43 68 61 72 20 3d 20 74  mappableChar = t
1e80: 72 75 65 2c 20 53 65 74 4c 61 73 74 45 72 72 6f  rue, SetLastErro
1e90: 72 20 3d 20 74 72 75 65 29 5d 0d 0a 20 20 20 20  r = true)]..    
1ea0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1eb0: 73 74 61 74 69 63 20 65 78 74 65 72 6e 20 69 6e  static extern in
1ec0: 74 20 53 48 47 65 74 46 6f 6c 64 65 72 50 61 74  t SHGetFolderPat
1ed0: 68 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h(..            
1ee0: 20 20 20 20 49 6e 74 50 74 72 20 68 57 6e 64 4f      IntPtr hWndO
1ef0: 77 6e 65 72 2c 20 69 6e 74 20 6e 46 6f 6c 64 65  wner, int nFolde
1f00: 72 2c 20 49 6e 74 50 74 72 20 68 54 6f 6b 65 6e  r, IntPtr hToken
1f10: 2c 20 75 69 6e 74 20 66 6c 61 67 73 2c 0d 0a 20  , uint flags,.. 
1f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
1f30: 6e 74 50 74 72 20 62 75 66 66 65 72 20 2f 2a 20  ntPtr buffer /* 
1f40: 3e 3d 20 4d 41 58 5f 50 41 54 48 20 2a 2f 29 3b  >= MAX_PATH */);
1f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
1f60: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1f70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1fc0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1fd0: 6f 6e 20 50 75 62 6c 69 63 20 57 72 61 70 70 65  on Public Wrappe
1fe0: 72 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  r Methods..     
1ff0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2000: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 53  atic string GetS
2010: 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29  ystemDirectory()
2020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2040: 20 49 6e 74 50 74 72 20 62 75 66 66 65 72 20 3d   IntPtr buffer =
2050: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 0d   IntPtr.Zero;...
2060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2070: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
2080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2090: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 75 66               buf
20a0: 66 65 72 20 3d 20 4d 61 72 73 68 61 6c 2e 41 6c  fer = Marshal.Al
20b0: 6c 6f 63 43 6f 54 61 73 6b 4d 65 6d 28 0d 0a 20  locCoTaskMem(.. 
20c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d0: 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 63 68         sizeof(ch
20e0: 61 72 29 20 2a 20 28 4d 41 58 5f 50 41 54 48 20  ar) * (MAX_PATH 
20f0: 2b 20 31 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  + 1));....      
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2110: 20 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50   (buffer != IntP
2120: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2150: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 48 47           if (SHG
2160: 65 74 46 6f 6c 64 65 72 50 61 74 68 28 49 6e 74  etFolderPath(Int
2170: 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20  Ptr.Zero,..     
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 20 20 20 20 20 20 20 20 43 53 49 44 4c             CSIDL
21a0: 5f 53 59 53 54 45 4d 58 38 36 2c 20 49 6e 74 50  _SYSTEMX86, IntP
21b0: 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20 20  tr.Zero,..      
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d0: 20 20 20 20 20 20 20 20 20 20 53 48 47 46 50 5f            SHGFP_
21e0: 54 59 50 45 5f 43 55 52 52 45 4e 54 2c 20 62 75  TYPE_CURRENT, bu
21f0: 66 66 65 72 29 20 3d 3d 20 53 5f 4f 4b 29 0d 0a  ffer) == S_OK)..
2200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2210: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61         return Ma
2240: 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e  rshal.PtrToStrin
2250: 67 41 75 74 6f 28 62 75 66 66 65 72 29 3b 0d 0a  gAuto(buffer);..
2260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2270: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22b0: 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
22c0: 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
22d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2300: 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f           // TODO
2310: 3a 20 49 73 20 74 68 69 73 20 74 68 65 20 72 69  : Is this the ri
2320: 67 68 74 20 65 72 72 6f 72 20 68 61 6e 64 6c 69  ght error handli
2330: 6e 67 20 73 6f 6c 75 74 69 6f 6e 0d 0a 20 20 20  ng solution..   
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2350: 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 75 73 65   //       to use
2360: 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 3f 0d   at this point?.
2370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2380: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2390: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
23a0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
23b0: 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
23c0: 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20  y.MediumHigh,.. 
23d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e0: 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
23f0: 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2400: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2410: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2420: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
2430: 75 6c 64 20 6e 6f 74 20 67 65 74 20 73 79 73 74  uld not get syst
2440: 65 6d 20 64 69 72 65 63 74 6f 72 79 3a 20 7b 30  em directory: {0
2450: 7d 22 2c 20 65 29 2c 0d 0a 20 20 20 20 20 20 20  }", e),..       
2460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2470: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2490: 20 20 20 20 20 20 20 20 74 68 72 6f 77 3b 0d 0a          throw;..
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24c0: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f0: 20 20 20 69 66 20 28 62 75 66 66 65 72 20 21 3d     if (buffer !=
2500: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
2540: 72 73 68 61 6c 2e 46 72 65 65 43 6f 54 61 73 6b  rshal.FreeCoTask
2550: 4d 65 6d 28 62 75 66 66 65 72 29 3b 0d 0a 20 20  Mem(buffer);..  
2560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2570: 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20 49        buffer = I
2580: 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25d0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
25e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 23 65    #endregion..#e
2600: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
2610: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2620: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2680: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2690: 65 20 48 65 6c 70 65 72 20 43 6c 61 73 73 65 73  e Helper Classes
26a0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
26b0: 6e 20 41 6e 79 50 61 69 72 20 43 6c 61 73 73 0d  n AnyPair Class.
26c0: 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
26d0: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 41 6e   sealed class An
26e0: 79 50 61 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20  yPair<T1, T2>.. 
26f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2700: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
2710: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
2720: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
2730: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
2740: 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20  / WARNING: This 
2750: 63 6f 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64  constructor prod
2760: 75 63 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c  uces an immutabl
2770: 65 20 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a  e "empty" pair..
2780: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2790: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d          object..
27a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
27b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
27c0: 6c 69 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20  lic AnyPair().. 
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
27e0: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
27f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2800: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
2810: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
2820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2830: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2870: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2880: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
2890: 6e 79 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20  nyPair(T1 x)..  
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
28b0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
28c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28d0: 20 20 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20         this.x = 
28e0: 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x;..            
28f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2900: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2940: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2950: 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61      public AnyPa
2960: 69 72 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a  ir(T1 x, T2 y)..
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 3a 20 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20  : this(x)..     
2990: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29a0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 79            this.y
29b0: 20 3d 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   = y;..         
29c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2a40: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
2a50: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
2a60: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 31        private T1
2a70: 20 78 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   x;..           
2a80: 20 70 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20   public T1 X..  
2a90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
2ab0: 20 7b 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a   { return x; }..
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2b30: 70 72 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20  private T2 y;.. 
2b40: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2b50: 63 20 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20  c T2 Y..        
2b60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b70: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2b80: 75 72 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20  urn y; }..      
2b90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2ba0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2bb0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2bc0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2bd0: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
2c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c20: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2c30: 67 69 6f 6e 20 54 72 61 63 65 4f 70 73 20 43 6c  gion TraceOps Cl
2c40: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
2c50: 76 61 74 65 20 73 74 61 74 69 63 20 63 6c 61 73  vate static clas
2c60: 73 20 54 72 61 63 65 4f 70 73 0d 0a 20 20 20 20  s TraceOps..    
2c70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2c80: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
2c90: 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
2ca0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2cb0: 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  e const string D
2cc0: 65 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61  efaultDebugForma
2cd0: 74 20 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40 20  t = "#{0:000} @ 
2ce0: 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 20 20 20 20  {1}: {2}";..    
2cf0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2d00: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
2d10: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20  aultTraceFormat 
2d20: 3d 20 22 23 7b 30 3a 30 30 30 7d 20 40 20 7b 31  = "#{0:000} @ {1
2d30: 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  }: {2}";....    
2d40: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2d50: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 73 6f  const string Iso
2d60: 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70  8601DateTimeOutp
2d70: 75 74 46 6f 72 6d 61 74 20 3d 0d 0a 20 20 20 20  utFormat =..    
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 22 79 79 79              "yyy
2d90: 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d 6d 3a 73 73  y.MM.ddTHH:mm:ss
2da0: 2e 66 66 66 66 66 66 66 22 3b 0d 0a 20 20 20 20  .fffffff";..    
2db0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2dc0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2dd0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2e20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
2e30: 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
2e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
2e50: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
2e60: 65 63 74 20 73 79 6e 63 52 6f 6f 74 20 3d 20 6e  ect syncRoot = n
2e70: 65 77 20 6f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  ew object();..  
2e80: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2e90: 65 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65  e static long ne
2ea0: 78 74 44 65 62 75 67 49 64 3b 0d 0a 20 20 20 20  xtDebugId;..    
2eb0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2ec0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74  static long next
2ed0: 54 72 61 63 65 49 64 3b 0d 0a 20 20 20 20 20 20  TraceId;..      
2ee0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2ef0: 61 74 69 63 20 49 4c 69 73 74 3c 54 72 61 63 65  atic IList<Trace
2f00: 4c 69 73 74 65 6e 65 72 3e 20 64 65 62 75 67 4c  Listener> debugL
2f10: 69 73 74 65 6e 65 72 73 3b 0d 0a 20 20 20 20 20  isteners;..     
2f20: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
2f30: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2f40: 69 74 79 20 64 65 62 75 67 50 72 69 6f 72 69 74  ity debugPriorit
2f50: 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74  y = TracePriorit
2f60: 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20  y.Default;..    
2f70: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2f80: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2f90: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
2fa0: 74 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69  ty = TracePriori
2fb0: 74 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20  ty.Default;..   
2fc0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2fd0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 64   static string d
2fe0: 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65 66  ebugFormat = Def
2ff0: 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 3b  aultDebugFormat;
3000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
3010: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
3020: 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 20  ing traceFormat 
3030: 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46 6f  = DefaultTraceFo
3040: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
3050: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30c0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
30d0: 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
30e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
30f0: 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61 63  blic static Trac
3100: 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50  ePriority DebugP
3110: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
3120: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3130: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f          get { lo
3140: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20  ck (syncRoot) { 
3150: 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f  return debugPrio
3160: 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rity; } }..     
3170: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
3180: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
3190: 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74 79   { debugPriority
31a0: 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20   = value; } }.. 
31b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
31d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3210: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3220: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
3230: 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63 65  cePriority Trace
3240: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
3250: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3260: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
3270: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
3280: 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
3290: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
32a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
32b0: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
32c0: 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  ) { tracePriorit
32d0: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3340: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3350: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74  public static st
3360: 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61 74  ring DebugFormat
3370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
3380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3390: 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e   get { lock (syn
33a0: 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20  cRoot) { return 
33b0: 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20 7d  debugFormat; } }
33c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33d0: 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    set { lock (sy
33e0: 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67 46  ncRoot) { debugF
33f0: 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
3400: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3410: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3420: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3470: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3480: 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f  c string TraceFo
3490: 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rmat..          
34a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
34b0: 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20       get { lock 
34c0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74  (syncRoot) { ret
34d0: 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
34e0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
34f0: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
3500: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
3510: 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  aceFormat = valu
3520: 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20  e; } }..        
3530: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3540: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
3550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
3560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35b0: 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63 74  #region Interact
35c0: 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74 68  ive Support Meth
35d0: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
35e0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
35f0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3600: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3610: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3620: 73 74 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73  static DialogRes
3630: 75 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28  ult ShowMessage(
3640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3650: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
3660: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
3670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3680: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65  TraceCallback de
3690: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
36a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
36b0: 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
36c0: 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
36e0: 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a  mbly assembly,..
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3700: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
3710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3720: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
3730: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3740: 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74     MessageBoxBut
3750: 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a 20  tons buttons,.. 
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
3770: 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 69 63  essageBoxIcon ic
3780: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
3790: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
37a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37b0: 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 73 75        DialogResu
37c0: 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 61 6c  lt result = Dial
37d0: 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d 0a  ogResult.OK;....
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72  DebugAndTrace(tr
3800: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3820: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
3830: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3840: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
3850: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
3860: 20 20 20 20 20 20 20 69 66 20 28 53 79 73 74 65         if (Syste
3870: 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65  mInformation.Use
3880: 72 49 6e 74 65 72 61 63 74 69 76 65 29 0d 0a 20  rInteractive).. 
3890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
38a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 69 74        string tit
38c0: 6c 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  le = GetAssembly
38d0: 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b  Title(assembly);
38e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38f0: 20 20 20 20 20 20 20 20 69 66 20 28 74 69 74 6c          if (titl
3900: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3920: 20 20 20 20 74 69 74 6c 65 20 3d 20 41 70 70 6c      title = Appl
3930: 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e  ication.ProductN
3940: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
3950: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
3960: 6c 74 20 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e  lt = MessageBox.
3970: 53 68 6f 77 28 6d 65 73 73 61 67 65 2c 20 74 69  Show(message, ti
3980: 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63  tle, buttons, ic
3990: 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75              Debu
39b0: 67 41 6e 64 54 72 61 63 65 28 74 72 61 63 65 50  gAndTrace(traceP
39c0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
39d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39e0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
39f0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3a00: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3a20: 20 20 20 20 20 20 20 20 22 55 73 65 72 20 63 68          "User ch
3a30: 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46  oice of {0}.", F
3a40: 6f 72 44 69 73 70 6c 61 79 28 72 65 73 75 6c 74  orDisplay(result
3a50: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
3a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
3a70: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
3a90: 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
3ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3ac0: 20 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63      DebugAndTrac
3ad0: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
3ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3af0: 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
3b00: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
3b10: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
3b20: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
3b30: 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c 74          "Default
3b40: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
3b50: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
3b60: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 65              cate
3b80: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
3b90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3ba0: 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
3bb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
3bc0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
3bd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
3be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3c20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
3c30: 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69 6e    #region Tracin
3c40: 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64  g Support Method
3c50: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
3c60: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3c70: 64 20 53 65 74 75 70 44 65 62 75 67 4c 69 73 74  d SetupDebugList
3c80: 65 6e 65 72 73 28 29 0d 0a 20 20 20 20 20 20 20  eners()..       
3c90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3ca0: 20 20 20 20 20 20 20 20 69 66 20 28 64 65 62 75          if (debu
3cb0: 67 4c 69 73 74 65 6e 65 72 73 20 3d 3d 20 6e 75  gListeners == nu
3cc0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3cd0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69           debugLi
3ce0: 73 74 65 6e 65 72 73 20 3d 20 6e 65 77 20 4c 69  steners = new Li
3cf0: 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e 65 72  st<TraceListener
3d00: 3e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  >();....        
3d10: 20 20 20 20 20 20 20 20 64 65 62 75 67 4c 69 73          debugLis
3d20: 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
3d30: 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
3d40: 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
3d50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3d60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3db0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3dc0: 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74  static long Next
3dd0: 44 65 62 75 67 49 64 28 29 0d 0a 20 20 20 20 20  DebugId()..     
3de0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3df0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3e00: 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e 63   Interlocked.Inc
3e10: 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74 44  rement(ref nextD
3e20: 65 62 75 67 49 64 29 3b 0d 0a 20 20 20 20 20 20  ebugId);..      
3e30: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
3e40: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
3e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3e90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
3ea0: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78   static long Nex
3eb0: 74 54 72 61 63 65 49 64 28 29 0d 0a 20 20 20 20  tTraceId()..    
3ec0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3ed0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3ee0: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49 6e  n Interlocked.In
3ef0: 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78 74  crement(ref next
3f00: 54 72 61 63 65 49 64 29 3b 0d 0a 20 20 20 20 20  TraceId);..     
3f10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
3f20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3f70: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3f80: 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
3f90: 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
3fa0: 6d 65 20 64 61 74 65 54 69 6d 65 29 0d 0a 20 20  me dateTime)..  
3fb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
3fd0: 75 72 6e 20 64 61 74 65 54 69 6d 65 2e 54 6f 53  urn dateTime.ToS
3fe0: 74 72 69 6e 67 28 49 73 6f 38 36 30 31 44 61 74  tring(Iso8601Dat
3ff0: 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61  eTimeOutputForma
4000: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
4010: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4020: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4060: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4070: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
4080: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
4090: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
40a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
40b0: 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
40c0: 6e 67 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65  ng GetMethodName
40d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
40e0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
40f0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
4100: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
4110: 65 76 65 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  evel..          
4120: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4130: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4140: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4170: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4190: 4f 54 45 3a 20 49 66 20 61 20 76 61 6c 69 64 20  OTE: If a valid 
41a0: 73 74 61 63 6b 20 74 72 61 63 65 20 77 61 73 20  stack trace was 
41b0: 6e 6f 74 20 73 75 70 70 6c 69 65 64 20 62 79 20  not supplied by 
41c0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
41d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
41e0: 20 20 63 61 6c 6c 65 72 2c 20 63 72 65 61 74 65    caller, create
41f0: 20 6f 6e 65 20 6e 6f 77 20 62 61 73 65 64 20 6f   one now based o
4200: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20  n the current.. 
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 65 63     //       exec
4230: 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20  ution stack...  
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4260: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
4270: 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c  ackTrace == null
4280: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4290: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
42d0: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
42e0: 63 75 72 72 65 6e 74 20 65 78 65 63 75 74 69 6f  current executio
42f0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4330: 61 63 6b 54 72 61 63 65 20 3d 20 6e 65 77 20 53  ackTrace = new S
4340: 74 61 63 6b 54 72 61 63 65 28 29 3b 0d 0a 0d 0a  tackTrace();....
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4360: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4380: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77      // NOTE: Alw
4390: 61 79 73 20 73 6b 69 70 20 74 68 69 73 20 63 61  ays skip this ca
43a0: 6c 6c 20 66 72 61 6d 65 20 77 68 65 6e 20 77 65  ll frame when we
43b0: 20 63 61 70 74 75 72 65 0d 0a 20 20 20 20 20 20   capture..      
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43d0: 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 73    //       the s
43e0: 74 61 63 6b 20 74 72 61 63 65 2e 0d 0a 20 20 20  tack trace...   
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20   level++;..     
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4450: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4470: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
4480: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 63 6b   specified stack
4490: 20 66 72 61 6d 65 20 28 61 6c 77 61 79 73 20 61   frame (always a
44a0: 64 64 20 6f 6e 65 20 74 6f 0d 0a 20 20 20 20 20  dd one to..     
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
44c0: 2f 20 20 20 20 20 20 20 73 6b 69 70 20 74 68 69  /       skip thi
44d0: 73 20 6d 65 74 68 6f 64 29 2e 0d 0a 20 20 20 20  s method)...    
44e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4500: 20 20 20 20 20 20 20 20 53 74 61 63 6b 46 72 61          StackFra
4510: 6d 65 20 73 74 61 63 6b 46 72 61 6d 65 20 3d 20  me stackFrame = 
4520: 73 74 61 63 6b 54 72 61 63 65 2e 47 65 74 46 72  stackTrace.GetFr
4530: 61 6d 65 28 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20  ame(level);.... 
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4550: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
4560: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4570: 54 45 3a 20 47 65 74 20 74 68 65 20 6d 65 74 68  TE: Get the meth
4580: 6f 64 20 66 6f 72 20 74 68 65 20 73 74 61 63 6b  od for the stack
4590: 20 66 72 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20   frame...       
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
45b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45c0: 20 20 20 20 20 4d 65 74 68 6f 64 42 61 73 65 20       MethodBase 
45d0: 6d 65 74 68 6f 64 42 61 73 65 20 3d 20 73 74 61  methodBase = sta
45e0: 63 6b 46 72 61 6d 65 2e 47 65 74 4d 65 74 68 6f  ckFrame.GetMetho
45f0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
4600: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4620: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
4630: 20 74 68 65 20 74 79 70 65 20 66 6f 72 20 74 68   the type for th
4640: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
4650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
4670: 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
4680: 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 44 65   = methodBase.De
4690: 63 6c 61 72 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a  claringType;....
46a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
46d0: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 6e 61 6d  OTE: Get the nam
46e0: 65 20 6f 66 20 74 68 65 20 6d 65 74 68 6f 64 2e  e of the method.
46f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4700: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4720: 72 69 6e 67 20 6e 61 6d 65 20 3d 20 6d 65 74 68  ring name = meth
4730: 6f 64 42 61 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a  odBase.Name;....
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4770: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the 
4780: 70 72 6f 70 65 72 6c 79 20 66 6f 72 6d 61 74 74  properly formatt
4790: 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20  ed result...    
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47b0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
47c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
47d0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 20 20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32         "{0}{1}{2
4800: 7d 22 2c 20 74 79 70 65 2e 4e 61 6d 65 2c 20 54  }", type.Name, T
4810: 79 70 65 2e 44 65 6c 69 6d 69 74 65 72 2c 20 6e  ype.Delimiter, n
4820: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
4830: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4840: 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 0d            catch.
4850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4870: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
4880: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
4890: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
48b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
48c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
48d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
48e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4920: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
4930: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
4940: 62 75 67 43 6f 72 65 28 0d 0a 20 20 20 20 20 20  bugCore(..      
4950: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4960: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
4970: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4980: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
4990: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
49a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
49c0: 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  ck (syncRoot).. 
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
49e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
49f0: 20 20 20 20 20 20 69 66 20 28 64 65 62 75 67 4c        if (debugL
4a00: 69 73 74 65 6e 65 72 73 20 21 3d 20 6e 75 6c 6c  isteners != null
4a10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4a20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a40: 20 20 66 6f 72 65 61 63 68 20 28 54 72 61 63 65    foreach (Trace
4a50: 4c 69 73 74 65 6e 65 72 20 6c 69 73 74 65 6e 65  Listener listene
4a60: 72 20 69 6e 20 64 65 62 75 67 4c 69 73 74 65 6e  r in debugListen
4a70: 65 72 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ers)..          
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
4a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69 73               lis
4ab0: 74 65 6e 65 72 2e 57 72 69 74 65 4c 69 6e 65 28  tener.WriteLine(
4ac0: 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72  message, categor
4ad0: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4af0: 20 6c 69 73 74 65 6e 65 72 2e 46 6c 75 73 68 28   listener.Flush(
4b00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b30: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
4b40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4b50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4b60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4bb0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4bc0: 73 74 61 74 69 63 20 76 6f 69 64 20 54 72 61 63  static void Trac
4bd0: 65 43 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20  eCore(..        
4be0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4bf0: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4c00: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4c10: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4c20: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
4c50: 20 28 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20   (syncRoot)..   
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c80: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4ca0: 4f 54 45 3a 20 57 72 69 74 65 20 74 68 65 20 6d  OTE: Write the m
4cb0: 65 73 73 61 67 65 20 74 6f 20 61 6c 6c 20 74 68  essage to all th
4cc0: 65 20 61 63 74 69 76 65 20 74 72 61 63 65 0d 0a  e active trace..
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ce0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
4cf0: 74 65 6e 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  teners...       
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d20: 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
4d30: 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61  Line(message, ca
4d40: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4d60: 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ace.Flush();..  
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4de0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4df0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4e00: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
4e10: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4e20: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4e30: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4e40: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4e60: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4e70: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4e80: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4e90: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4ea0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4eb0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4ec0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4ed0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4ee0: 20 20 20 20 20 20 20 20 45 78 63 65 70 74 69 6f          Exceptio
4ef0: 6e 20 65 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20  n exception,..  
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4f10: 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a 20  ring category.. 
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4f50: 20 69 66 20 28 65 78 63 65 70 74 69 6f 6e 20 21   if (exception !
4f60: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4f80: 75 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63  urn DebugAndTrac
4f90: 65 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  e(tracePriority,
4fa0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4fc0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
4fd0: 6c 6c 62 61 63 6b 2c 20 6e 65 77 20 53 74 61 63  llback, new Stac
4fe0: 6b 54 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e  kTrace(exception
4ff0: 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20  , true), 0,..   
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5010: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54       exception.T
5020: 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67  oString(), categ
5030: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
5040: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5050: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
5060: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
5070: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
50c0: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
50d0: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
50e0: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
50f0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
5100: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
5110: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
5120: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5130: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
5140: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5160: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
5170: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
5180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5190: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
51a0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
51b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
51c0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
51e0: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5200: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5220: 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41 6e    return DebugAn
5230: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
5250: 63 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75  cePriority, debu
5260: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
5270: 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 20  Callback, null, 
5280: 31 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1,..            
5290: 20 20 20 20 20 20 20 20 6d 65 73 73 61 67 65 2c          message,
52a0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
52b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
52c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
5320: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
5330: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
5340: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
5350: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
5360: 74 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67  tic string Debug
5370: 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
5380: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
5390: 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72  Priority tracePr
53a0: 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
53b0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61           TraceCa
53c0: 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
53d0: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
53e0: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
53f0: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
5400: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
5410: 20 20 20 20 20 53 74 61 63 6b 54 72 61 63 65 20       StackTrace 
5420: 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20  stackTrace,..   
5430: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
5440: 20 6c 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20   level,..       
5450: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
5460: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
5470: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5480: 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
5490: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
54a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
54c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
54d0: 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73   // NOTE: Always
54e0: 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20   skip this call 
54f0: 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 74 61  frame if the sta
5500: 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 20 20  ck trace is..   
5510: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5520: 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f 20 62        going to b
5530: 65 20 63 61 70 74 75 72 65 64 20 62 79 20 47 65  e captured by Ge
5540: 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20 20  tMethodName...  
5550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5570: 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63 65    if (stackTrace
5580: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
55a0: 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20  evel++;....     
55b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
55d0: 2f 20 4e 4f 54 45 3a 20 46 6f 72 6d 61 74 20 74  / NOTE: Format t
55e0: 68 65 20 6d 65 73 73 61 67 65 20 66 6f 72 20 64  he message for d
55f0: 69 73 70 6c 61 79 20 28 6f 6e 63 65 29 2e 0d 0a  isplay (once)...
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5620: 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
5630: 74 74 65 64 20 3d 20 53 74 72 69 6e 67 2e 46 6f  tted = String.Fo
5640: 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22 2c  rmat("{0}: {1}",
5650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5660: 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f 64 4e        GetMethodN
5670: 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 2c 20  ame(stackTrace, 
5680: 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 65 29  level), message)
5690: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
56a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
56b0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
56c0: 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 20 63  : If the debug c
56d0: 61 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c  allback is inval
56e0: 69 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20  id or the trace 
56f0: 70 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  priority..      
5700: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5710: 20 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61     of this messa
5720: 67 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ge is less than 
5730: 77 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c  what we currentl
5740: 79 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20  y want to..     
5750: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
5760: 20 20 20 20 64 65 62 75 67 2c 20 73 6b 69 70 20      debug, skip 
5770: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it...           
5780: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5790: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 64 65           if ((de
57a0: 62 75 67 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  bugCallback != n
57b0: 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ull) &&..       
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72               (tr
57d0: 61 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 44  acePriority >= D
57e0: 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 0d 0a  ebugPriority))..
57f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5800: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5810: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5830: 2f 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74  / NOTE: Invoke t
5840: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5850: 6b 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61  k with the forma
5860: 74 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  tted..          
5870: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5880: 20 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74     message and t
5890: 68 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63  he category spec
58a0: 69 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  ified by the..  
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58c0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
58d0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r...            
58e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
58f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5900: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f  debugCallback(fo
5910: 72 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72  rmatted, categor
5920: 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
5930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5940: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5960: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72   NOTE: If the tr
5970: 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  ace callback is 
5980: 69 6e 76 61 6c 69 64 20 6f 72 20 74 68 65 20 74  invalid or the t
5990: 72 61 63 65 20 70 72 69 6f 72 69 74 79 0d 0a 20  race priority.. 
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
59b0: 2f 20 20 20 20 20 20 20 6f 66 20 74 68 69 73 20  /       of this 
59c0: 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73 20  message is less 
59d0: 74 68 61 6e 20 77 68 61 74 20 77 65 20 63 75 72  than what we cur
59e0: 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 0d 0a  rently want to..
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a00: 2f 2f 20 20 20 20 20 20 20 74 72 61 63 65 2c 20  //       trace, 
5a10: 73 6b 69 70 20 69 74 2e 0d 0a 20 20 20 20 20 20  skip it...      
5a20: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5a40: 20 28 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b   ((traceCallback
5a50: 20 21 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20   != null) &&..  
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a70: 20 20 28 74 72 61 63 65 50 72 69 6f 72 69 74 79    (tracePriority
5a80: 20 3e 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   >= TracePriorit
5a90: 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
5aa0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
5ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ad0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 76      // NOTE: Inv
5ae0: 6f 6b 65 20 74 68 65 20 74 72 61 63 65 20 63 61  oke the trace ca
5af0: 6c 6c 62 61 63 6b 20 77 69 74 68 20 74 68 65 20  llback with the 
5b00: 66 6f 72 6d 61 74 74 65 64 0d 0a 20 20 20 20 20  formatted..     
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5b20: 2f 20 20 20 20 20 20 20 6d 65 73 73 61 67 65 20  /       message 
5b30: 61 6e 64 20 74 68 65 20 63 61 74 65 67 6f 72 79  and the category
5b40: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
5b50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
5b60: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
5b70: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20  caller...       
5b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
5b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5ba0: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
5bb0: 63 6b 28 66 6f 72 6d 61 74 74 65 64 2c 20 63 61  ck(formatted, ca
5bc0: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
5bd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5bf0: 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b 0d 0a  eturn message;..
5c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
5c10: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
5c20: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
5c30: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
5c40: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
5c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5ca0: 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52     #region MockR
5cb0: 65 67 69 73 74 72 79 20 43 6c 61 73 73 0d 0a 20  egistry Class.. 
5cc0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
5cd0: 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b  ealed class Mock
5ce0: 52 65 67 69 73 74 72 79 20 3a 20 49 44 69 73 70  Registry : IDisp
5cf0: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
5d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
5d10: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
5d20: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
5d30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5d40: 6f 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20  ockRegistry().. 
5d50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
5d70: 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20  atIf = true;..  
5d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5d90: 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a  adOnly = true;..
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5db0: 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20  safe = true;..  
5dc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5dd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5e30: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5e40: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5e50: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
5e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5e70: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5e80: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
5e90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
5eb0: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
5ec0: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
5ed0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5ee0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5f30: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5f40: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
5f50: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
5f60: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
5f70: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
5f80: 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  dOnly..         
5f90: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5fa0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
5fb0: 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  (whatIf)..      
5fc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5fd0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
5fe0: 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c  adOnly = readOnl
5ff0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
6000: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6010: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6050: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6060: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6070: 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
6080: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
6090: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
60a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
60b0: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
60c0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
60d0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
60e0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
60f0: 20 20 20 20 20 20 3a 20 74 68 69 73 28 77 68 61        : this(wha
6100: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a  tIf, readOnly)..
6110: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
6130: 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65 3b  his.safe = safe;
6140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6160: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6170: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
61c0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
61d0: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
61e0: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
61f0: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 68   private bool wh
6200: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
6210: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57     public bool W
6220: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
6230: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6240: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
6250: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
6260: 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
6280: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
6290: 65 64 28 29 3b 20 77 68 61 74 49 66 20 3d 20 76  ed(); whatIf = v
62a0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
62b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
62c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
62d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6310: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6320: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b 0d   bool readOnly;.
6330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6340: 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e 6c  lic bool ReadOnl
6350: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
6360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6370: 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73    get { CheckDis
6380: 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20  posed(); return 
6390: 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20 20  readOnly; }..   
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
63b0: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
63c0: 28 29 3b 20 72 65 61 64 4f 6e 6c 79 20 3d 20 76  (); readOnly = v
63d0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
63e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
63f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6440: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6450: 20 62 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20   bool safe;..   
6460: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6470: 62 6f 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20  bool Safe..     
6480: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6490: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
64a0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
64b0: 20 72 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d   return safe; }.
64c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
64d0: 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   set { CheckDisp
64e0: 6f 73 65 64 28 29 3b 20 73 61 66 65 20 3d 20 76  osed(); safe = v
64f0: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
6500: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6510: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6520: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
6560: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
6570: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6580: 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20   classesRoot;.. 
6590: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
65a0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
65b0: 79 20 43 6c 61 73 73 65 73 52 6f 6f 74 0d 0a 20  y ClassesRoot.. 
65c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
65d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
65e0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
65f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6600: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
6610: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 20 20 69 66 20 28 63 6c 61 73 73 65 73 52 6f 6f    if (classesRoo
6640: 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 20 63 6c 61 73 73 65 73 52 6f 6f 74 20      classesRoot 
6670: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
6680: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
6690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66a0: 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 6c 61      Registry.Cla
66b0: 73 73 65 73 52 6f 6f 74 2c 20 77 68 61 74 49 66  ssesRoot, whatIf
66c0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
66d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
66e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
66f0: 20 63 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20   classesRoot;.. 
6700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6720: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6780: 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65    private MockRe
6790: 67 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e  gistryKey curren
67a0: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
67b0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
67c0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 75 72  kRegistryKey Cur
67d0: 72 65 6e 74 43 6f 6e 66 69 67 0d 0a 20 20 20 20  rentConfig..    
67e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
67f0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a             get..
6800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6810: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6820: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6830: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6850: 66 20 28 63 75 72 72 65 6e 74 43 6f 6e 66 69 67  f (currentConfig
6860: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6880: 20 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67     currentConfig
6890: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
68a0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68c0: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 43 75       Registry.Cu
68d0: 72 72 65 6e 74 43 6f 6e 66 69 67 2c 20 77 68 61  rrentConfig, wha
68e0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
68f0: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6910: 75 72 6e 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  urn currentConfi
6920: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6930: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6950: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6960: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
69a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
69b0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 63  ockRegistryKey c
69c0: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
69d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
69e0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
69f0: 43 75 72 72 65 6e 74 55 73 65 72 0d 0a 20 20 20  CurrentUser..   
6a00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 0d              get.
6a20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6a40: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
6a50: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 69 66 20 28 63 75 72 72 65 6e 74 55 73 65 72 20  if (currentUser 
6a80: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6aa0: 20 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20    currentUser = 
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 43 75 72 72 65    Registry.Curre
6af0: 6e 74 55 73 65 72 2c 20 77 68 61 74 49 66 2c 20  ntUser, whatIf, 
6b00: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b  readOnly, safe);
6b10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6b20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
6b30: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6b60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6bc0: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
6bd0: 73 74 72 79 4b 65 79 20 64 79 6e 44 61 74 61 3b  stryKey dynData;
6be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6bf0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6c00: 79 4b 65 79 20 44 79 6e 44 61 74 61 0d 0a 20 20  yKey DynData..  
6c10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
6c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6c40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6c50: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
6c60: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c80: 20 69 66 20 28 64 79 6e 44 61 74 61 20 3d 3d 20   if (dynData == 
6c90: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
6cb0: 79 6e 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63  ynData = new Moc
6cc0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
6cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ce0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
6cf0: 74 72 79 2e 44 79 6e 44 61 74 61 2c 20 77 68 61  try.DynData, wha
6d00: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
6d10: 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  afe);....       
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6d30: 75 72 6e 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20  urn dynData;..  
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6dc0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6dd0: 69 73 74 72 79 4b 65 79 20 6c 6f 63 61 6c 4d 61  istryKey localMa
6de0: 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20  chine;..        
6df0: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
6e00: 65 67 69 73 74 72 79 4b 65 79 20 4c 6f 63 61 6c  egistryKey Local
6e10: 4d 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20  Machine..       
6e20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6e30: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e60: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6e70: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6e90: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 3d 20  localMachine == 
6ea0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
6ec0: 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20 6e 65  ocalMachine = ne
6ed0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
6ee0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
6ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f00: 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
6f10: 63 68 69 6e 65 2c 20 77 68 61 74 49 66 2c 20 72  chine, whatIf, r
6f20: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6f30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6f40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 6f         return lo
6f50: 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20  calMachine;..   
6f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6f80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6fe0: 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69  private MockRegi
6ff0: 73 74 72 79 4b 65 79 20 70 65 72 66 6f 72 6d 61  stryKey performa
7000: 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20  nceData;..      
7010: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
7020: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 50 65 72  kRegistryKey Per
7030: 66 6f 72 6d 61 6e 63 65 44 61 74 61 0d 0a 20 20  formanceData..  
7040: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7070: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7080: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
7090: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70b0: 20 69 66 20 28 70 65 72 66 6f 72 6d 61 6e 63 65   if (performance
70c0: 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Data == null).. 
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70e0: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
70f0: 63 65 44 61 74 61 20 3d 20 6e 65 77 20 4d 6f 63  ceData = 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 50 65 72 66 6f 72 6d 61 6e 63 65 44  try.PerformanceD
7140: 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ata, whatIf, rea
7150: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d  dOnly, safe);...
7160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7170: 20 20 20 20 20 72 65 74 75 72 6e 20 70 65 72 66       return perf
7180: 6f 72 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20  ormanceData;..  
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
71a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
71b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7210: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
7220: 69 73 74 72 79 4b 65 79 20 75 73 65 72 73 3b 0d  istryKey users;.
7230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7240: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
7250: 4b 65 79 20 55 73 65 72 73 0d 0a 20 20 20 20 20  Key Users..     
7260: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7270: 20 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20            get.. 
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
72a0: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
72b0: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
72d0: 20 28 75 73 65 72 73 20 3d 3d 20 6e 75 6c 6c 29   (users == null)
72e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
72f0: 20 20 20 20 20 20 20 20 20 20 75 73 65 72 73 20            users 
7300: 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  = new MockRegist
7310: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
7320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7330: 20 20 20 20 52 65 67 69 73 74 72 79 2e 55 73 65      Registry.Use
7340: 72 73 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  rs, whatIf, read
7350: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
7360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7370: 20 20 20 20 72 65 74 75 72 6e 20 75 73 65 72 73      return users
7380: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7390: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
73a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
73b0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
73c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
73d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
7420: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 22 52 65  egion Public "Re
7430: 67 69 73 74 72 79 22 20 4d 65 74 68 6f 64 73 0d  gistry" Methods.
7440: 0a 23 69 66 20 66 61 6c 73 65 0d 0a 20 20 20 20  .#if false..    
7450: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
7460: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d  bject GetValue(.
7470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7480: 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c   string keyName,
7490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
74a0: 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61    string valueNa
74b0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
74c0: 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61       object defa
74d0: 75 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20  ultValue..      
74e0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
74f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7500: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
7510: 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7530: 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e  return Registry.
7540: 47 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65  GetValue(keyName
7550: 2c 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66  , valueName, def
7560: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
7570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
7580: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
75d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
75e0: 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  lic void SetValu
75f0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
7600: 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
7610: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
7620: 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75       string valu
7630: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
7640: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
7650: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
7660: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
7670: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7680: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7690: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
76a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
76b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
76d0: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76f0: 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75  Registry.SetValu
7700: 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65  e(keyName, value
7710: 4e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  Name, value);.. 
7720: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7730: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 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 0d  ///////////////.
7780: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7790: 75 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61  ublic void SetVa
77a0: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
77b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
77c0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
77d0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61         string va
77e0: 6c 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  lueName,..      
77f0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
7800: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
7810: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
7820: 79 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65  yValueKind value
7830: 4b 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  Kind..          
7840: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
7850: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7860: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
7870: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
7880: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
7890: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
78b0: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 52 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75  Registry.SetValu
78e0: 65 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65  e(keyName, value
78f0: 4e 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c  Name, value, val
7900: 75 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  ueKind);..      
7910: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
7920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7930: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7940: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7990: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
79a0: 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68 6f 64  n Private Method
79b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
79c0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
79d0: 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20  kReadOnly()..   
79e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a10: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61  // NOTE: In "rea
7a20: 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65  d-only" mode, we
7a30: 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72   disallow all wr
7a40: 69 74 65 20 61 63 63 65 73 73 2e 0d 0a 20 20 20  ite access...   
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a70: 20 69 66 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d   if (!readOnly).
7a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a90: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
7ac0: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
7ad0: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
7ae0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
7af0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
7b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7b60: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
7b70: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
7b80: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
7b90: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
7ba0: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
7bb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
7bc0: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
7bd0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
7be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
7c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c20: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7c40: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
7c50: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
7c60: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7c70: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
7c80: 63 6b 52 65 67 69 73 74 72 79 29 2e 4e 61 6d 65  ckRegistry).Name
7c90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
7ca0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
7cb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
7cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7cf0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
7d00: 20 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70      private /* p
7d10: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
7d20: 20 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65   */ void Dispose
7d30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7d40: 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e     bool disposin
7d50: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
7d60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7d70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d80: 20 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73       if (!dispos
7d90: 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
7da0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7dc0: 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7de0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7df0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7e30: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70           // disp
7e40: 6f 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f  ose managed reso
7e50: 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20  urces here..... 
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7eb0: 20 20 20 20 20 20 20 69 66 20 28 63 6c 61 73 73         if (class
7ec0: 65 73 52 6f 6f 74 20 21 3d 20 6e 75 6c 6c 29 0d  esRoot != null).
7ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ee0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 20 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 52          classesR
7f10: 6f 6f 74 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  oot.Close();..  
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 20 20 20 20 20 20 20 20 20 20 63 6c 61 73 73 65            classe
7f40: 73 52 6f 6f 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  sRoot = null;.. 
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 20 69 66 20 28 63 75 72 72 65 6e 74 43      if (currentC
7f90: 6f 6e 66 69 67 20 21 3d 20 6e 75 6c 6c 29 0d 0a  onfig != null)..
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 43 6f         currentCo
7fe0: 6e 66 69 67 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20  nfig.Close();.. 
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65             curre
8010: 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 75 6c 6c 3b  ntConfig = null;
8020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8030: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
8040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8050: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 65         if (curre
8060: 6e 74 55 73 65 72 20 21 3d 20 6e 75 6c 6c 29 0d  ntUser != null).
8070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8080: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80a0: 20 20 20 20 20 20 20 20 63 75 72 72 65 6e 74 55          currentU
80b0: 73 65 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ser.Close();..  
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80d0: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 65 6e            curren
80e0: 74 55 73 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  tUser = null;.. 
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8100: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 20 20 69 66 20 28 64 79 6e 44 61 74 61 20      if (dynData 
8130: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8150: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 20 64 79 6e 44 61 74 61 2e 43 6c 6f 73 65 28 29   dynData.Close()
8180: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
81a0: 79 6e 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ynData = null;..
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81c0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81e0: 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d 61       if (localMa
81f0: 63 68 69 6e 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  chine != null)..
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8210: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8230: 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61 63 68         localMach
8240: 69 6e 65 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20  ine.Close();..  
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d            localM
8270: 61 63 68 69 6e 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  achine = null;..
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8290: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
82a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82b0: 20 20 20 20 20 69 66 20 28 70 65 72 66 6f 72 6d       if (perform
82c0: 61 6e 63 65 44 61 74 61 20 21 3d 20 6e 75 6c 6c  anceData != null
82d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
82e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8300: 20 20 20 20 20 20 20 20 20 20 70 65 72 66 6f 72            perfor
8310: 6d 61 6e 63 65 44 61 74 61 2e 43 6c 6f 73 65 28  manceData.Close(
8320: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
8350: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8370: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8390: 20 28 75 73 65 72 73 20 21 3d 20 6e 75 6c 6c 29   (users != null)
83a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83d0: 20 20 20 20 20 20 20 20 20 75 73 65 72 73 2e 43           users.C
83e0: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 20 20 20 75 73 65 72 73 20 3d 20 6e 75 6c       users = nul
8410: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
8420: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8450: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8480: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
8490: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
84a0: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
84b0: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
84e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8510: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8520: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
8530: 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69  E: This object i
8540: 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d  s now disposed..
8550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8560: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73               dis
8580: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
85a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
85b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
85c0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
85d0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
85e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
85f0: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
8620: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
8630: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65  n IDisposable Me
8640: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
8650: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44     public void D
8660: 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20  ispose()..      
8670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8680: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
8690: 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  (true);..       
86a0: 20 20 20 20 20 20 20 20 20 47 43 2e 53 75 70 70           GC.Supp
86b0: 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69  ressFinalize(thi
86c0: 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s);..           
86d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
86e0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
86f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
8700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
8740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
8750: 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d  gion Destructor.
8760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f  .            ~Mo
8770: 63 6b 52 65 67 69 73 74 72 79 28 29 0d 0a 20 20  ckRegistry()..  
8780: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
87a0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
87b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
87c0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
87d0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
87e0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
87f0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
8800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8850: 20 23 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67   #region MockReg
8860: 69 73 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a  istryKey Class..
8870: 20 20 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c          internal
8880: 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f   sealed class Mo
8890: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 3a 20  ckRegistryKey : 
88a0: 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20  IDisposable..   
88b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
88c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
88d0: 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73  ate Constructors
88e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
88f0: 69 76 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74  ivate MockRegist
8900: 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20  ryKey()..       
8910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8920: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
8930: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
8940: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
8950: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
8960: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
8970: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
8980: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8990: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
89a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
89b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
89f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8a00: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
8a10: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
8a20: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8a30: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8a50: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
8a60: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
8a70: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8a80: 20 20 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a        : this()..
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
8ab0: 68 69 73 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a  his.key = key;..
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
8ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8b30: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8b40: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8b50: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
8b60: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
8b70: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
8b80: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
8ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8bb0: 20 3a 20 74 68 69 73 28 6b 65 79 29 0d 0a 20 20   : this(key)..  
8bc0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
8be0: 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73  s.subKeyName = s
8bf0: 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  ubKeyName;..    
8c00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8c10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8c70: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8c80: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
8c90: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
8ca0: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
8cb0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
8cc0: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
8cd0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8ce0: 77 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  whatIf..        
8cf0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8d00: 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69             : thi
8d10: 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  s(key, subKeyNam
8d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
8d30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8d40: 20 20 20 74 68 69 73 2e 77 68 61 74 49 66 20 3d     this.whatIf =
8d50: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
8d60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8d70: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8dc0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8dd0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8de0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8df0: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
8e00: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8e10: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
8e20: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
8e30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
8e40: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
8e50: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
8e60: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
8e70: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
8e80: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
8e90: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
8ea0: 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
8eb0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8ec0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65           this.re
8ed0: 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c  adOnly = readOnl
8ee0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
8ef0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8f00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8f50: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
8f60: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
8f80: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8fa0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8fb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8fc0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fe0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d   bool readOnly,.
8ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9000: 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20   bool safe..    
9010: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
9030: 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65   this(key, subKe
9040: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72  yName, whatIf, r
9050: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
9060: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9070: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
9080: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
9090: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
90a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
90b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
9100: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
9110: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
9120: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
9130: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
9140: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
9150: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
9160: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9170: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
9180: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29  y, null, whatIf)
9190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
91a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
91b0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
91c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
91d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
91e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
91f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9220: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
9230: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
9240: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
9250: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
9260: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
9270: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
9280: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
9290: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
92a0: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
92b0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
92d0: 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68  is(key, null, wh
92e0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
92f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9310: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
9320: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9390: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
93a0: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
93b0: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
93c0: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
93d0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
93e0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
93f0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65           bool re
9400: 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20  adOnly,..       
9410: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61           bool sa
9420: 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  fe..            
9430: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9440: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
9450: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
9460: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
9470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9490: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
94a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
94c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
94d0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
94e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9520: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
9530: 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
9540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9550: 6c 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 28 29  lic void Close()
9560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9580: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
9590: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f       // NOTE: No
95a0: 20 64 69 73 70 6f 73 65 64 20 63 68 65 63 6b 20   disposed check 
95b0: 68 65 72 65 20 62 65 63 61 75 73 65 20 63 61 6c  here because cal
95c0: 6c 69 6e 67 20 74 68 69 73 20 6d 65 74 68 6f 64  ling this method
95d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
95e0: 20 20 2f 2f 20 20 20 20 20 20 20 73 68 6f 75 6c    //       shoul
95f0: 64 20 62 65 20 6a 75 73 74 20 6c 69 6b 65 20 63  d be just like c
9600: 61 6c 6c 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d  alling Dispose..
9610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9620: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
9630: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
9640: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
9650: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9660: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
96a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
96b0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
96c0: 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65 61  RegistryKey Crea
96d0: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
96e0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
96f0: 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20  g subKeyName..  
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9730: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9750: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
9760: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9770: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9780: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
9790: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
97a0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
97c0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
97d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
9800: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
9810: 20 41 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e   Attempt to open
9820: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
9830: 75 62 2d 6b 65 79 2e 20 20 49 66 20 74 68 69 73  ub-key.  If this
9840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9850: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66        //       f
9860: 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69  ails, we will si
9870: 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20  mply return the 
9880: 77 72 61 70 70 65 64 20 72 6f 6f 74 20 6b 65 79  wrapped root key
9890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
98a0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
98b0: 74 73 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77  tself since no w
98c0: 72 69 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65  rites are allowe
98d0: 64 20 69 6e 20 22 77 68 61 74 2d 69 66 22 0d 0a  d in "what-if"..
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98f0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64      //       mod
9900: 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20  e anyhow...     
9910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9920: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
9930: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
9940: 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e  ey subKey = key.
9950: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65  OpenSubKey(subKe
9960: 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
9970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9980: 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d  eturn (subKey !=
9990: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99b0: 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74    new MockRegist
99c0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
99e0: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
99f0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
9a00: 2c 20 73 61 66 65 29 20 3a 0d 0a 20 20 20 20 20  , safe) :..     
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a20: 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73     new MockRegis
9a30: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
9a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a50: 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
9a60: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
9a70: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
9a80: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9a90: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
9aa0: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
9ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d      return new M
9ae0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
9af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b00: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 72 65           key.Cre
9b10: 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79  ateSubKey(subKey
9b20: 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 72  Name), whatIf, r
9b30: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
9b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9b50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9b60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9b70: 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9bc0: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
9bd0: 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20  DeleteSubKey(.. 
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9bf0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
9c00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9c10: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
9c20: 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  issing..        
9c30: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
9c40: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9c50: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9c60: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
9c70: 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
9c80: 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a  kReadOnly();....
9c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ca0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
9cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9cc0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
9cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ce0: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d00: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62     key.DeleteSub
9d10: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20  Key(subKeyName, 
9d20: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
9d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9d40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9da0: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9db0: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9dd0: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
9de0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
9df0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9e00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9e10: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
9e20: 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
9e30: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
9e40: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
9e50: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9e60: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9e80: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9ea0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
9ec0: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
9ed0: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
9ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9ef0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9f50: 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65    public void De
9f60: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9f80: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
9f90: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9fa0: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9fe0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
9ff0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a000: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
a010: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a020: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a030: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a040: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a050: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
a060: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
a070: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a080: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
a090: 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 2c 20  leteValue(name, 
a0a0: 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 3b  throwOnMissing);
a0b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a0c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
a0d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
a120: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b    public string[
a130: 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  ] GetSubKeyNames
a140: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
a150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a160: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
a170: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a180: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a190: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a1b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a1d0: 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65  urn key.GetSubKe
a1e0: 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20  yNames();..     
a1f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
a200: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
a210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a250: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a260: 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  c object GetValu
a270: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
a280: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
a290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a2a0: 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74    object default
a2b0: 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  Value..         
a2c0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
a2d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a2e0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
a2f0: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a310: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
a340: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
a350: 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65     return key.Ge
a360: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66  tValue(name, def
a370: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
a380: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
a390: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a3e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a3f0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
a400: 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key OpenSubKey(.
a410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a420: 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61   string subKeyNa
a430: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
a440: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
a450: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a460: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
a470: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
a480: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a490: 20 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b   OpenSubKey(subK
a4a0: 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d  eyName, false);.
a4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a510: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a520: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
a530: 73 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b  stryKey OpenSubK
a540: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
a550: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
a560: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
a570: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
a580: 69 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  itable..        
a590: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a5a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a5b0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
a5c0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
a5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a5e0: 20 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20   (writable)..   
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a600: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
a610: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a620: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
a630: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a640: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
a650: 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
a660: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
a670: 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
a680: 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  key.OpenSubKey(.
a690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6a0: 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c       subKeyName,
a6b0: 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20   whatIf ? false 
a6c0: 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a  : writable);....
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a6e0: 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21  return (subKey !
a6f0: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
a700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
a710: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
a720: 65 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49  ey(subKey, whatI
a730: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
a740: 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  e) : null;..    
a750: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a760: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a7c0: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
a7d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a7e0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
a7f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a800: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20   object value.. 
a810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
a820: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a840: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a850: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a860: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
a870: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
a880: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
a890: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a8b0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
a8c0: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
a8d0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
a8e0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65            key.Se
a8f0: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c  tValue(name, val
a900: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
a910: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
a920: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
a930: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a990: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f  egion Public Pro
a9a0: 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20  perties..       
a9b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
a9c0: 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ng Name..       
a9d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a9e0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa10: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
aa20: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
aa30: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
aa40: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
aa70: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
aa80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
aa90: 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
aaa0: 72 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d  rEmpty(subKeyNam
aab0: 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
aad0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
aae0: 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65  \\{1}", key.Name
aaf0: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d  , subKeyName) :.
ab00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab10: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d           key.Nam
ab20: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ab30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
ab40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ab50: 20 20 20 20 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 2f 2f 2f 2f  ////////////////
ab90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
aba0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52         private R
abb0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d  egistryKey key;.
abc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
abd0: 6c 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20  lic RegistryKey 
abe0: 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
abf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ac00: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
ac10: 69 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b  isposed(); Check
ac20: 53 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b  Safe(); return k
ac30: 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ey; }..         
ac40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
ac50: 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
aca0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
acb0: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
acc0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
acd0: 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62  ublic string Sub
ace0: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
acf0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ad00: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
ad10: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
ad20: 65 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65  eturn subKeyName
ad30: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ad40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ad50: 20 20 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 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ada0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
adb0: 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
adc0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
add0: 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
ade0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
adf0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
ae00: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
ae10: 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20   return whatIf; 
ae20: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
ae30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ae90: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
aea0: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
aeb0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
aec0: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
aed0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
aef0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
af00: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
af10: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
af20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
af30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
af40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
af70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
af80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
af90: 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20  ol safe;..      
afa0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
afb0: 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20  l Safe..        
afc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
afd0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
afe0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
aff0: 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20  turn safe; }..  
b000: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b010: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b020: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
b030: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
b040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b070: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b080: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
b090: 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20  ivate Methods.. 
b0a0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b0b0: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61  te void CheckRea
b0c0: 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20  dOnly()..       
b0d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b0e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
b100: 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e  OTE: In "read-on
b110: 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  ly" mode, we dis
b120: 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20  allow all write 
b130: 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20  access...       
b140: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b150: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b160: 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  (!readOnly)..   
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
b190: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
b1a0: 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
b1b0: 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
b1c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
b1d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b1e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b220: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b230: 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64      private void
b240: 20 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20   CheckSafe()..  
b250: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b260: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b280: 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61   // NOTE: In "sa
b290: 66 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73  fe" mode, we dis
b2a0: 61 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74  allow all direct
b2b0: 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a   access to the..
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2d0: 2f 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e  //       contain
b2e0: 65 64 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e  ed registry key.
b2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b300: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b310: 20 20 20 20 20 20 69 66 20 28 21 73 61 66 65 29        if (!safe)
b320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b330: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
b340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b350: 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
b360: 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
b370: 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20  tion();..       
b380: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b390: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
b3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b400: 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e   #region System.
b410: 4f 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73  Object Overrides
b420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
b430: 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
b440: 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d  ring ToString().
b450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b470: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
b480: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b490: 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e      return this.
b4a0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
b4b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
b4c0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
b4e0: 2f 2f 2f 2f 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 0d  ///////////////.
b520: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
b530: 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20  region Implicit 
b540: 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61  Conversion Opera
b550: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
b560: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b570: 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52 65 6d    // BUGBUG: Rem
b580: 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20 73 68  ove me?  This sh
b590: 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62 65 63  ould be safe bec
b5a0: 61 75 73 65 20 69 6e 20 22 77 68 61 74 2d 69 66  ause in "what-if
b5b0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  "..            /
b5c0: 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65 20 61  /         mode a
b5d0: 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70 65 6e  ll keys are open
b5e0: 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20  ed read-only... 
b5f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
b610: 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69  c static implici
b620: 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67 69 73  t operator Regis
b630: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
b640: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
b650: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
b670: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b690: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
b6a0: 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79 20 3a  ull) ? key.Key :
b6b0: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
b6c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
b6d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
b6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b740: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
b750: 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d 65  ble "Pattern" Me
b760: 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20  mbers..         
b770: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
b780: 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 20  disposed;..     
b790: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76         private v
b7a0: 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73 65  oid CheckDispose
b7b0: 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  d() /* throw */.
b7c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
b820: 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44  hrow new ObjectD
b830: 69 73 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e  isposedException
b840: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b850: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 4d 6f         typeof(Mo
b860: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 29 2e 4e  ckRegistryKey).N
b870: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
b880: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
b890: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b8d0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b8e0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 2f         private /
b8f0: 2a 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74  * protected virt
b900: 75 61 6c 20 2a 2f 20 76 6f 69 64 20 44 69 73 70  ual */ void Disp
b910: 6f 73 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ose(..          
b920: 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 73 70 6f        bool dispo
b930: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
b940: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b950: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b960: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
b970: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
b980: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b9a0: 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  f (disposing).. 
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba00: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
ba20: 69 73 70 6f 73 65 20 6d 61 6e 61 67 65 64 20 72  ispose managed r
ba30: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
ba40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
ba60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
ba80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba90: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
baa0: 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bac0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 20 20 20 6b 65 79 2e 43 6c 6f 73 65 28 29 3b 0d     key.Close();.
baf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
bb10: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
bb40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb60: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
bba0: 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61 67   release unmanag
bbb0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
bbc0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
bbd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
bbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bc10: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc30: 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f 62  // NOTE: This ob
bc40: 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73 70  ject is now disp
bc50: 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  osed...         
bc60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
bc90: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
bca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
bcb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
bcc0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
bcd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bd30: 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73 61  #region IDisposa
bd40: 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  ble Members..   
bd50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
bd60: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
bd70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
bd90: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
bdb0: 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c 69  C.SuppressFinali
bdc0: 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20 20  ze(this);..     
bdd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
bde0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
bdf0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be40: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
be50: 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72     #region Destr
be60: 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  uctor..         
be70: 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72 79     ~MockRegistry
be80: 4b 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Key()..         
be90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
bea0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66 61        Dispose(fa
beb0: 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lse);..         
bec0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bed0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
bee0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
bef0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
bf00: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bf10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
bf50: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
bf60: 6e 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  n RegistryHelper
bf70: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
bf80: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 63  private static c
bf90: 6c 61 73 73 20 52 65 67 69 73 74 72 79 48 65 6c  lass RegistryHel
bfa0: 70 65 72 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  per..        {..
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
bfc0: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
bfd0: 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
bfe0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
bff0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75 62  e static int sub
c000: 4b 65 79 73 43 72 65 61 74 65 64 3b 0d 0a 20 20  KeysCreated;..  
c010: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
c020: 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62 4b   static int SubK
c030: 65 79 73 43 72 65 61 74 65 64 0d 0a 20 20 20 20  eysCreated..    
c040: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c050: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
c060: 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73 43   return subKeysC
c070: 72 65 61 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20  reated; }..     
c080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
c090: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
c0e0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
c0f0: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 75  te static int su
c100: 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 0d 0a 20  bKeysDeleted;.. 
c110: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c120: 63 20 73 74 61 74 69 63 20 69 6e 74 20 53 75 62  c static int Sub
c130: 4b 65 79 73 44 65 6c 65 74 65 64 0d 0a 20 20 20  KeysDeleted..   
c140: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
c150: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
c160: 7b 20 72 65 74 75 72 6e 20 73 75 62 4b 65 79 73  { return subKeys
c170: 44 65 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20  Deleted; }..    
c180: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c190: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
c1f0: 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b  ate static int k
c200: 65 79 56 61 6c 75 65 73 52 65 61 64 3b 0d 0a 20  eyValuesRead;.. 
c210: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
c220: 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65 79  c static int Key
c230: 56 61 6c 75 65 73 52 65 61 64 0d 0a 20 20 20 20  ValuesRead..    
c240: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c250: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
c260: 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c 75 65   return keyValue
c270: 73 52 65 61 64 3b 20 7d 0d 0a 20 20 20 20 20 20  sRead; }..      
c280: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
c290: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
c2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c2b0: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
c2e0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
c2f0: 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79  e static int key
c300: 56 61 6c 75 65 73 57 72 69 74 74 65 6e 3b 0d 0a  ValuesWritten;..
c310: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c320: 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b 65  ic static int Ke
c330: 79 56 61 6c 75 65 73 57 72 69 74 74 65 6e 0d 0a  yValuesWritten..
c340: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
c360: 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
c370: 61 6c 75 65 73 57 72 69 74 74 65 6e 3b 20 7d 0d  aluesWritten; }.
c380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c3f0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c400: 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c  int keyValuesDel
c410: 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  eted;..         
c420: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c430: 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65   int KeyValuesDe
c440: 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  leted..         
c450: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c460: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
c470: 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65  rn keyValuesDele
c480: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
c490: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
c4a0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
c4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c510: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
c520: 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
c530: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
c540: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
c550: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
c560: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
c570: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
c580: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
c590: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
c5b0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
c5c0: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
c5d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
c5e0: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c600: 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20   writable,..    
c610: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
c620: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
c630: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
c640: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
c650: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
c660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c670: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
c680: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c6b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c6c0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
c6d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c6e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
c6f0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72 69  ebugAndTrace(wri
c700: 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20  table ?..       
c710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c720: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
c730: 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50 72  ighest : TracePr
c740: 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a  iority.Higher,..
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c760: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
c770: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
c780: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
c790: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
c7b0: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
c7c0: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20  bKeyName = {1}, 
c7d0: 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c  writable = {2}",
c7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c7f0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
c800: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
c810: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
c820: 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74 61  ForDisplay(writa
c850: 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ble)), traceCate
c860: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
c870: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c890: 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f   HACK: Always fo
c8a0: 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61 63  rbid writable ac
c8b0: 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61 74  cess when operat
c8c0: 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20 20  ing in..        
c8d0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
c8e0: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 2e   "what-if" mode.
c8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c900: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
c910: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c920: 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74  ryKey key = root
c930: 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  Key.OpenSubKey(.
c940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c950: 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c       subKeyName,
c960: 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20   whatIf ? false 
c970: 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a  : writable);....
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e  return (key != n
c9a0: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
c9c0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
c9d0: 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61 6c  key, whatIf, fal
c9e0: 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c  se, false) : nul
c9f0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
ca00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ca10: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
ca20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ca50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
ca60: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
ca70: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
ca80: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
caa0: 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65  ic static MockRe
cab0: 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65  gistryKey Create
cac0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
cad0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
cae0: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
caf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
cb00: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
cb10: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
cb20: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
cb30: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
cb40: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
cb50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
cb60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
cb70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
cb80: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
cb90: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
cbb0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cbd0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
cc00: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
cc10: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc30: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
cc40: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
cc50: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
cc60: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72                "r
cc80: 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75  ootKey = {0}, su
cc90: 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c  bKeyName = {1}",
cca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccb0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
ccc0: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46  play(rootKey), F
ccd0: 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79  orDisplay(subKey
cce0: 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd00: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
cd10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
cd20: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
cd30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
cd60: 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a          // HACK:
cd70: 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20 6b   Always open a k
cd80: 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20  ey, rather than 
cd90: 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68 65  creating one whe
cda0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
cdb0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
cdc0: 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 22 77 68  operating in "wh
cdd0: 61 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20  at-if" mode...  
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
ce00: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68            if (wh
ce10: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
ce20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce40: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ce50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce60: 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d    // HACK: Attem
ce70: 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73  pt to open the s
ce80: 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79  pecified sub-key
ce90: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 20  .  If..         
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ceb0: 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61 69  /       this fai
cec0: 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70  ls, we will simp
ced0: 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72 6f  ly return the ro
cee0: 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot..            
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
cf00: 20 20 20 20 20 6b 65 79 20 69 74 73 65 6c 66 20       key itself 
cf10: 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20  since no writes 
cf20: 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a  are allowed in..
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf40: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
cf50: 20 22 77 68 61 74 2d 69 66 22 20 6d 6f 64 65 20   "what-if" mode 
cf60: 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20  anyhow...       
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf80: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
cfa0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
cfb0: 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53   = rootKey.OpenS
cfc0: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
cfd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cff0: 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c  turn (key != nul
d000: 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  l) ?..          
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b    key : new Mock
d030: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d060: 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d  otKey, subKeyNam
d070: 65 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  e, whatIf, false
d080: 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
d090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d0b0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
d0e0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
d0f0: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
d100: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61      rootKey.Crea
d130: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
d140: 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 20 66 61  ame), whatIf, fa
d150: 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20    false);..     
d180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d1a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
d1b0: 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20       finally..  
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d1e0: 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65 61       subKeysCrea
d1f0: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
d200: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d210: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d220: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d270: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
d280: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
d290: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
d2a0: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
d2b0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d2c0: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
d2d0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
d2e0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
d2f0: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d310: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
d320: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d330: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
d340: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
d350: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
d360: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
d370: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
d380: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
d390: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d3a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d3b0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
d3c0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d400: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
d420: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
d430: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
d440: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
d470: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
d480: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
d490: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
d4a0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
d4b0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
d4c0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
d4f0: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
d500: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
d510: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
d530: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
d540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d550: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
d560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d570: 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74     rootKey.Delet
d580: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
d590: 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  me, throwOnMissi
d5a0: 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ng);....        
d5b0: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44          subKeysD
d5c0: 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20  eleted++;..     
d5d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d5e0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
d5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
d630: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
d640: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
d650: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
d660: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
d670: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
d680: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
d690: 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
d6a0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
d6b0: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
d6c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d6d0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
d6e0: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
d6f0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
d700: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
d710: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
d720: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d730: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
d740: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
d750: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
d760: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
d780: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
d790: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
d7a0: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
d7c0: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
d7d0: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
d7e0: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
d810: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
d820: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
d830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d840: 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65           "rootKe
d850: 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e  y = {0}, subKeyN
d860: 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ame = {1}",..   
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d880: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
d890: 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73  rootKey), ForDis
d8a0: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
d8b0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
d8d0: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
d8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
d8f0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53   rootKey.DeleteS
d920: 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79  ubKeyTree(subKey
d930: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d940: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
d950: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
d960: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d970: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
d980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
d9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
d9d0: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
d9e0: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
d9f0: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
da00: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
da10: 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65 74 53  ic string[] GetS
da20: 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20  ubKeyNames(..   
da30: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
da40: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
da50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da60: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
da70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da80: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
daa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
dab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dac0: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
dad0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dae0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
daf0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
db00: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
db10: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
db20: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
db30: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
db40: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
db50: 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gh,..           
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
db70: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
db80: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
db90: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20     "key = {0}", 
dbc0: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29  ForDisplay(key))
dbd0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
dbe0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dbf0: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
dc00: 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29  GetSubKeyNames()
dc10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
dc20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dc30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dc70: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
dc80: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
dc90: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
dca0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
dcb0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
dcc0: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
dcd0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
dce0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
dcf0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
dd00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd10: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
dd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
dd30: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
dd40: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
dd50: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
dd60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd70: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
dd80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dd90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
dda0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ddb0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
ddc0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
ddd0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
dde0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
ddf0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
de00: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
de10: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
de20: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
de30: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
de40: 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
de60: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
de70: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
de80: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
deb0: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66   name = {1}, def
dec0: 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22  aultValue = {2}"
ded0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dee0: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
def0: 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
df00: 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20  isplay(name),.. 
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df20: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
df30: 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29  y(defaultValue))
df40: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
df50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
df60: 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
df70: 65 20 3d 20 6b 65 79 2e 47 65 74 56 61 6c 75 65  e = key.GetValue
df80: 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56 61  (name, defaultVa
df90: 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lue);....       
dfa0: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
dfb0: 65 73 52 65 61 64 2b 2b 3b 0d 0a 0d 0a 20 20 20  esRead++;....   
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
dfd0: 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  urn value;..    
dfe0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
dff0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
e000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e040: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
e050: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
e060: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
e070: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
e080: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
e090: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e0b0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
e0c0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
e0d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
e0e0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
e0f0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
e100: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
e110: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
e120: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e130: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
e140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e150: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
e160: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e170: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
e180: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e190: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
e1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e1b0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
e1c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e1d0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
e1e0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
e1f0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
e200: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
e220: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
e230: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
e240: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
e270: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
e280: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
e2b0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
e2c0: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
e2d0: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
e300: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e310: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
e320: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
e330: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
e340: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
e350: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e360: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 57 72       keyValuesWr
e370: 69 74 74 65 6e 2b 2b 3b 0d 0a 20 20 20 20 20 20  itten++;..      
e380: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
e390: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
e3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
e3e0: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
e3f0: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
e400: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
e410: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
e420: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
e430: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
e440: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e450: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
e460: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
e470: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
e480: 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
e490: 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
e4a0: 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
e4c0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
e4d0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
e4e0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
e4f0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
e500: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e510: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
e520: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e540: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
e550: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e560: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
e580: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
e590: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
e5a0: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5c0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
e5d0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
e5e0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
e5f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
e600: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
e610: 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31  = {0}, name = {1
e620: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  }", ForDisplay(k
e630: 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ey),..          
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
e650: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c  rDisplay(name)),
e660: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
e670: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e680: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
e690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e6a0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
e6b0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 74 68 72 6f  Value(name, thro
e6c0: 77 4f 6e 4d 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a  wOnMissing);....
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6e0: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
e6f0: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
e700: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
e710: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
e720: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
e730: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
e740: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
e750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
e790: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
e7a0: 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61 73 73  StringList Class
e7b0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
e7c0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
e7d0: 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74  tringList : List
e7e0: 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20  <string>..      
e7f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e800: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
e810: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e820: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e830: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e850: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e860: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e870: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e8c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e8d0: 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74  ublic StringList
e8e0: 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72  (IEnumerable<str
e8f0: 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29  ing> collection)
e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e910: 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74    : base(collect
e920: 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ion)..          
e930: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
e940: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
e950: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
e960: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
e970: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e980: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
e990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e9d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e9e0: 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 44 69  #region StringDi
e9f0: 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a  ctionary Class..
ea00: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
ea10: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72  sealed class Str
ea20: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 3a 20  ingDictionary : 
ea30: 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
ea40: 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  g, string>..    
ea50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ea60: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
ea70: 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20  Dictionary()..  
ea80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
eaa0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
eab0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
eac0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
ead0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
eae0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
eaf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
eb30: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
eb40: 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73  VersionList Clas
eb50: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
eb60: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
eb70: 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69  VersionList : Li
eb80: 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20  st<Version>..   
eb90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eba0: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
ebb0: 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  onList()..      
ebc0: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
ebd0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
ebe0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
ebf0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
ec00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
ec10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ec20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ec60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
ec70: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
ec80: 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  nList(IEnumerabl
ec90: 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65  e<Version> colle
eca0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
ecb0: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63          : base(c
ecc0: 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20  ollection)..    
ecd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ece0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
ecf0: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
ed00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
ed10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
ed20: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
ed30: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ed40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ed70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
ed80: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
ed90: 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a  rsionMap Class..
eda0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
edb0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
edc0: 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f  sionMap : Dictio
edd0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56 65 72  nary<string, Ver
ede0: 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20  sionList>..     
edf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ee00: 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e    public Version
ee10: 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20 20  Map()..         
ee20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
ee30: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
ee40: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
ee50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ee60: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
ee70: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ee80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eeb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eec0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
eed0: 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67 65   #region Package
eee0: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
eef0: 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20  internal sealed 
ef00: 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a 20  class Package.. 
ef10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef20: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
ef30: 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72  blic Constructor
ef40: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
ef50: 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29 0d  ublic Package().
ef60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
efa0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
efb0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
efc0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
efd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
efe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f000: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
f010: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
f020: 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65  Public Propertie
f030: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
f040: 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 70 72  rivate string pr
f050: 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e  oviderInvariantN
f060: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f070: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
f080: 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  ProviderInvarian
f090: 74 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  tName..         
f0a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f0b0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
f0c0: 72 6e 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72  rn providerInvar
f0d0: 69 61 6e 74 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  iantName; }..   
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f0f0: 20 7b 20 70 72 6f 76 69 64 65 72 49 6e 76 61 72   { providerInvar
f100: 69 61 6e 74 4e 61 6d 65 20 3d 20 76 61 6c 75 65  iantName = value
f110: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
f120: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
f130: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f170: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f180: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
f190: 69 6e 67 20 66 61 63 74 6f 72 79 54 79 70 65 4e  ing factoryTypeN
f1a0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
f1b0: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
f1c0: 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 0d  FactoryTypeName.
f1d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
f1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1f0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 66 61 63  get { return fac
f200: 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 20 7d 0d  toryTypeName; }.
f210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f220: 20 73 65 74 20 7b 20 66 61 63 74 6f 72 79 54 79   set { factoryTy
f230: 70 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20  peName = value; 
f240: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f250: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f2a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
f2b0: 20 20 20 70 72 69 76 61 74 65 20 41 73 73 65 6d     private Assem
f2c0: 62 6c 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72  blyName provider
f2d0: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20  AssemblyName;.. 
f2e0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f2f0: 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 50  c AssemblyName P
f300: 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
f310: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
f320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f330: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
f340: 20 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c   providerAssembl
f350: 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  yName; }..      
f360: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
f370: 70 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79  providerAssembly
f380: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
f390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
f3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f400: 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
f410: 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73  yName designerAs
f420: 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
f430: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
f440: 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 44 65 73  AssemblyName Des
f450: 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
f460: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
f470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f480: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64    get { return d
f490: 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
f4a0: 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
f4b0: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
f4c0: 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
f4d0: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
f4e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
f500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
f540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
f550: 72 69 76 61 74 65 20 62 6f 6f 6c 20 67 6c 6f 62  rivate bool glob
f560: 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b  alAssemblyCache;
f570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
f580: 62 6c 69 63 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c  blic bool Global
f590: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 0d 0a 20  AssemblyCache.. 
f5a0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f5c0: 74 20 7b 20 72 65 74 75 72 6e 20 67 6c 6f 62 61  t { return globa
f5d0: 6c 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 20  lAssemblyCache; 
f5e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f5f0: 20 20 20 73 65 74 20 7b 20 67 6c 6f 62 61 6c 41     set { globalA
f600: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 76  ssemblyCache = v
f610: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f620: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f630: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
f640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f650: 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
f680: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f690: 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 3b   Guid packageId;
f6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
f6b0: 62 6c 69 63 20 47 75 69 64 20 50 61 63 6b 61 67  blic Guid Packag
f6c0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  eId..           
f6d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f6e0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
f6f0: 20 70 61 63 6b 61 67 65 49 64 3b 20 7d 0d 0a 20   packageId; }.. 
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
f710: 65 74 20 7b 20 70 61 63 6b 61 67 65 49 64 20 3d  et { packageId =
f720: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f730: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f740: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
f790: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f7a0: 74 65 20 47 75 69 64 20 73 65 72 76 69 63 65 49  te Guid serviceI
f7b0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
f7c0: 70 75 62 6c 69 63 20 47 75 69 64 20 53 65 72 76  public Guid Serv
f7d0: 69 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  iceId..         
f7e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
f7f0: 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
f800: 72 6e 20 73 65 72 76 69 63 65 49 64 3b 20 7d 0d  rn serviceId; }.
f810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f820: 20 73 65 74 20 7b 20 73 65 72 76 69 63 65 49 64   set { serviceId
f830: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f840: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f850: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
f8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f8b0: 76 61 74 65 20 47 75 69 64 20 64 61 74 61 53 6f  vate Guid dataSo
f8c0: 75 72 63 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  urceId;..       
f8d0: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
f8e0: 20 44 61 74 61 53 6f 75 72 63 65 49 64 0d 0a 20   DataSourceId.. 
f8f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
f910: 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 53  t { return dataS
f920: 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  ourceId; }..    
f930: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f940: 7b 20 64 61 74 61 53 6f 75 72 63 65 49 64 20 3d  { dataSourceId =
f950: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
f960: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f970: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
f980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
f9c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f9d0: 74 65 20 47 75 69 64 20 64 61 74 61 50 72 6f 76  te Guid dataProv
f9e0: 69 64 65 72 49 64 3b 0d 0a 20 20 20 20 20 20 20  iderId;..       
f9f0: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
fa00: 20 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 0d   DataProviderId.
fa10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
fa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa30: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74  get { return dat
fa40: 61 50 72 6f 76 69 64 65 72 49 64 3b 20 7d 0d 0a  aProviderId; }..
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 73 65 74 20 7b 20 64 61 74 61 50 72 6f 76 69 64  set { dataProvid
fa70: 65 72 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  erId = value; }.
fa80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
fa90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
faa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fae0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
faf0: 20 70 72 69 76 61 74 65 20 47 75 69 64 20 61 64   private Guid ad
fb00: 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
fb10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fb20: 75 62 6c 69 63 20 47 75 69 64 20 41 64 6f 4e 65  ublic Guid AdoNe
fb30: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20  tTechnologyId.. 
fb40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
fb60: 74 20 7b 20 72 65 74 75 72 6e 20 61 64 6f 4e 65  t { return adoNe
fb70: 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d  tTechnologyId; }
fb80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fb90: 20 20 73 65 74 20 7b 20 61 64 6f 4e 65 74 54 65    set { adoNetTe
fba0: 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 76 61 6c  chnologyId = val
fbb0: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
fbc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
fbd0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
fbe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fbf0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
fc00: 20 20 20 20 20 20 20 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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
fc50: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
fc60: 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
fc70: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
fc80: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
fc90: 61 73 73 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ass Configuratio
fca0: 6e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  n..        {..  
fcb0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
fcc0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61  n Private Consta
fcd0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nts..           
fce0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63   private const c
fcf0: 68 61 72 20 53 77 69 74 63 68 20 3d 20 27 2d 27  har Switch = '-'
fd00: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
fd10: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61  rivate const cha
fd20: 72 20 41 6c 74 53 77 69 74 63 68 20 3d 20 27 2f  r AltSwitch = '/
fd30: 27 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ';....          
fd40: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
fd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fd80: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
fd90: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
fda0: 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 63 68 61  tic readonly cha
fdb0: 72 5b 5d 20 53 77 69 74 63 68 43 68 61 72 73 20  r[] SwitchChars 
fdc0: 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
fdd0: 20 20 20 20 20 53 77 69 74 63 68 2c 20 41 6c 74       Switch, Alt
fde0: 53 77 69 74 63 68 0d 0a 20 20 20 20 20 20 20 20  Switch..        
fdf0: 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
fe00: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
fe10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fe40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
fe50: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fe60: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e   const string In
fe70: 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53  variantName = "S
fe80: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
fe90: 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
fea0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
feb0: 74 72 69 6e 67 20 45 66 36 49 6e 76 61 72 69 61  tring Ef6Invaria
fec0: 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ntName = "System
fed0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36  .Data.SQLite.EF6
fee0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
fef0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ff00: 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ff40: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
ff50: 73 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72  st string Factor
ff60: 79 54 79 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20  yTypeName =..   
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 79               "Sy
ff80: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
ff90: 2e 53 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b  .SQLiteFactory";
ffa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ffb0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
ffc0: 72 69 6e 67 20 45 66 36 46 61 63 74 6f 72 79 54  ring Ef6FactoryT
ffd0: 79 70 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20  ypeName =..     
ffe0: 20 20 20 20 20 20 20 20 20 20 20 22 53 79 73 74             "Syst
fff0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
10000 46 36 2e 53 51 4c 69 74 65 50 72 6f 76 69 64 65  F6.SQLiteProvide
10010 72 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20  rFactory";..    
10020 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
10030 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
10040 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10060 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10090 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
100a0 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61  vate Static Data
100b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
100c0 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73 73  ivate static Ass
100d0 65 6d 62 6c 79 20 73 79 73 74 65 6d 45 66 36 41  embly systemEf6A
100e0 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
100f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
10100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10150 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
10160 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
10170 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
10180 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
10190 65 6d 62 6c 79 4e 61 6d 65 20 63 6f 72 65 41 73  emblyName coreAs
101a0 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
101b0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
101c0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 6c 69   AssemblyName li
101d0 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d  nqAssemblyName;.
101e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
101f0 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
10200 65 20 65 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d  e ef6AssemblyNam
10210 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10220 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
10230 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73 73  Name designerAss
10240 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
10250 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
10260 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
10270 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
102b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
102c0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
102d0 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
102e0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
102f0 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61  rivate Configura
10300 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
10310 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
10320 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  assembly,..     
10330 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
10340 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g logFileName,..
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
10370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10380 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
10390 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
103a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
103b0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
103d0 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d  tring ef6FileNam
103e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
103f0 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
10400 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  nerFileName,..  
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10420 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72  ring registryVer
10430 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
10440 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
10450 6e 66 69 67 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  nfigVersion,..  
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
10470 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e 53 75  ring vsVersionSu
10480 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20  ffix,..         
10490 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
104a0 62 75 67 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  bugFormat,..    
104b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
104c0 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d  ng traceFormat,.
104d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
104e0 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e   InstallFlags in
104f0 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20  stallFlags,..   
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f               Pro
10510 76 69 64 65 72 46 6c 61 67 73 20 70 72 6f 76 69  viderFlags provi
10520 64 65 72 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  derFlags,..     
10530 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
10540 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
10550 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20  iority,..       
10560 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
10570 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
10580 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
10590 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
105a0 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
105b0 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61        bool insta
105c0 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
105d0 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c       bool wow64,
105e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105f0 20 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65    bool noRuntime
10600 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
10610 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
10620 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20  oDesktop,..     
10630 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
10640 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20  noCompact,..    
10650 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
10660 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20   noNetFx20,..   
10670 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10680 6c 20 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a 20 20  l noNetFx35,..  
10690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
106a0 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20  ol noNetFx40,.. 
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
106c0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a  ool noNetFx45,..
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 2c  bool noNetFx451,
106f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10700 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c    bool noVs2005,
10710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10720 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c    bool noVs2008,
10730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10740 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c    bool noVs2010,
10750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10760 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c    bool noVs2012,
10770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10780 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c    bool noVs2013,
10790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107a0 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d    bool noTrace,.
107b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
107c0 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c   bool noConsole,
107d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107e0 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20    bool noLog,.. 
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10800 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
10810 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
10820 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
10830 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10840 20 20 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a     bool debug,..
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10860 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10880 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool confirm..   
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
108a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
108c0 68 69 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61  his.assembly = a
108d0 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
108e0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c            this.l
108f0 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67  ogFileName = log
10900 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
10910 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10920 64 69 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65  directory = dire
10930 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
10940 20 20 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72          this.cor
10950 65 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65  eFileName = core
10960 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
10970 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10980 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c  linqFileName = l
10990 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  inqFileName;..  
109a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
109b0 69 73 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d  is.ef6FileName =
109c0 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   ef6FileName;.. 
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
109e0 68 69 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  his.designerFile
109f0 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46  Name = designerF
10a00 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
10a10 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 72            this.r
10a20 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d  egistryVersion =
10a30 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
10a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10a50 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65     this.configVe
10a60 72 73 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65  rsion = configVe
10a70 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20  rsion;..        
10a80 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 73 56          this.vsV
10a90 65 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76  ersionSuffix = v
10aa0 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d  sVersionSuffix;.
10ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ac0 20 74 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61   this.debugForma
10ad0 74 20 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b  t = debugFormat;
10ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10af0 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d    this.traceForm
10b00 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74  at = traceFormat
10b10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10b20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46     this.installF
10b30 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c  lags = installFl
10b40 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
10b50 20 20 20 20 20 20 74 68 69 73 2e 70 72 6f 76 69        this.provi
10b60 64 65 72 46 6c 61 67 73 20 3d 20 70 72 6f 76 69  derFlags = provi
10b70 64 65 72 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  derFlags;..     
10b80 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10b90 64 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  debugPriority = 
10ba0 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a  debugPriority;..
10bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bc0 74 68 69 73 2e 74 72 61 63 65 50 72 69 6f 72 69  this.tracePriori
10bd0 74 79 20 3d 20 74 72 61 63 65 50 72 69 6f 72 69  ty = tracePriori
10be0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
10bf0 20 20 20 20 20 74 68 69 73 2e 70 65 72 55 73 65       this.perUse
10c00 72 20 3d 20 70 65 72 55 73 65 72 3b 0d 0a 20 20  r = perUser;..  
10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10c20 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73  is.install = ins
10c30 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
10c40 20 20 20 20 20 20 20 74 68 69 73 2e 77 6f 77 36         this.wow6
10c50 34 20 3d 20 77 6f 77 36 34 3b 0d 0a 20 20 20 20  4 = wow64;..    
10c60 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10c70 2e 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  .noRuntimeVersio
10c80 6e 20 3d 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72  n = noRuntimeVer
10c90 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
10ca0 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65         this.noDe
10cb0 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f  sktop = noDeskto
10cc0 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
10cd0 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61      this.noCompa
10ce0 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d  ct = noCompact;.
10cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d00 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20   this.noNetFx20 
10d10 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20  = noNetFx20;..  
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10d30 69 73 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 6e  is.noNetFx35 = n
10d40 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20 20 20  oNetFx35;..     
10d50 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10d60 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65  noNetFx40 = noNe
10d70 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx40;..        
10d80 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
10d90 65 74 46 78 34 35 20 3d 20 6e 6f 4e 65 74 46 78  etFx45 = noNetFx
10da0 34 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  45;..           
10db0 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46       this.noNetF
10dc0 78 34 35 31 20 3d 20 6e 6f 4e 65 74 46 78 34 35  x451 = noNetFx45
10dd0 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
10de0 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30      this.noVs200
10df0 35 20 3d 20 6e 6f 56 73 32 30 30 35 3b 0d 0a 20  5 = noVs2005;.. 
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10e10 68 69 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e  his.noVs2008 = n
10e20 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
10e30 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10e40 6f 56 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30  oVs2010 = noVs20
10e50 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10;..           
10e60 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
10e70 31 32 20 3d 20 6e 6f 56 73 32 30 31 32 3b 0d 0a  12 = noVs2012;..
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 74 68 69 73 2e 6e 6f 56 73 32 30 31 33 20 3d 20  this.noVs2013 = 
10ea0 6e 6f 56 73 32 30 31 33 3b 0d 0a 20 20 20 20 20  noVs2013;..     
10eb0 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10ec0 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63  noTrace = noTrac
10ed0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10ee0 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f      this.noConso
10ef0 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  le = noConsole;.
10f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f10 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f   this.noLog = no
10f20 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Log;..          
10f30 20 20 20 20 20 20 74 68 69 73 2e 74 68 72 6f 77        this.throw
10f40 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 74 68 72 6f  OnMissing = thro
10f50 77 4f 6e 4d 69 73 73 69 6e 67 3b 0d 0a 20 20 20  wOnMissing;..   
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10f70 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
10f80 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
10f90 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 20 3d      this.debug =
10fa0 20 64 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20   debug;..       
10fb0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 65           this.ve
10fc0 72 62 6f 73 65 20 3d 20 76 65 72 62 6f 73 65 3b  rbose = verbose;
10fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fe0 20 20 74 68 69 73 2e 63 6f 6e 66 69 72 6d 20 3d    this.confirm =
10ff0 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20   confirm;..     
11000 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11010 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
11020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11070 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
11080 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
11090 74 65 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  te Static Method
110a0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
110b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
110c0 69 64 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c  id GetDefaultFil
110d0 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
110e0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
110f0 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11110 72 65 66 20 73 74 72 69 6e 67 20 63 6f 72 65 46  ref string coreF
11120 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
11130 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
11140 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
11150 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
11160 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
11170 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  f6FileName,..   
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
11190 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
111a0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
111b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
111c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
111d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
111e0 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20  thisAssembly == 
111f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
11200 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11210 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
11220 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
11230 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74  = Path.GetDirect
11240 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73 65  oryName(thisAsse
11250 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d  mbly.Location);.
11260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11270 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
11280 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
11290 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
112b0 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
112c0 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
112d0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
112e0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f      Installer.Co
11310 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
11340 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
11350 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
11360 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
11370 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
11380 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
11390 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e          ef6FileN
113a0 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
113b0 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113d0 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36     Installer.Ef6
113e0 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
11400 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
11410 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
11420 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
11440 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
11450 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
11460 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11470 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
11480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
114c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
114d0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
114e0 43 68 65 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20  CheckOption(..  
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11500 66 20 73 74 72 69 6e 67 20 61 72 67 0d 0a 20 20  f string arg..  
11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
11520 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11540 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20  string result = 
11550 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
11560 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
11570 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
11580 79 28 72 65 73 75 6c 74 29 29 0d 0a 20 20 20 20  y(result))..    
11590 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
115c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
115d0 54 45 3a 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c  TE: Remove all l
115e0 65 61 64 69 6e 67 20 73 77 69 74 63 68 20 63 68  eading switch ch
115f0 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ars...          
11600 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 20 72 65 73 75 6c 74 20 3d 20 72 65 73 75 6c    result = resul
11630 74 2e 54 72 69 6d 53 74 61 72 74 28 53 77 69 74  t.TrimStart(Swit
11640 63 68 43 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20  chChars);....   
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11660 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
11670 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
11680 3a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 73  : How many chars
11690 20 77 65 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a   were removed?..
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116b0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
116c0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
116d0 63 6f 75 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67  count = arg.Leng
116e0 74 68 20 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67  th - result.Leng
116f0 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  th;....         
11700 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 61 73 20     // NOTE: Was 
11730 74 68 65 72 65 20 61 74 20 6c 65 61 73 74 20 6f  there at least o
11740 6e 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne?..           
11750 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 69 66 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d   if (count > 0).
11780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11790 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
117c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
117d0 4f 54 45 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65  OTE: Ok, replace
117e0 20 74 68 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d   their original.
117f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11800 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11810 20 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20    argument...   
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11830 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 61 72 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a   arg = result;..
11860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11870 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59        // NOTE: Y
118a0 65 73 2c 20 74 68 69 73 20 69 73 20 61 20 73 77  es, this is a sw
118b0 69 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  itch...         
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
118d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
118e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
118f0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11930 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
11940 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11950 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11960 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
119a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
119b0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
119c0 69 63 20 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74  ic bool MatchOpt
119d0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
119e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 61 72 67        string arg
119f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11a00 20 20 20 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e     string option
11a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
11a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11a40 20 20 20 20 69 66 20 28 28 61 72 67 20 3d 3d 20      if ((arg == 
11a50 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e  null) || (option
11a60 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
11a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11aa0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 43   return String.C
11ab0 6f 6d 70 61 72 65 28 61 72 67 2c 20 30 2c 20 6f  ompare(arg, 0, o
11ac0 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20  ption, 0,..     
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
11ae0 72 67 2e 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e  rg.Length, Strin
11af0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
11b00 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
11b10 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
11b20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11b30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11b80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
11b90 61 74 69 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65  atic bool? Parse
11ba0 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20  Boolean(..      
11bb0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
11bc0 20 74 65 78 74 0d 0a 20 20 20 20 20 20 20 20 20   text..         
11bd0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
11be0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11bf0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
11c00 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
11c10 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
11c20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c40 20 20 62 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d    bool value;...
11c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c60 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72       if (bool.Tr
11c70 79 50 61 72 73 65 28 74 65 78 74 2c 20 6f 75 74  yParse(text, out
11c80 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
11cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11cc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
11ce0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
11cf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11d00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
11d50 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
11d60 69 63 20 6f 62 6a 65 63 74 20 50 61 72 73 65 45  ic object ParseE
11d70 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
11d80 20 20 20 20 20 20 54 79 70 65 20 65 6e 75 6d 54        Type enumT
11d90 79 70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ype,..          
11da0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
11db0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
11dc0 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d      bool noCase.
11dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11de0 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
11df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11e00 20 20 20 69 66 20 28 28 65 6e 75 6d 54 79 70 65     if ((enumType
11e10 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e   == null) || !en
11e20 75 6d 54 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a  umType.IsEnum)..
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
11e50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11e60 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
11e70 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65  IsNullOrEmpty(te
11e80 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  xt))..          
11e90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
11eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ee0 20 72 65 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72   return Enum.Par
11ef0 73 65 28 65 6e 75 6d 54 79 70 65 2c 20 74 65 78  se(enumType, tex
11f00 74 2c 20 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20  t, noCase);..   
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11f30 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11f70 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11fa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
11fb0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11fc0 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
11fd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
11fe0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
11ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12020 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12030 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
12040 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 79  static bool IsSy
12050 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 41  stemEf6AssemblyA
12060 76 61 69 6c 61 62 6c 65 28 0d 0a 20 20 20 20 20  vailable(..     
12070 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12080 74 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  trace..         
12090 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
120a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
120b0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73           if (sys
120c0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 21  temEf6Assembly !
120d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
120f0 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  urn true;....   
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
12110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12130 20 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 45           systemE
12140 66 36 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73  f6Assembly = Ass
12150 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e  embly.Reflection
12160 4f 6e 6c 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20  OnlyLoad(..     
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 20 20 53 79 73 74 65 6d 45 66 36 41 73 73 65     SystemEf6Asse
12190 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  mblyName);....  
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121b0 20 20 69 66 20 28 73 79 73 74 65 6d 45 66 36 41    if (systemEf6A
121c0 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
121d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
121e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
121f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12200 20 69 66 20 28 74 72 61 63 65 29 0d 0a 20 20 20   if (trace)..   
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
12250 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
12260 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
12270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
122a0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
122b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
122c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f   "Entity Framewo
122f0 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20 77 61  rk 6 assembly wa
12300 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12320 20 20 20 20 20 20 20 22 72 65 73 6f 6c 76 65 64         "resolved
12330 20 74 6f 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   to {0}.", ForDi
12340 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12360 20 20 20 20 20 20 20 20 73 79 73 74 65 6d 45 66          systemEf
12370 36 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69  6Assembly.Locati
12380 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
123b0 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
123f0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12420 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12430 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
12440 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12460 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
12470 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12480 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12490 20 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63          if (trac
124a0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
124b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
124c0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
124d0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
124e0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
124f0 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
12520 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d   traceCallback,.
12530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12540 20 20 20 20 20 20 20 20 20 22 45 6e 74 69 74 79           "Entity
12550 20 46 72 61 6d 65 77 6f 72 6b 20 36 20 61 73 73   Framework 6 ass
12560 65 6d 62 6c 79 20 77 61 73 20 6e 6f 74 20 72 65  embly was not re
12570 73 6f 6c 76 65 64 2e 22 2c 0d 0a 20 20 20 20 20  solved.",..     
12580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12590 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
125a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
125b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
125c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
125d0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
125e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
125f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
12600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12630 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
12640 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
12650 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 53 79  static bool IsSy
12660 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47  stemEf6AssemblyG
12670 6c 6f 62 61 6c 28 29 0d 0a 20 20 20 20 20 20 20  lobal()..       
12680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12690 20 20 20 20 20 20 20 20 69 66 20 28 73 79 73 74          if (syst
126a0 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 20 3d 3d  emEf6Assembly ==
126b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
126c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
126d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
126e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
126f0 75 72 6e 20 73 79 73 74 65 6d 45 66 36 41 73 73  urn systemEf6Ass
12700 65 6d 62 6c 79 2e 47 6c 6f 62 61 6c 41 73 73 65  embly.GlobalAsse
12710 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20 20 20  mblyCache;..    
12720 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12730 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
12740 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
12750 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12790 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
127a0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
127b0 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
127c0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
127d0 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
127e0 64 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67  d BreakIntoDebug
127f0 67 65 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ger()..         
12800 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12810 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
12820 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20  iteLine(..      
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
12840 74 74 61 63 68 20 61 20 64 65 62 75 67 67 65 72  ttach a debugger
12850 20 74 6f 20 70 72 6f 63 65 73 73 20 7b 30 7d 20   to process {0} 
12860 61 6e 64 20 70 72 65 73 73 20 22 20 2b 0d 0a 20  and press " +.. 
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 20 20 22 61 6e 79 20 6b 65 79 20 74 6f 20 63     "any key to c
12890 6f 6e 74 69 6e 75 65 2e 22 2c 20 28 74 68 69 73  ontinue.", (this
128a0 50 72 6f 63 65 73 73 20 21 3d 20 6e 75 6c 6c 29  Process != null)
128b0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
128c0 20 20 20 20 20 20 20 20 74 68 69 73 50 72 6f 63          thisProc
128d0 65 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28  ess.Id.ToString(
128e0 29 20 3a 20 22 3c 75 6e 6b 6e 6f 77 6e 3e 22 29  ) : "<unknown>")
128f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12900 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
12910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
12940 28 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77  (true); /* throw
12950 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
12960 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12970 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
12980 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
12990 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
129a0 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
129b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
129c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
129d0 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
129e0 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
129f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12a00 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
12a10 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
12a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12a30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
12a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
12a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
12a90 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69  lic static Confi
12aa0 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44  guration CreateD
12ab0 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20  efault()..      
12ac0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12ad0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
12ae0 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  directory = null
12af0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12b00 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
12b10 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b30 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
12b40 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12b60 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 20  ing ef6FileName 
12b70 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
12b80 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
12b90 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
12ba0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44              GetD
12bc0 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
12bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12be0 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63 74        ref direct
12bf0 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c  ory, ref coreFil
12c00 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46  eName, ref linqF
12c10 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12c30 66 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 72  f ef6FileName, r
12c40 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ef designerFileN
12c50 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
12c60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12c70 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  new Configuratio
12c80 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
12c90 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65          thisAsse
12ca0 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65  mbly, null, dire
12cb0 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e  ctory, coreFileN
12cc0 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ame, linqFileNam
12cd0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12ce0 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e          ef6FileN
12cf0 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c  ame, designerFil
12d00 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  eName, null, nul
12d10 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  l, null,..      
12d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12d30 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
12d40 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61  at, TraceOps.Tra
12d50 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
12d70 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61  nstallFlags.Defa
12d80 75 6c 74 2c 20 50 72 6f 76 69 64 65 72 46 6c 61  ult, ProviderFla
12d90 67 73 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20  gs.Default,..   
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12db0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
12dc0 65 66 61 75 6c 74 2c 20 54 72 61 63 65 50 72 69  efault, TracePri
12dd0 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 66  ority.Default, f
12de0 61 6c 73 65 2c 20 74 72 75 65 2c 0d 0a 20 20 20  alse, true,..   
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12e10 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
12e20 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12e30 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20  , false,..      
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
12e50 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
12e60 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12e70 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
12e80 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
12e90 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
12ea0 2c 20 74 72 75 65 2c 20 74 72 75 65 2c 20 66 61  , true, true, fa
12eb0 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  lse, false, fals
12ec0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
12ed0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12ee0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f20 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
12f30 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
12f40 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
12f50 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
12f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
12f70 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
12f80 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20  FromArgs(..     
12f90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
12fa0 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20  g[] args,..     
12fb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
12fc0 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
12fd0 20 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e           ref Con
12fe0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
12ff0 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
13000 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
13010 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
13030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13050 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
13060 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13070 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
13080 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
130b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
130c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
130d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
130e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13100 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f  nfiguration = Co
13110 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61  nfiguration.Crea
13120 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a  teDefault();....
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
13150 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d   args.Length;...
13160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13170 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
13180 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
13190 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
131a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
131b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61    string arg = a
131e0 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  rgs[index];.... 
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70     // NOTE: Skip
13230 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20 74 68   any argument th
13240 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29 20 6f  at is null (?) o
13250 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20  r an empty..    
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72      //       str
13280 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
132a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
132c0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
132d0 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20 20 20  ty(arg))..      
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13310 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
13340 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  We are going to 
13350 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69 67 69  modify the origi
13360 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a 20 20  nal argument..  
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62        //       b
13390 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79 20 6c  y removing any l
133a0 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20 63 68  eading option ch
133b0 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20 20 20  aracters;..     
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 72     //       ther
133e0 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20 61 20  efore, we use a 
133f0 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20 68 6f  new string to ho
13400 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ld the..        
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66 69 65  //       modifie
13430 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20  d argument...   
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d   string newArg =
13480 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   arg;....       
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
134c0 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
134d0 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
134e0 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
134f0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
13500 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
13510 20 20 20 20 62 65 67 69 6e 20 77 69 74 68 20 61      begin with a
13520 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74  n option charact
13530 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e 75 73  er (e.g. a minus
13540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13550 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13560 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20 73 6c     or forward sl
13570 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20 74 6f  ash); attempt to
13580 20 76 61 6c 69 64 61 74 65 20 74 68 61 74 0d 0a   validate that..
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 2f 2f 20 20 20 20 20 20          //      
135b0 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69   now.  If we fai
135c0 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f 64 65  l in strict mode
135d0 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b 0d 0a  , we are done;..
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
13600 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74   otherwise, just
13610 20 73 6b 69 70 20 74 68 69 73 20 61 72 67 75 6d   skip this argum
13620 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63 65 0d  ent and advance.
13630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13640 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
13650 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6f 6e    to the next on
13660 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
13670 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 20 20 20 20 69 66 20 28 21 43 68 65          if (!Che
136a0 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77  ckOption(ref new
136b0 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  Arg))..         
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
136d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
136f0 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
13700 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
13710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
13730 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
13740 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
13750 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
13780 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13790 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65 64      "Unsupported
137c0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72   command line ar
137d0 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20  gument: {0}",.. 
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
13800 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c  orDisplay(arg)),
13810 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13820 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
13850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13870 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 63 6f 6e 74 69 6e            contin
138a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
138b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
138c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138d0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
13900 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ll the supported
13910 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
13920 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20  tions must..    
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13940 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 61 76      //       hav
13950 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65 72 65  e a value; there
13960 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20 74 6f  fore, attempt to
13970 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20   advance..      
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74    //       to it
139a0 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69   now.  If we fai
139b0 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d  l, we are done..
139c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
139d0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139f0 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d       index++;...
13a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a10 20 20 20 20 20 20 20 20 20 69 66 20 28 69 6e 64           if (ind
13a20 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d 0a 20  ex >= length).. 
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
13a70 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
13a80 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 54 72 61 63 65 50 72 69 6f         TracePrio
13ab0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
13ac0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
13ad0 20 20 20 20 20 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 74 72 61               tra
13af0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
13b00 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73              "Mis
13b30 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f  sing value for o
13b40 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
13b70 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
13b80 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
13b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13bb0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
13be0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
13c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13c20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c40 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
13c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c60 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
13c70 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75  the textual valu
13c80 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e  e of this comman
13c90 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  d line..        
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
13cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13cd0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cf0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
13d00 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b  t = args[index];
13d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13d20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
13d50 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63   Figure out whic
13d60 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  h command line o
13d70 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20  ption this is.. 
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 2f 2f 20 20 20 20 20 20 20         //       
13da0 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61 72 74  (based on a part
13db0 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68 29 20  ial name match) 
13dc0 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a 20 20  and then try..  
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
13df0 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20  o interpret the 
13e00 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73  textual value as
13e10 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20   the correct..  
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
13e40 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ype...          
13e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13e70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 4d 61            if (Ma
13e80 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
13e90 2c 20 22 62 72 65 61 6b 22 29 29 0d 0a 20 20 20  , "break"))..   
13ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13eb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ed0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
13ee0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
13ef0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
13f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f10 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
13f20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
13f70 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
13f80 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13fb0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
13fc0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
13fd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
14000 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
14010 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14030 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
14040 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
14050 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
14090 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
140a0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
140d0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14100 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
14130 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
14140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
14160 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
14170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14180 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
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 69 66 20 28 28 62 6f 6f 6c         if ((bool
141b0 29 76 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20  )value)..       
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 20 20 20 42 72 65 61 6b 49 6e           BreakIn
141e0 74 6f 44 65 62 75 67 67 65 72 28 29 3b 0d 0a 20  toDebugger();.. 
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 7d 0d 0a 20 20 20 20 20 20         }..      
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
14230 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
14240 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 29 29  configVersion"))
14250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14260 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14280 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14290 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 67 56 65 72  ration.configVer
142a0 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a 20 20  sion = text;..  
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142c0 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
142f0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63  ption(newArg, "c
14300 6f 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20  onfirm"))..     
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
14350 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
14360 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
14390 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
143e0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
143f0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14410 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14420 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
14430 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
14440 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
14470 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
14480 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
144b0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
144c0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
144f0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
14500 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
14510 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14530 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
14540 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14560 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
14570 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
14580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14590 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
145a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
145d0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
145e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145f0 20 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69       configurati
14620 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62 6f  on.confirm = (bo
14630 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14650 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
14670 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14680 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 72 65  on(newArg, "core
14690 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
146e0 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  n.coreFileName =
146f0 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20   text;..        
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 7d 0d 0a 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 65 6c 73 65 20             else 
14730 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
14740 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67 22 29  newArg, "debug")
14750 29 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 7b 0d 0a 20 20             {..  
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14780 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
14790 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
147a0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
147d0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
14820 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
14830 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14860 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
14870 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
14880 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
148b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
148c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148f0 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
14900 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
14910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14940 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
14950 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
149f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14a60 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
14a70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
14a80 0a 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 7d 0d 0a 20 20 20 20           }..    
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ab0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
14ac0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
14ad0 20 22 64 65 62 75 67 46 6f 72 6d 61 74 22 29 29   "debugFormat"))
14ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14af0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b10 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14b20 72 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d  ration.debugForm
14b30 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  at = text;..    
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b50 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
14b60 2e 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 63  .DebugFormat = c
14b70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
14b80 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ugFormat;..     
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 7d 0d 0a 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 65 6c                el
14bc0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
14bd0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75  on(newArg, "debu
14be0 67 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20  gPriority"))..  
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
14c30 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  e = ParseEnum(..
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c60 74 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f  typeof(TracePrio
14c70 72 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75  rity), text, tru
14c80 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
14c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ca0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
14cb0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cf0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
14d00 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
14d10 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14d40 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
14d50 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
14d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d80 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
14d90 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
14da0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
14dd0 20 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22   {0} value: {1}"
14de0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e00 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14e10 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
14e20 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
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 20 20 20 20 20 20 20                  
14e50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14eb0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
14ec0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
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 20 20 20 20 20 7d 0d 0a 0d              }...
14f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14f30 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67  figuration.debug
14f40 50 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63  Priority = (Trac
14f50 65 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b  ePriority)value;
14f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
14f80 61 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f  aceOps.DebugPrio
14f90 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61  rity = configura
14fa0 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69  tion.debugPriori
14fb0 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
14ff0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
15000 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72 46 69  Arg, "designerFi
15010 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
15020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15030 20 20 20 7b 0d 0a 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 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15060 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
15070 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
150b0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
150c0 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63  n(newArg, "direc
150d0 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20  tory"))..       
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
15120 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74 3b 0d  rectory = text;.
15130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15150 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15170 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c  / NOTE: *SPECIAL
15180 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 20 74  * Must refresh t
15190 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20  he file names.. 
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
151c0 20 20 20 20 68 65 72 65 20 62 65 63 61 75 73 65      here because
151d0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
151e0 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..     
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
15210 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20  has changed...  
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15230 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
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 73 74 72 69 6e 67            string
15260 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
15270 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
15280 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  reFileName;.... 
15290 20 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 69 66 20 28 21             if (!
152b0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
152c0 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  mpty(coreFileNam
152d0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152f0 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d       coreFileNam
15300 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
15310 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e 61 6d  Name(coreFileNam
15320 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
15350 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
15360 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
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 63 6f 72 65              core
15390 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
153a0 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  ller.CoreFileNam
153b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
153e0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50  coreFileName = P
153f0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20  ath.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 63 6f                co
15420 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65  nfiguration.dire
15430 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e  ctory, coreFileN
15440 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15460 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
15470 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
15480 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
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 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  linqFileName))..
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 20                  
15500 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
15510 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28  ath.GetFileName(
15520 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  linqFileName);..
15530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15550 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
15560 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c 65 4e  rEmpty(linqFileN
15570 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15590 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
155a0 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
155b0 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  LinqFileName;...
155c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
155d0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
155e0 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
155f0 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
15600 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15620 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15630 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
15640 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  , linqFileName);
15650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15670 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61  string ef6FileNa
15680 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
15690 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d  on.ef6FileName;.
156a0 0a 0d 0a 20 20 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 69                 i
156c0 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
156d0 6c 4f 72 45 6d 70 74 79 28 65 66 36 46 69 6c 65  lOrEmpty(ef6File
156e0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
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 65 66 36 46 69 6c 65 4e          ef6FileN
15710 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
15720 6c 65 4e 61 6d 65 28 65 66 36 46 69 6c 65 4e 61  leName(ef6FileNa
15730 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15750 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
15760 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 65 66 36  sNullOrEmpty(ef6
15770 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36 46              ef6F
157a0 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c  ileName = Instal
157b0 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d 65 3b  ler.Ef6FileName;
157c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66  configuration.ef
157f0 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  6FileName = Path
15800 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
15810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15820 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15830 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
15840 72 79 2c 20 65 66 36 46 69 6c 65 4e 61 6d 65 29  ry, ef6FileName)
15850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15870 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
15880 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
15890 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
158a0 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFileName;....  
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
158d0 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
158e0 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65  pty(designerFile
158f0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
15900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15910 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72          designer
15920 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
15930 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69  GetFileName(desi
15940 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
15950 0d 0a 20 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 20 20 20 69 66                if
15970 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
15980 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46  rEmpty(designerF
15990 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
159c0 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e  nerFileName = In
159d0 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72  staller.Designer
159e0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
159f0 20 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 63 6f 6e 66 69 67 75           configu
15a10 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46  ration.designerF
15a20 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
15a30 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
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 63 6f 6e 66 69 67 75           configu
15a60 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
15a70 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  , designerFileNa
15a80 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ab0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
15ac0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
15ad0 77 41 72 67 2c 20 22 65 66 36 46 69 6c 65 4e 61  wArg, "ef6FileNa
15ae0 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
15af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
15b20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46  nfiguration.ef6F
15b30 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
15b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b50 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
15b80 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
15b90 20 22 69 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20   "install"))..  
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
15be0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
15bf0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
15c20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
15c70 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
15c80 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
15c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
15cb0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
15cc0 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
15cd0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
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 74 72 61 63 65 43 61 6c          traceCal
15d00 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15d10 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
15d40 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
15d50 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
15d90 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
15da0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15dc0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15dd0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15e00 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20 72                 r
15e30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
15e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e60 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
15e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
15eb0 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20  ation.install = 
15ec0 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
15ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ee0 20 20 20 20 20 20 7d 0d 0a 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 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
15f10 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69  ption(newArg, "i
15f20 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a  nstallFlags"))..
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 7b 0d 0a 20 20 20 20 20          {..     
15f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f60 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
15f70 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
15f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fa0 20 20 74 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c    typeof(Install
15fb0 46 6c 61 67 73 29 2c 20 74 65 78 74 2c 20 74 72  Flags), text, tr
15fc0 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ue);....        
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
15ff0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 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 65 72 72 6f 72 20 3d 20 54         error = T
16040 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16050 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
16080 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
16090 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
160a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
160b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
160d0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
160e0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
16110 64 20 69 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20  d install flags 
16120 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20  value: {0}",..  
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16150 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78    ForDisplay(tex
16160 74 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t)), traceCatego
16170 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16190 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
161a0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
161d0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161f0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16200 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
16230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16240 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
16250 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28  installFlags = (
16260 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c  InstallFlags)val
16270 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
162b0 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
162c0 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61  Arg, "linqFileNa
162d0 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
162f0 0d 0a 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 63 6f                co
16310 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
16320 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
16330 0d 0a 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 7d 0d 0a 20 20 20            }..   
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16370 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16380 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29  , "logFileName")
16390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
163a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
163d0 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
163e0 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16400 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
16430 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
16440 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20 20 20  Compact"))..    
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16480 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
16490 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
164a0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164c0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
164d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
16520 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
16530 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
16560 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
16570 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
16580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165a0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
165b0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
165c0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
165f0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
16600 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16630 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
16640 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
16650 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16670 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16680 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
166b0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 72 65 74               ret
166e0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16710 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
16760 69 6f 6e 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20  ion.noCompact = 
16770 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
167c0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
167d0 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20  oConsole"))..   
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16810 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
16820 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
16830 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
16860 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
168b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
168c0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168e0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
168f0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
16900 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
16910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16930 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
16940 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
16950 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16970 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
16980 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
16990 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169c0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
169d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
169e0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
169f0 20 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 74 72 61 63 65 43            traceC
16a10 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16a40 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
16a50 20 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 72 65                re
16a70 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16aa0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
16af0 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  tion.noConsole =
16b00 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
16b50 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
16b60 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20  noDesktop"))..  
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ba0 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
16bb0 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
16bc0 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
16bf0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
16c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
16c40 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
16c50 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16c80 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
16c90 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63  st, debugCallbac
16ca0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
16cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
16cd0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
16ce0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
16cf0 20 20 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 20 22 49 6e 76 61             "Inva
16d10 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
16d20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
16d60 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
16d70 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
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 20 74 72 61 63 65             trace
16da0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
16dd0 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 72                 r
16e00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e70 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
16e80 61 74 69 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20  ation.noDesktop 
16e90 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16eb0 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
16ee0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
16ef0 22 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20  "noLog"))..     
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
16f40 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
16f50 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
16f80 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
16fd0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
16fe0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17010 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17020 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17050 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17060 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17070 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 20 22 49 6e 76 61 6c 69 64          "Invalid
170a0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
170b0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
170e0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
170f0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
17100 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
17130 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17160 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
17190 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
171a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
171c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17200 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
17210 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c  on.noLog = (bool
17220 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 7d 0d 0a 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 65 6c 73 65              else
17260 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
17270 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
17280 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x20"))..        
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
172c0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
172d0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
172e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17300 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
17310 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
17360 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
17370 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
173a0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
173b0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
173f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
17400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17420 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
17430 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
17440 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
17470 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
17480 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
17490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
174c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
174f0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
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 72 65 74 75 72 6e 20           return 
17520 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
17550 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17590 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
175a0 6e 6f 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f  noNetFx20 = (boo
175b0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 20 7d 0d 0a 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 65 6c 73               els
175f0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
17600 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74  n(newArg, "noNet
17610 46 78 33 35 22 29 29 0d 0a 20 20 20 20 20 20 20  Fx35"))..       
17620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17650 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
17660 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
17670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
176a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
176d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176e0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
176f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
17700 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17720 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
17730 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
17740 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17770 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
17780 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
17790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
177c0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
177d0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
17800 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
17810 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
17820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
17850 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
17880 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
178b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
178c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
178e0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17920 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
17930 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20 28 62 6f  .noNetFx35 = (bo
17940 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17960 20 20 20 7d 0d 0a 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 65 6c                el
17980 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
17990 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
179a0 74 46 78 34 30 22 29 29 0d 0a 20 20 20 20 20 20  tFx40"))..      
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179e0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
179f0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
17a00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
17a30 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a70 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
17a80 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
17a90 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
17ac0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
17ad0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b00 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17b10 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
17b20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
17b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b40 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
17b50 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
17b60 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
17b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
17b90 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
17ba0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
17bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 74 72 61 63 65 43 61 74 65         traceCate
17be0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
17c10 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
17c40 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17c70 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
17cc0 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28 62  n.noNetFx40 = (b
17cd0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 20 20 20 7d 0d 0a 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 65                 e
17d10 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
17d20 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e  ion(newArg, "noN
17d30 65 74 46 78 34 35 22 29 29 0d 0a 20 20 20 20 20  etFx45"))..     
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
17d80 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
17d90 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
17da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17db0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
17dc0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17de0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e00 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
17e10 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
17e20 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17e50 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
17e60 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
17e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
17ea0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
17eb0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
17ee0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
17ef0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
17f20 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
17f30 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
17f40 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
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 74 72 61 63 65 43 61 74          traceCat
17f70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17fa0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
17fd0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18000 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18040 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
18050 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 28  on.noNetFx45 = (
18060 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
18070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18080 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
180b0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
180c0 4e 65 74 46 78 34 35 31 22 29 29 0d 0a 20 20 20  NetFx451"))..   
180d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18100 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
18110 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
18120 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
18150 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18190 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
181a0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
181b0 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
181e0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
181f0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
18200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18220 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
18230 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
18240 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
18270 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
18280 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
182c0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
182d0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18300 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 20 20 20 69 66 20               if 
18330 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18360 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18390 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
183e0 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 31 20  tion.noNetFx451 
183f0 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
18420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18430 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
18440 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
18450 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  "noRuntimeVersio
18460 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n"))..          
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18490 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
184a0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
184b0 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
184c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
184d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
184e0 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
184f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
18510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
18540 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
18550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
18580 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
18590 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
185a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
185d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
185e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18600 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
18610 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
18620 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
18650 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
18660 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
186a0 29 3b 0d 0a 0d 0a 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 20 20                  
186c0 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
186d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72 6e 20 66 61         return fa
18700 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
18730 3b 0d 0a 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 20 20 7d                 }
18750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18770 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
18780 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
18790 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187b0 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
187e0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
187f0 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20  noTrace"))..    
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
18840 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
18850 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18870 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
18880 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
188d0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
188e0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
188f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18900 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
18910 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
18920 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
18930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62        traceCallb
18960 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
18970 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
18980 20 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 22 49 6e 76 61 6c 69           "Invali
189a0 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
189b0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
189f0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
18a00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
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 74 72 61 63 65 43 61           traceCa
18a30 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18a60 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 72 65 74               ret
18a90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18ac0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b00 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
18b10 69 6f 6e 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62  ion.noTrace = (b
18b20 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 7d 0d 0a 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 65                 e
18b60 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
18b70 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
18b80 73 32 30 30 35 22 29 29 0d 0a 20 20 20 20 20 20  s2005"))..      
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
18bd0 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
18be0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
18c10 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c50 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
18c60 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
18c70 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c90 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
18ca0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
18cb0 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
18cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
18cf0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
18d00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 22 49 6e 76 61 6c 69 64 20         "Invalid 
18d30 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
18d40 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
18d70 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
18d80 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
18d90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
18dc0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18de0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
18df0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
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 72 65 74 75 72             retur
18e20 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18e50 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
18ea0 6e 2e 6e 6f 56 73 32 30 30 35 20 3d 20 28 62 6f  n.noVs2005 = (bo
18eb0 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 7d 0d 0a 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 65 6c                el
18ef0 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
18f00 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
18f10 32 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20  2008"))..       
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
18f60 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
18f70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
18fa0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fe0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
18ff0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
19000 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
19010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19020 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
19030 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
19040 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
19050 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
19080 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
190c0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
190d0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
19100 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
19110 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
19120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
19150 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
19160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19170 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
19180 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
191b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
191e0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
19230 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f  .noVs2008 = (boo
19240 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 7d 0d 0a 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 65 6c 73               els
19280 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
19290 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
192a0 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  010"))..        
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
192e0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
192f0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
19300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
19330 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
19380 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
19390 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
193c0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
193d0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
19410 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
19420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19440 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
19450 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
19460 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19480 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
19490 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
194a0 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
194b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194d0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
194e0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
194f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19500 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
19510 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
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 72 65 74 75 72 6e 20           return 
19540 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
19570 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
195c0 6e 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c  noVs2010 = (bool
195d0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 7d 0d 0a 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 65 6c 73 65              else
19610 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
19620 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
19630 31 32 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  12"))..         
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
19670 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
19680 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
19690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
196b0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
196c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
196e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
19710 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
19720 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
19750 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
19760 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
19770 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
197a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
197e0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
197f0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
19820 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
19830 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
19870 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
198a0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
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 72 65 74 75 72 6e 20 66          return f
198d0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
198e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198f0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
19900 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19920 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19940 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
19950 6f 56 73 32 30 31 32 20 3d 20 28 62 6f 6f 6c 29  oVs2012 = (bool)
19960 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 7d 0d 0a 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 65 6c 73 65 20             else 
199a0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
199b0 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
199c0 33 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  3"))..          
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
199e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
19a00 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
19a10 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
19a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19a40 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
19a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
19a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a90 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
19aa0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
19ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ad0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
19ae0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
19af0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
19b00 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
19b30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
19b70 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
19b80 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
19b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ba0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
19bb0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
19bc0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
19c00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
19c30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72 6e 20 66 61         return fa
19c60 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
19c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c80 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19c90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
19ce0 56 73 32 30 31 33 20 3d 20 28 62 6f 6f 6c 29 76  Vs2013 = (bool)v
19cf0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
19d10 0d 0a 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 65 6c 73 65 20 69            else i
19d30 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
19d40 65 77 41 72 67 2c 20 22 70 65 72 55 73 65 72 22  ewArg, "perUser"
19d50 29 29 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 7b 0d 0a 20              {.. 
19d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
19d90 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
19da0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19dd0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
19e20 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
19e30 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
19e70 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
19e80 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
19e90 20 20 20 20 20 20 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 74 72                tr
19eb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
19ec0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
19f00 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
19f10 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
19f40 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
19f50 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
19f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
19fc0 0a 20 20 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19ff0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1a020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1a060 6e 66 69 67 75 72 61 74 69 6f 6e 2e 70 65 72 55  nfiguration.perU
1a070 73 65 72 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ser = (bool)valu
1a080 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1a090 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
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 65 6c 73 65 20 69 66 20 28         else if (
1a0c0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
1a0d0 72 67 2c 20 22 70 72 6f 76 69 64 65 72 46 6c 61  rg, "providerFla
1a0e0 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  gs"))..         
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1a100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
1a120 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
1a130 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
1a160 50 72 6f 76 69 64 65 72 46 6c 61 67 73 29 2c 20  ProviderFlags), 
1a170 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1a1a0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a1d0 20 20 20 20 20 20 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 65                 e
1a1f0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1a200 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1a240 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1a250 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a280 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1a290 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1a2a0 20 20 20 20 20 20 20 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 22 49 6e 76 61 6c 69 64 20 70 72 6f 76 69 64   "Invalid provid
1a2d0 65 72 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20  er flags value: 
1a2e0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1a310 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72  splay(text)), tr
1a320 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1a330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
1a360 20 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 20 20 20                  
1a380 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1a390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1a3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1a400 67 75 72 61 74 69 6f 6e 2e 70 72 6f 76 69 64 65  guration.provide
1a410 72 46 6c 61 67 73 20 3d 20 28 50 72 6f 76 69 64  rFlags = (Provid
1a420 65 72 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a  erFlags)value;..
1a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a440 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1a470 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1a480 22 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e  "registryVersion
1a490 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1a4d0 69 67 75 72 61 74 69 6f 6e 2e 72 65 67 69 73 74  iguration.regist
1a4e0 72 79 56 65 72 73 69 6f 6e 20 3d 20 74 65 78 74  ryVersion = text
1a4f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a500 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
1a530 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
1a540 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a 20  g, "strict")).. 
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 7b 0d 0a 20 20 20 20 20 20         {..      
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
1a590 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
1a5a0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
1a5d0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1a620 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
1a630 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1a660 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1a670 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
1a680 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1a6b0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1a6c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
1a6f0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
1a700 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
1a740 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
1a750 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
1a760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a770 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a780 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1a790 20 20 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 20 20 20 20 20 69                 i
1a7b0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1a7f0 0a 20 20 20 20 20 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1a820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a830 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a850 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a870 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1a880 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d  : Allow the comm
1a890 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and line argumen
1a8a0 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ts to..         
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65 72     //       over
1a8d0 72 69 64 65 20 74 68 65 20 22 73 74 72 69 63 74  ride the "strict
1a8e0 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a 20  ness" setting.. 
1a8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a900 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1a910 20 20 20 20 70 72 6f 76 69 64 65 64 20 62 79 20      provided by 
1a920 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20  our caller...   
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a960 20 20 20 20 20 20 20 20 20 73 74 72 69 63 74 20           strict 
1a970 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
1a9c0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
1a9d0 22 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22  "throwOnMissing"
1a9e0 29 29 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 7b 0d 0a 20              {.. 
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
1aa20 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
1aa30 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1aa60 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1aa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1aab0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
1aac0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aaf0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1ab00 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1ab10 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ab40 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1ab50 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab80 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
1ab90 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
1aba0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1abd0 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
1abe0 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1ac20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
1ac50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1ac80 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1acb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1acd0 0d 0a 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 63 6f                co
1acf0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f  nfiguration.thro
1ad00 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f  wOnMissing = (bo
1ad10 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1ad50 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
1ad60 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61 63  on(newArg, "trac
1ad70 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20  eFormat"))..    
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1adc0 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 74  .traceFormat = t
1add0 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1ae00 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
1ae10 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d  ration.traceForm
1ae20 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
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 65 6c 73 65 20 69 66 20          else if 
1ae60 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
1ae70 41 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72  Arg, "tracePrior
1ae80 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aea0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1aeb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1aec0 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
1aed0 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1af00 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c  (TracePriority),
1af10 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
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 69 66 20               if 
1af40 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1af50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1afa0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1afb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1afe0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1aff0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1b020 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1b030 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76    "Invalid {0} v
1b070 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0a0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
1b0b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
1b0c0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
1b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1b0f0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
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 20 20 69 66 20               if 
1b120 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 20 20 20 72 65                re
1b150 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
1b160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1b180 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1c0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1b1d0 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
1b1e0 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72  ty = (TracePrior
1b1f0 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ity)value;..    
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1b220 2e 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d  .TracePriority =
1b230 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
1b240 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b260 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1b290 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1b2a0 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20 20  verbose"))..    
1b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2e0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
1b2f0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
1b300 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
1b330 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b350 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b370 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
1b380 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
1b390 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b3c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
1b3d0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
1b3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62        traceCallb
1b410 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1b420 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b440 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
1b450 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
1b460 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
1b4a0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
1b4b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1b4e0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1b4f0 20 20 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 20 20 69 66 20 28              if (
1b510 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1b520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b530 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b540 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 20 20 20 20 63 6f                co
1b570 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b590 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74        configurat
1b5c0 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28 62  ion.verbose = (b
1b5d0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b610 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1b620 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 73 56  ion(newArg, "vsV
1b630 65 72 73 69 6f 6e 53 75 66 66 69 78 22 29 29 0d  ersionSuffix")).
1b640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b650 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b670 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1b680 61 74 69 6f 6e 2e 76 73 56 65 72 73 69 6f 6e 53  ation.vsVersionS
1b690 75 66 66 69 78 20 3d 20 74 65 78 74 3b 0d 0a 20  uffix = text;.. 
1b6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6b0 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
1b6e0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
1b6f0 77 68 61 74 49 66 22 29 29 0d 0a 20 20 20 20 20  whatIf"))..     
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
1b740 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
1b750 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
1b780 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
1b7d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1b7e0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b800 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b810 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1b820 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1b830 0a 20 20 20 20 20 20 20 20 20 20 20 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 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1b860 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1b870 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
1b8a0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
1b8b0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1b8e0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
1b8f0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
1b900 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b920 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1b930 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
1b960 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 72 65 74 75              retu
1b990 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1b9c0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1ba10 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f  on.whatIf = (boo
1ba20 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 20 20 7d 0d 0a 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 65 6c 73               els
1ba60 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
1ba70 6e 28 6e 65 77 41 72 67 2c 20 22 77 6f 77 36 34  n(newArg, "wow64
1ba80 22 29 29 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 7b 0d 0a               {..
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1bac0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
1bad0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
1bae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1bb00 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
1bb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1bb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1bb60 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1bb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb90 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1bba0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
1bbb0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
1bbc0 20 20 20 20 20 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 20 20 74                 t
1bbe0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1bbf0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20                  
1bc20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
1bc30 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
1bc40 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc60 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1bc70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
1bc80 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1bcc0 3b 0d 0a 0d 0a 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 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
1bcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd10 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1bd20 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd40 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1bd50 0d 0a 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 20 20 20 20 7d 0d                }.
1bd70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1bd90 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 6f 77  onfiguration.wow
1bda0 36 34 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  64 = (bool)value
1bdb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1bdc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bde0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1be30 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1be40 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1be70 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
1be80 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1beb0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1bec0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70           "Unsupp
1bef0 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69  orted command li
1bf00 6e 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c  ne option: {0}",
1bf10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
1bf40 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
1bf50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1bfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1bfe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bff0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1c000 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c010 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c020 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
1c030 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
1c040 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c060 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1c070 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1c080 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
1c090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c0a0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1c0b0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1c0c0 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
1c0d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
1c100 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f 6e  ed to modify con
1c110 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20  figuration.";.. 
1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c140 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1c150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1c160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1c1c0 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
1c1d0 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
1c1e0 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
1c1f0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1c200 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  c static bool Pr
1c210 6f 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20  ocess(..        
1c220 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
1c230 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20   args,..        
1c240 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
1c250 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
1c260 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1c270 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63        bool stric
1c280 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c290 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1c2a0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
1c2b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1c2c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c2d0 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 63 6f 6e 66 69 67 75 72      if (configur
1c310 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ation == null)..
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c350 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20  rror = "Invalid 
1c360 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
1c370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c380 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1c390 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1c3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c3c0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
1c3d0 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67  ssembly = config
1c3e0 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79  uration.assembly
1c3f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c400 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
1c410 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  embly == null)..
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c450 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20  rror = "Invalid 
1c460 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20  assembly.";..   
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c480 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1c490 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c4a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
1c4d0 69 6f 6e 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20  ion.noTrace)..  
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c510 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
1c520 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20  noLog &&..      
1c530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c540 20 20 20 20 20 20 53 74 72 69 6e 67 2e 49 73 4e        String.IsN
1c550 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69  ullOrEmpty(confi
1c560 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1c570 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c5b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c5d0 2f 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  / NOTE: Use the 
1c5e0 64 65 66 61 75 6c 74 20 6c 6f 67 20 66 69 6c 65  default log file
1c5f0 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20   name...        
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1c640 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  n.logFileName = 
1c650 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d  GetLogFileName(.
1c660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 22 74 72 61 63 65 22 29 3b 0d 0a 20 20 20 20   "trace");..    
1c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1c6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c6f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1c700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c710 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
1c720 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65  ration.noConsole
1c730 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c740 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 2f 2f 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 2f 2f 20 4e 4f 54            // NOT
1c790 45 3a 20 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f  E: In verbose mo
1c7a0 64 65 2c 20 64 65 62 75 67 20 6f 75 74 70 75 74  de, debug output
1c7b0 20 28 74 68 61 74 20 6d 65 65 74 73 0d 0a 20 20   (that meets..  
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1c7e0 20 20 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65     the configure
1c7f0 64 20 70 72 69 6f 72 69 74 79 20 63 72 69 74 65  d priority crite
1c800 72 69 61 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20  ria) will be..  
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1c830 20 20 20 64 69 73 70 6c 61 79 65 64 20 74 6f 20     displayed to 
1c840 74 68 65 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68  the console; oth
1c850 65 72 77 69 73 65 2c 20 74 72 61 63 65 0d 0a 20  erwise, trace.. 
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1c880 20 20 20 20 6f 75 74 70 75 74 20 28 74 68 61 74      output (that
1c890 20 6d 65 65 74 73 20 74 68 65 20 63 6f 6e 66 69   meets the confi
1c8a0 67 75 72 65 64 20 70 72 69 6f 72 69 74 79 0d 0a  gured priority..
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1c8d0 20 20 20 20 20 63 72 69 74 65 72 69 61 29 20 77       criteria) w
1c8e0 69 6c 6c 20 62 65 20 64 69 73 70 6c 61 79 65 64  ill be displayed
1c8f0 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e   to the console.
1c900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c940 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
1c950 64 65 62 75 67 29 0d 0a 20 20 20 20 20 20 20 20  debug)..        
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 20 2f 2f 0d 0a 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 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1c9c0 54 45 3a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  TE: Add the cons
1c9d0 6f 6c 65 20 74 72 61 63 65 20 6c 69 73 74 65 6e  ole trace listen
1c9e0 65 72 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  er to the..     
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ca10 20 20 20 20 6c 69 73 74 20 6f 66 20 74 72 61 63      list of trac
1ca20 65 20 6c 69 73 74 65 6e 65 72 73 20 6d 61 69 6e  e listeners main
1ca30 74 61 69 6e 65 64 20 62 79 0d 0a 20 20 20 20 20  tained by..     
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1ca60 20 20 20 20 74 68 65 20 54 72 61 63 65 4f 70 73      the TraceOps
1ca70 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 6f 6e 6c   class (i.e. onl
1ca80 79 20 6d 65 73 73 61 67 65 73 0d 0a 20 20 20 20  y messages..    
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1cab0 20 20 20 20 20 74 68 61 74 20 6d 65 65 74 20 74       that meet t
1cac0 68 65 20 64 65 62 75 67 20 70 72 69 6f 72 69 74  he debug priorit
1cad0 79 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  y will be..     
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1cb00 20 20 20 20 73 65 65 6e 20 6f 6e 20 74 68 65 20      seen on the 
1cb10 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20  console)...     
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
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 20 20 20 20 20 20 54                 T
1cb60 72 61 63 65 4f 70 73 2e 53 65 74 75 70 44 65 62  raceOps.SetupDeb
1cb70 75 67 4c 69 73 74 65 6e 65 72 73 28 29 3b 0d 0a  ugListeners();..
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbb0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1cbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64      // NOTE: Add
1cc30 20 74 68 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61   the console tra
1cc40 63 65 20 6c 69 73 74 65 6e 65 72 20 74 6f 20 74  ce listener to t
1cc50 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6c 69 73      //       lis
1cc80 74 20 6f 66 20 62 75 69 6c 74 2d 69 6e 20 74 72  t of built-in tr
1cc90 61 63 65 20 6c 69 73 74 65 6e 65 72 73 20 28 69  ace listeners (i
1cca0 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .e...           
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 6e       //       on
1ccd0 6c 79 20 6d 65 73 73 61 67 65 73 20 74 68 61 74  ly messages that
1cce0 20 6d 65 65 74 20 74 68 65 20 74 72 61 63 65 0d   meet the trace.
1ccf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd10 20 2f 2f 20 20 20 20 20 20 20 70 72 69 6f 72 69   //       priori
1cd20 74 79 20 77 69 6c 6c 20 62 65 20 73 65 65 6e 20  ty will be seen 
1cd30 6f 6e 20 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e  on the console).
1cd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74        Trace.List
1cd90 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f  eners.Add(new Co
1cda0 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e  nsoleTraceListen
1cdb0 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  er());..        
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1cdf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1ce10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ce60 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
1ce70 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20  n.noLog &&..    
1ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce90 20 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e          !String.
1cea0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
1ceb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
1cec0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cee0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72    Trace.Listener
1cf10 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72  s.Add(new TextWr
1cf20 69 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65  iterTraceListene
1cf30 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1cf60 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b  n.logFileName));
1cf70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfb0 2f 2f 20 4e 4f 54 45 3a 20 54 65 63 68 6e 69 63  // NOTE: Technic
1cfc0 61 6c 6c 79 2c 20 77 65 20 63 72 65 61 74 65 64  ally, we created
1cfd0 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a   the log file...
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1d020 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20  sCreated++;..   
1d030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d040 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d050 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d070 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d090 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65 20 63  NOTE: Dump the c
1d0a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77  onfiguration now
1d0b0 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65 65 64   in case we need
1d0c0 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
1d0d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1d0e0 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61    troubleshoot a
1d0f0 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20 20 20  ny issues...    
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d120 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
1d130 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50  iguration.debugP
1d140 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65  riority <= Trace
1d150 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29  Priority.Medium)
1d160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d170 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1d180 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62  uration.Dump(deb
1d190 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ugCallback);....
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
1d1c0 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
1d1d0 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69 6f  ity <= TracePrio
1d1e0 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20  rity.Medium)..  
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d200 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1d210 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63 65 43 61  ion.Dump(traceCa
1d220 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20  llback);....    
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d250 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1d260 20 53 68 6f 77 20 77 68 65 72 65 20 77 65 20 61   Show where we a
1d270 72 65 20 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20  re running from 
1d280 61 6e 64 20 68 6f 77 20 77 65 20 77 65 72 65 0d  and how we were.
1d290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d2a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e       //       in
1d2b0 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  voked...        
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2e0 20 20 20 20 73 74 72 69 6e 67 20 6c 6f 63 61 74      string locat
1d2f0 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c  ion = assembly.L
1d300 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20  ocation;....    
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
1d330 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
1d340 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d  rity.MediumLow,.
1d350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d360 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1d370 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1d380 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1d390 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d3b0 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62  Running executab
1d3c0 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72  le is: {0}", For
1d3d0 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e  Display(location
1d3e0 29 29 2c 0d 0a 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 74 72 61               tra
1d400 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1d430 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1d440 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c  Priority.MediumL
1d450 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1d470 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1d480 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1d490 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d     "Original com
1d4c0 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30  mand line is: {0
1d4d0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76               Env
1d4f0 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64  ironment.Command
1d500 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65  Line), traceCate
1d510 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1d530 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1d540 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1d550 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20  ty.MediumLow,.. 
1d560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d570 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1d580 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1d590 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1d5a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75               "Ru
1d5c0 6e 6e 69 6e 67 20 70 72 6f 63 65 73 73 20 69 73  nning process is
1d5d0 20 7b 30 7d 2e 22 2c 20 49 73 36 34 42 69 74 50   {0}.", Is64BitP
1d5e0 72 6f 63 65 73 73 28 29 20 3f 0d 0a 20 20 20 20  rocess() ?..    
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 20 20 20 20 20 20 20 22 36 34 2d 62 69 74 22          "64-bit"
1d610 20 3a 20 22 33 32 2d 62 69 74 22 29 2c 20 74 72   : "32-bit"), tr
1d620 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1d630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d640 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
1d650 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d  uration.whatIf).
1d660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d670 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d690 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1d6b0 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65 62 75  OTE: If the debu
1d6c0 67 67 65 72 20 69 73 20 61 74 74 61 63 68 65 64  gger is attached
1d6d0 20 61 6e 64 20 22 77 68 61 74 2d 69 66 22 0d 0a   and "what-if"..
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1d700 20 6d 6f 64 65 20 69 73 20 5b 6e 6f 77 5d 20 64   mode is [now] d
1d710 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
1d720 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d740 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d760 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
1d770 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1d7a0 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1d7b0 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1d7c0 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
1d7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7e0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
1d7f0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
1d800 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
1d830 20 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d   disable \"what-
1d840 69 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22  if\" mode with "
1d850 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 20 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74      "debugger at
1d880 74 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43  tached.", traceC
1d890 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1d8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d8c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d8f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d900 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1d910 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1d920 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20  MediumHigh,..   
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
1d950 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
1d960 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d980 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63      "No actual c
1d990 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d  hanges will be m
1d9a0 61 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d  ade to this " +.
1d9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79               "sy
1d9d0 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77  stem because \"w
1d9e0 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73  hat-if\" mode is
1d9f0 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20   enabled.",..   
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1da20 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1da40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1da50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1da70 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63  / NOTE: If the c
1da80 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20  ommand line has 
1da90 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c  not been manuall
1daa0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
1dab0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1dac0 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20  confirmed (i.e. 
1dad0 76 69 61 20 74 68 65 20 65 78 70 6c 69 63 69 74  via the explicit
1dae0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20   command line.. 
1daf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db00 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69     //       opti
1db10 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70  on), then stop p
1db20 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20  rocessing now.  
1db30 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20  We enforce..    
1db40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db50 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 72 75  //       this ru
1db60 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c  le so that simpl
1db70 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e  y double-clickin
1db80 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  g the..         
1db90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1dba0 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 20 77      executable w
1dbb0 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69  ill not result i
1dbc0 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65  n any changes be
1dbd0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ing..           
1dbe0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1dbf0 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79    made to the sy
1dc00 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20  stem...         
1dc10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc30 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
1dc40 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a  ation.confirm)..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1dc80 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63  rror = "Cannot c
1dc90 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63  ontinue, the \"c
1dca0 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20  onfirm\" option 
1dcb0 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcd0 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64      "not enabled
1dce0 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  .";....         
1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1dd00 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1dd30 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1dd40 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1dd50 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1dd70 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d  h (Exception e).
1dd80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1dda0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1ddb0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1ddc0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
1ddd0 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  hest,..         
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1ddf0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1de00 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20  aceCallback, e, 
1de10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1de20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1de30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1de40 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73  Failed to proces
1de50 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  s configuration.
1de60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1de70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1de80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1de90 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1dea0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1deb0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ded0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1def0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1df00 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
1df10 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
1df20 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
1df30 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
1df40 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f  public static bo
1df50 6f 6c 20 43 68 65 63 6b 52 75 6e 74 69 6d 65 56  ol CheckRuntimeV
1df60 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
1df70 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
1df80 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
1df90 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
1dfa0 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72 69         bool stri
1dfb0 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct,..           
1dfc0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1dfd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1dfe0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1dff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e000 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
1e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e030 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1e040 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ration == null).
1e050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e060 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1e070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e080 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64  error = "Invalid
1e090 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
1e0a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e0b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e0c0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e0e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e0f0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e110 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72  / NOTE: What ver
1e120 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74  sion of the runt
1e130 69 6d 65 20 77 61 73 20 74 68 65 20 63 6f 72 65  ime was the core
1e140 20 28 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20   (primary)..    
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e160 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c  //       assembl
1e170 79 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e  y compiled again
1e180 73 74 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35  st (e.g. "v2.0.5
1e190 30 37 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20  0727" or..      
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e1b0 20 20 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33         "v4.0.303
1e1c0 31 39 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20  19")...         
1e1d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1e1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1f0 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d     string coreIm
1e200 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1e210 6e 20 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74  n = GetImageRunt
1e220 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
1e230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e240 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1e250 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.coreFileName)
1e260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e270 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 20 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c   // NOTE: We all
1e2a0 6f 77 20 74 68 65 20 61 63 74 75 61 6c 20 69 6d  ow the actual im
1e2b0 61 67 65 20 72 75 6e 74 69 6d 65 20 63 68 65 63  age runtime chec
1e2c0 6b 69 6e 67 20 74 6f 20 62 65 0d 0a 20 20 20 20  king to be..    
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 2f 2f 20 20 20 20 20 20 20 62 79 70 61 73 73 65  //       bypasse
1e2f0 64 20 76 69 61 20 74 68 65 20 22 2d 6e 6f 52 75  d via the "-noRu
1e300 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f  ntimeVersion" co
1e310 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e330 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
1e340 20 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69    The command li
1e350 6e 65 20 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74  ne option is int
1e360 65 6e 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20  ended for..     
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e380 2f 20 20 20 20 20 20 20 65 78 70 65 72 74 20 75  /       expert u
1e390 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20  se only...      
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e3c0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
1e3d0 75 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d  uration.noRuntim
1e3e0 65 56 65 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20  eVersion)..     
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1e400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e410 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1e420 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1e430 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1e440 65 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20  edium,..        
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e460 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1e470 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1e480 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1e490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
1e4b0 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69  ssembly is compi
1e4c0 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  led for the .NET
1e4d0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20   Framework {0}; 
1e4e0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 20 22 68 6f 77 65 76 65 72 2c 20 69 6e 73 74 61   "however, insta
1e510 6c 6c 61 74 69 6f 6e 20 72 65 73 74 72 69 63 74  llation restrict
1e520 69 6f 6e 73 20 62 61 73 65 64 20 6f 6e 20 74 68  ions based on th
1e530 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  is " +..        
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 20 22 66 61 63 74 20 68 61 76 65 20 62      "fact have b
1e560 65 65 6e 20 64 69 73 61 62 6c 65 64 20 76 69 61  een disabled via
1e570 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1e580 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e.",..          
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5a0 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69    coreImageRunti
1e5b0 6d 65 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63  meVersion), trac
1e5c0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1e5f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e600 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e620 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1e630 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44            // TOD
1e640 4f 3a 20 52 65 73 74 72 69 63 74 20 74 68 65 20  O: Restrict the 
1e650 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61  configuration ba
1e660 73 65 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61  sed on which ima
1e670 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ge..            
1e680 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e690 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
1e6a0 73 20 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72  s (which more-or
1e6b0 2d 6c 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64  -less correspond
1e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e6d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1e6e0 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  o .NET Framework
1e6f0 20 76 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73   versions) are s
1e700 75 70 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d  upported by the.
1e710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e720 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65       //       ve
1e730 72 73 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c  rsions of Visual
1e740 20 53 74 75 64 69 6f 20 74 68 61 74 20 61 72 65   Studio that are
1e750 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20   installed...   
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e770 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1e780 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
1e790 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
1e7a0 79 28 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69  y(coreImageRunti
1e7b0 6d 65 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20  meVersion))..   
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1e7f0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72  r = "invalid cor
1e800 65 20 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e  e file image run
1e810 74 69 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  time version";..
1e820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e830 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1e840 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1e850 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1e860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e870 20 20 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e    else if (Strin
1e880 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20  g.Equals(..     
1e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8a0 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65         coreImage
1e8b0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
1e8c0 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1e8d0 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  eVersion,..     
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8f0 20 20 20 20 20 20 20 53 74 72 69 6e 67 43 6f 6d         StringCom
1e900 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29  parison.Ordinal)
1e910 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1e950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1e960 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 43   NOTE: For the C
1e970 4c 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c  LR v2.0 runtime,
1e980 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64 69   make sure we di
1e990 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  sable..         
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e9b0 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74 65  /       any atte
1e9c0 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66 6f  mpt to use it fo
1e9d0 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72 65  r things that re
1e9e0 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20  quire..         
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea00 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65 6d  /       an assem
1ea10 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72  bly compiled for
1ea20 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20   the CLR v4.0.  
1ea30 49 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  It is..         
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ea50 2f 20 20 20 20 20 20 20 75 6e 63 65 72 74 61 69  /       uncertai
1ea60 6e 20 69 66 20 74 68 69 73 20 69 73 20 61 63 74  n if this is act
1ea70 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20  ually a problem 
1ea80 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
1ea90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1eaa0 20 20 20 20 20 70 72 61 63 74 69 63 65 20 61 73       practice as
1eab0 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63 61   the CLR v4.0 ca
1eac0 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20 61  n load and use a
1ead0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
1eae0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1eaf0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d      assembly com
1eb00 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20 43  piled with the C
1eb10 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65 72  LR v2.0; however
1eb20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1eb30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1eb40 20 20 20 20 73 69 6e 63 65 20 74 68 69 73 20 70      since this p
1eb50 72 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62 6f  roject offers bo
1eb60 74 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  th configuration
1eb70 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1eb90 20 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c       we currentl
1eba0 79 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73 20  y disallow this 
1ebb0 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20  mismatch...     
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1ebf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
1ec00 65 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx40 = true;..
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1ec30 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20  ation.noNetFx45 
1ec40 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
1ec70 6f 4e 65 74 46 78 34 35 31 20 3d 20 74 72 75 65  oNetFx451 = true
1ec80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1ec90 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1eca0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1ecb0 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
1ecc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecd0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1ece0 2e 6e 6f 56 73 32 30 31 32 20 3d 20 74 72 75 65  .noVs2012 = true
1ecf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1ed00 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
1ed10 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
1ed20 33 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20  3 = true;....   
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1ed50 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1ed60 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
1ed70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1ed90 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1eda0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1edb0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edd0 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
1ede0 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66  ly is compiled f
1edf0 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
1ee00 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a  ework {0}, " +..
1ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 22 73 75 70              "sup
1ee30 70 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45  port for the .NE
1ee40 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20  T Framework {1} 
1ee50 69 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e  is now disabled.
1ee60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee80 43 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv2ImageRuntim
1ee90 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49  eVersion, CLRv4I
1eea0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1eeb0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eed0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1eee0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1eef0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1ef10 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45 71  se if (String.Eq
1ef20 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20 20  uals(..         
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef40 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74     coreImageRunt
1ef50 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76  imeVersion, CLRv
1ef60 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
1ef70 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1ef80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef90 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69     StringCompari
1efa0 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20  son.Ordinal)).. 
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1efe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eff0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1f000 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76  E: For the CLR v
1f010 34 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b  4.0 runtime, mak
1f020 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c  e sure we disabl
1f030 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1f040 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f050 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20      any attempt 
1f060 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68  to use it for th
1f070 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72  ings that requir
1f080 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1f090 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1f0a0 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20      an assembly 
1f0b0 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
1f0c0 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...    
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f100 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1f110 4e 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d  NetFx20 = true;.
1f120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f130 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
1f140 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35  ration.noNetFx35
1f150 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1f180 6e 6f 56 73 32 30 30 35 20 3d 20 74 72 75 65 3b  noVs2005 = true;
1f190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f1a0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
1f1b0 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38  uration.noVs2008
1f1c0 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20   = true;....    
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1f1f0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1f200 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
1f210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1f230 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
1f240 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1f250 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c          "Assembl
1f280 79 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f  y is compiled fo
1f290 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
1f2a0 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20  work {0}, " +.. 
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 20 20 20 22 73 75 70 70             "supp
1f2d0 6f 72 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54  ort for the .NET
1f2e0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69   Framework {1} i
1f2f0 73 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22  s now disabled."
1f300 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1f320 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34 49  orDisplay(CLRv4I
1f330 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1f340 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f360 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
1f370 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1f380 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1f3b0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
1f3c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3e0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f410 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
1f420 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f440 20 20 20 20 20 20 20 20 20 20 20 22 75 6e 73 75             "unsu
1f450 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66 69 6c  pported core fil
1f460 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  e image runtime 
1f470 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20  version " +..   
1f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f490 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d           "{0}, m
1f4a0 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32  ust be {1} or {2
1f4b0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1f4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4d0 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65   ForDisplay(core
1f4e0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1f4f0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
1f500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f510 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
1f520 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv2ImageRuntimeV
1f530 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1f540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f550 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1f560 28 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69  (CLRv4ImageRunti
1f570 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a  meVersion));....
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f590 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1f5a0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1f5b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1f5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1f600 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1f610 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
1f620 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f640 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1f650 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1f660 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f680 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1f690 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1f6a0 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
1f6b0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
1f6e0 74 6f 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72  to check image r
1f6f0 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22  untime version."
1f700 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1f710 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f720 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1f730 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1f740 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1f750 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
1f760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1f770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1f7b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1f7c0 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d  region Private M
1f7d0 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
1f7e0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
1f7f0 6e 67 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e  ng GetInvariantN
1f800 61 6d 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ame()..         
1f810 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f820 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 73 65        return Use
1f830 45 66 36 50 72 6f 76 69 64 65 72 28 29 20 3f 20  Ef6Provider() ? 
1f840 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  Ef6InvariantName
1f850 20 3a 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65   : InvariantName
1f860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1f870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
1f880 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1f890 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1f8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f8e0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1f8f0 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64  on Public Method
1f900 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
1f910 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c  ublic bool HasFl
1f920 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ags(..          
1f930 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
1f940 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20  gs hasFlags,..  
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
1f960 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  ol all..        
1f970 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1f980 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f990 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c            if (al
1f9a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f9b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
1f9c0 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20  (installFlags & 
1f9d0 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
1f9e0 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
1f9f0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74     return ((inst
1fa20 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c  allFlags & hasFl
1fa30 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46  ags) != InstallF
1fa40 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20  lags.None);..   
1fa50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1fa60 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1fa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1fab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1fac0 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67  lic bool HasFlag
1fad0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1fae0 20 20 20 20 50 72 6f 76 69 64 65 72 46 6c 61 67      ProviderFlag
1faf0 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20  s hasFlags,..   
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
1fb10 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  l all..         
1fb20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1fb30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fb40 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c           if (all
1fb50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1fb60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
1fb70 70 72 6f 76 69 64 65 72 46 6c 61 67 73 20 26 20  providerFlags & 
1fb80 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73  hasFlags) == has
1fb90 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20  Flags);..       
1fba0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fbc0 20 20 20 72 65 74 75 72 6e 20 28 28 70 72 6f 76     return ((prov
1fbd0 69 64 65 72 46 6c 61 67 73 20 26 20 68 61 73 46  iderFlags & hasF
1fbe0 6c 61 67 73 29 20 21 3d 20 50 72 6f 76 69 64 65  lags) != Provide
1fbf0 72 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20  rFlags.None);.. 
1fc00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1fc10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fc60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
1fc70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 73 4c 69 6e  ublic bool IsLin
1fc80 71 53 75 70 70 6f 72 74 65 64 28 29 0d 0a 20 20  qSupported()..  
1fc90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1fcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fcc0 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20   // NOTE: Check 
1fcd0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 61  to see if the ca
1fce0 6c 6c 65 72 20 68 61 73 20 66 6f 72 63 65 64 20  ller has forced 
1fcf0 4c 49 4e 51 20 73 75 70 70 6f 72 74 20 74 6f 0d  LINQ support to.
1fd00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd10 20 2f 2f 20 20 20 20 20 20 20 62 65 20 65 6e 61   //       be ena
1fd20 62 6c 65 64 20 2d 4f 52 2d 20 64 69 73 61 62 6c  bled -OR- disabl
1fd30 65 64 2c 20 74 68 65 72 65 62 79 20 62 79 70 61  ed, thereby bypa
1fd40 73 73 69 6e 67 20 74 68 65 20 6e 65 65 64 0d 0a  ssing the need..
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd60 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 22 61 75  //       for "au
1fd70 74 6f 6d 61 74 69 63 20 64 65 74 65 63 74 69 6f  tomatic detectio
1fd80 6e 22 20 62 79 20 74 68 69 73 20 6d 65 74 68 6f  n" by this metho
1fd90 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
1fda0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1fdb0 20 20 20 20 20 20 20 20 69 66 20 28 48 61 73 46          if (HasF
1fdc0 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c 61  lags(ProviderFla
1fdd0 67 73 2e 46 6f 72 63 65 4c 69 6e 71 45 6e 61 62  gs.ForceLinqEnab
1fde0 6c 65 64 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  led, true))..   
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe10 20 20 20 20 69 66 20 28 21 48 61 73 46 6c 61 67      if (!HasFlag
1fe20 73 28 50 72 6f 76 69 64 65 72 46 6c 61 67 73 2e  s(ProviderFlags.
1fe30 44 69 64 4c 69 6e 71 46 6f 72 63 65 54 72 61 63  DidLinqForceTrac
1fe40 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  e, true))..     
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1fe60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fe70 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1fe80 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
1fe90 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d  (TracePriority.M
1fea0 65 64 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20  ediumHigh,..    
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fec0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1fed0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1fee0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 65 6e     "Forced to en
1ff10 61 62 6c 65 20 73 75 70 70 6f 72 74 20 66 6f 72  able support for
1ff20 20 5c 22 4c 69 6e 71 5c 22 2e 22 2c 0d 0a 20 20   \"Linq\".",..  
1ff30 20 20 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 74 72 61 63 65 43            traceC
1ff50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff70 20 20 20 20 20 70 72 6f 76 69 64 65 72 46 6c 61       providerFla
1ff80 67 73 20 7c 3d 20 50 72 6f 76 69 64 65 72 46 6c  gs |= ProviderFl
1ff90 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65  ags.DidLinqForce
1ffa0 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20  Trace;..        
1ffb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ffc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffd0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1ffe0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1fff0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20000 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 48        else if (H
20010 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72  asFlags(Provider
20020 46 6c 61 67 73 2e 46 6f 72 63 65 4c 69 6e 71 44  Flags.ForceLinqD
20030 69 73 61 62 6c 65 64 2c 20 74 72 75 65 29 29 0d  isabled, true)).
20040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20060 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 73          if (!Has
20070 46 6c 61 67 73 28 50 72 6f 76 69 64 65 72 46 6c  Flags(ProviderFl
20080 61 67 73 2e 44 69 64 4c 69 6e 71 46 6f 72 63 65  ags.DidLinqForce
20090 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d 0a 20  Trace, true)).. 
200a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
200c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
200d0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
200e0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
200f0 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c 0d 0a  ty.MediumHigh,..
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20110 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
20120 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
20130 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74         "Forced t
20160 6f 20 64 69 73 61 62 6c 65 20 73 75 70 70 6f 72  o disable suppor
20170 74 20 66 6f 72 20 5c 22 4c 69 6e 71 5c 22 2e 22  t for \"Linq\"."
20180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
201a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
201b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
201c0 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64            provid
201d0 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69  erFlags |= Provi
201e0 64 65 72 46 6c 61 67 73 2e 44 69 64 4c 69 6e 71  derFlags.DidLinq
201f0 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20  ForceTrace;..   
20200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20210 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20220 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20230 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
20240 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20270 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
20280 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  n non-zero if th
20290 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
202a0 4c 69 74 65 2e 4c 69 6e 71 0d 0a 20 20 20 20 20  Lite.Linq..     
202b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
202c0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f      assembly sho
202d0 75 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65 64  uld be processed
202e0 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74   during the inst
202f0 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  all...          
20300 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
20310 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73 20  f the target is 
20320 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
20330 30 35 2c 20 74 68 69 73 20 6d 75 73 74 0d 0a 20  05, this must.. 
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20350 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 7a  /       return z
20360 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ero...          
20370 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20380 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20390 20 21 6e 6f 4e 65 74 46 78 33 35 20 7c 7c 20 21   !noNetFx35 || !
203a0 6e 6f 4e 65 74 46 78 34 30 20 7c 7c 20 21 6e 6f  noNetFx40 || !no
203b0 4e 65 74 46 78 34 35 20 7c 7c 20 21 6e 6f 4e 65  NetFx45 || !noNe
203c0 74 46 78 34 35 31 3b 0d 0a 20 20 20 20 20 20 20  tFx451;..       
203d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
203e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
203f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20420 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20430 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
20440 62 6f 6f 6c 20 49 73 45 66 36 53 75 70 70 6f 72  bool IsEf6Suppor
20450 74 65 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ted()..         
20460 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20470 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20480 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
20490 45 3a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  E: Check to see 
204a0 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61  if the caller ha
204b0 73 20 66 6f 72 63 65 64 20 45 46 36 20 73 75 70  s forced EF6 sup
204c0 70 6f 72 74 20 74 6f 0d 0a 20 20 20 20 20 20 20  port to..       
204d0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
204e0 20 20 62 65 20 65 6e 61 62 6c 65 64 20 2d 4f 52    be enabled -OR
204f0 2d 20 64 69 73 61 62 6c 65 64 2c 20 74 68 65 72  - disabled, ther
20500 65 62 79 20 62 79 70 61 73 73 69 6e 67 20 74 68  eby bypassing th
20510 65 20 6e 65 65 64 0d 0a 20 20 20 20 20 20 20 20  e need..        
20520 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20530 20 66 6f 72 20 22 61 75 74 6f 6d 61 74 69 63 20   for "automatic 
20540 64 65 74 65 63 74 69 6f 6e 22 20 62 79 20 74 68  detection" by th
20550 69 73 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  is method...    
20560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20580 69 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f  if (HasFlags(Pro
20590 76 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65  viderFlags.Force
205a0 45 66 36 45 6e 61 62 6c 65 64 2c 20 74 72 75 65  Ef6Enabled, true
205b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
205c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
205d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
205e0 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
205f0 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72  rFlags.DidEf6For
20600 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d  ceTrace, true)).
20610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20620 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20640 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
20650 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
20660 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
20670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
20690 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
206a0 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206c0 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64           "Forced
206d0 20 74 6f 20 65 6e 61 62 6c 65 20 73 75 70 70 6f   to enable suppo
206e0 72 74 20 66 6f 72 20 5c 22 45 66 36 5c 22 2e 22  rt for \"Ef6\"."
206f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20710 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
20720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20730 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64            provid
20740 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69  erFlags |= Provi
20750 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46  derFlags.DidEf6F
20760 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20 20  orceTrace;..    
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20780 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20790 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
207a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
207b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
207c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
207d0 66 20 28 48 61 73 46 6c 61 67 73 28 50 72 6f 76  f (HasFlags(Prov
207e0 69 64 65 72 46 6c 61 67 73 2e 46 6f 72 63 65 45  iderFlags.ForceE
207f0 66 36 44 69 73 61 62 6c 65 64 2c 20 74 72 75 65  f6Disabled, true
20800 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20810 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20820 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
20830 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
20840 72 46 6c 61 67 73 2e 44 69 64 45 66 36 46 6f 72  rFlags.DidEf6For
20850 63 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 0d  ceTrace, true)).
20860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20870 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
208a0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
208b0 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67 68 2c  rity.MediumHigh,
208c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
208e0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
208f0 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
20900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20910 20 20 20 20 20 20 20 20 20 22 46 6f 72 63 65 64           "Forced
20920 20 74 6f 20 64 69 73 61 62 6c 65 20 73 75 70 70   to disable supp
20930 6f 72 74 20 66 6f 72 20 5c 22 45 66 36 5c 22 2e  ort for \"Ef6\".
20940 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20960 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20980 20 20 20 20 20 20 20 20 20 20 20 70 72 6f 76 69             provi
20990 64 65 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76  derFlags |= Prov
209a0 69 64 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36  iderFlags.DidEf6
209b0 46 6f 72 63 65 54 72 61 63 65 3b 0d 0a 20 20 20  ForceTrace;..   
209c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
209e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
209f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
20a00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
20a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a30 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
20a40 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  n non-zero if th
20a50 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
20a60 4c 69 74 65 2e 45 46 36 0d 0a 20 20 20 20 20 20  Lite.EF6..      
20a70 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
20a80 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68 6f 75     assembly shou
20a90 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65 64 20  ld be processed 
20aa0 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73 74 61  during the insta
20ab0 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll...           
20ac0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49 66       //       If
20ad0 20 74 68 65 20 74 61 72 67 65 74 20 69 73 20 56   the target is V
20ae0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
20af0 35 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20 20 20  5 or Visual..   
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
20b10 20 20 20 20 20 20 53 74 75 64 69 6f 20 32 30 30        Studio 200
20b20 38 2c 20 74 68 69 73 20 6d 75 73 74 20 72 65 74  8, this must ret
20b30 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  urn zero...     
20b40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20b60 66 20 28 6e 6f 4e 65 74 46 78 34 30 20 26 26 20  f (noNetFx40 && 
20b70 6e 6f 4e 65 74 46 78 34 35 20 26 26 20 6e 6f 4e  noNetFx45 && noN
20b80 65 74 46 78 34 35 31 29 0d 0a 20 20 20 20 20 20  etFx451)..      
20b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
20ba0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20bc0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
20bd0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 73 6f     // NOTE: Also
20be0 2c 20 69 66 20 74 68 65 20 45 46 36 20 63 6f 72  , if the EF6 cor
20bf0 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 75 6e  e assembly is un
20c00 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 69 73 0d  available, this.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c20 20 2f 2f 20 20 20 20 20 20 20 6d 75 73 74 20 72   //       must r
20c30 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20  eturn zero...   
20c40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20c60 20 69 66 20 28 21 49 73 53 79 73 74 65 6d 45 66   if (!IsSystemEf
20c70 36 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62  6AssemblyAvailab
20c80 6c 65 28 21 48 61 73 46 6c 61 67 73 28 0d 0a 20  le(!HasFlags(.. 
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 20 20 20 50 72 6f 76 69 64 65 72 46         ProviderF
20cb0 6c 61 67 73 2e 44 69 64 45 66 36 52 65 73 6f 6c  lags.DidEf6Resol
20cc0 76 65 54 72 61 63 65 2c 20 74 72 75 65 29 29 29  veTrace, true)))
20cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20ce0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20cf0 20 20 20 20 20 20 20 20 20 70 72 6f 76 69 64 65           provide
20d00 72 46 6c 61 67 73 20 7c 3d 20 50 72 6f 76 69 64  rFlags |= Provid
20d10 65 72 46 6c 61 67 73 2e 44 69 64 45 66 36 52 65  erFlags.DidEf6Re
20d20 73 6f 6c 76 65 54 72 61 63 65 3b 0d 0a 20 20 20  solveTrace;..   
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20d70 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20d80 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
20d90 3a 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  : Finally, if th
20da0 65 20 45 46 36 20 63 6f 72 65 20 61 73 73 65 6d  e EF6 core assem
20db0 62 6c 79 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  bly is not avail
20dc0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..          
20dd0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67        //       g
20de0 6c 6f 62 61 6c 6c 79 20 5b 61 6e 64 20 74 68 69  lobally [and thi
20df0 73 20 69 73 20 61 20 72 65 71 75 69 72 65 6d 65  s is a requireme
20e00 6e 74 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nt for the curre
20e10 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt..            
20e20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 73      //       ins
20e30 74 61 6c 6c 5d 2c 20 72 65 74 75 72 6e 20 7a 65  tall], return ze
20e40 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro...           
20e50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
20e60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20e70 48 61 73 46 6c 61 67 73 28 50 72 6f 76 69 64 65  HasFlags(Provide
20e80 72 46 6c 61 67 73 2e 53 79 73 74 65 6d 45 66 36  rFlags.SystemEf6
20e90 4d 75 73 74 42 65 47 6c 6f 62 61 6c 2c 20 74 72  MustBeGlobal, tr
20ea0 75 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ue) ?..         
20eb0 20 20 20 20 20 20 20 20 20 20 20 49 73 53 79 73             IsSys
20ec0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c  temEf6AssemblyGl
20ed0 6f 62 61 6c 28 29 20 3a 20 74 72 75 65 3b 0d 0a  obal() : true;..
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20f50 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 49 73 45  private bool IsE
20f60 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
20f70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
20f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20f90 20 20 20 69 66 20 28 65 66 36 41 73 73 65 6d 62     if (ef6Assemb
20fa0 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  lyName == null).
20fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20fc0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
20fd0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
20fe0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
20ff0 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62  ssembly = Assemb
21000 6c 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c  ly.ReflectionOnl
21010 79 4c 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20  yLoad(..        
21020 20 20 20 20 20 20 20 20 20 20 20 20 65 66 36 41              ef6A
21030 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 54 6f 53 74  ssemblyName.ToSt
21040 72 69 6e 67 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  ring());....    
21050 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21060 72 6e 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  rn (assembly != 
21070 6e 75 6c 6c 29 20 26 26 20 61 73 73 65 6d 62 6c  null) && assembl
21080 79 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  y.GlobalAssembly
21090 43 61 63 68 65 3b 0d 0a 20 20 20 20 20 20 20 20  Cache;..        
210a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
210b0 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
210f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21100 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
21110 6f 6f 6c 20 55 73 65 45 66 36 50 72 6f 76 69 64  ool UseEf6Provid
21120 65 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  er()..          
21130 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21140 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
21150 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
21160 3a 20 57 65 20 63 61 6e 6e 6f 74 20 75 73 65 20  : We cannot use 
21170 74 68 65 20 45 46 36 20 61 73 73 65 6d 62 6c 79  the EF6 assembly
21180 20 61 73 20 74 68 65 20 70 72 6f 76 69 64 65 72   as the provider
21190 20 69 66 20 69 74 0d 0a 20 20 20 20 20 20 20 20   if it..        
211a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
211b0 20 69 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 65   is not supporte
211c0 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 61 6c  d by this instal
211d0 6c 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  lation...       
211e0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21200 28 21 49 73 45 66 36 53 75 70 70 6f 72 74 65 64  (!IsEf6Supported
21210 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
21220 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21230 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
21240 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21260 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20 45   NOTE: For the E
21270 46 36 20 61 73 73 65 6d 62 6c 79 20 74 6f 20 62  F6 assembly to b
21280 65 20 75 73 61 62 6c 65 20 61 73 20 61 20 70 72  e usable as a pr
21290 6f 76 69 64 65 72 20 69 6e 0d 0a 20 20 20 20 20  ovider in..     
212a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
212b0 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20      the machine 
212c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
212d0 6c 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  le, it must be i
212e0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  n the..         
212f0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
21300 67 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20  global assembly 
21310 63 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20  cache...        
21320 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
21330 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21340 72 6e 20 49 73 45 66 36 41 73 73 65 6d 62 6c 79  rn IsEf6Assembly
21350 47 6c 6f 62 61 6c 28 29 3b 0d 0a 20 20 20 20 20  Global();..     
21360 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21370 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
213c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45             /* RE
213d0 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  QUIRED */..     
213e0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
213f0 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 43 6f  semblyName GetCo
21400 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  reAssemblyName()
21410 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
21420 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21440 28 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d  (coreAssemblyNam
21450 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
21460 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21480 20 20 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e     coreAssemblyN
21490 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
214a0 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
214b0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 72               Cor
214d0 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  eFileName); /* t
214e0 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
214f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21510 74 75 72 6e 20 63 6f 72 65 41 73 73 65 6d 62 6c  turn coreAssembl
21520 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
21530 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21540 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
21550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21580 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21590 20 20 20 20 20 20 20 20 2f 2a 20 4f 50 54 49 4f          /* OPTIO
215a0 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  NAL */..        
215b0 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
215c0 62 6c 79 4e 61 6d 65 20 47 65 74 4c 69 6e 71 41  blyName GetLinqA
215d0 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a  ssemblyName() /*
215e0 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
215f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21600 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49 73            if (Is
21610 4c 69 6e 71 53 75 70 70 6f 72 74 65 64 28 29 20  LinqSupported() 
21620 26 26 20 28 6c 69 6e 71 41 73 73 65 6d 62 6c 79  && (linqAssembly
21630 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  Name == null))..
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21660 20 20 20 20 20 20 20 6c 69 6e 71 41 73 73 65 6d         linqAssem
21670 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
21680 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
21690 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20   LinqFileName); 
216c0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
216d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
216e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
216f0 20 20 72 65 74 75 72 6e 20 6c 69 6e 71 41 73 73    return linqAss
21700 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
21710 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21720 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
21730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a  ////////////....
21770 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
21780 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20  PTIONAL */..    
21790 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
217a0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 45  ssemblyName GetE
217b0 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  f6AssemblyName()
217c0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20   /* throw */..  
217d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
217f0 28 49 73 45 66 36 53 75 70 70 6f 72 74 65 64 28  (IsEf6Supported(
21800 29 20 26 26 20 28 65 66 36 41 73 73 65 6d 62 6c  ) && (ef6Assembl
21810 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d  yName == null)).
21820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21840 20 20 20 20 20 20 20 20 65 66 36 41 73 73 65 6d          ef6Assem
21850 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
21860 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
21870 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 45 66 36 46 69 6c 65 4e 61 6d 65 29 3b 20 2f   Ef6FileName); /
218a0 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
218b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
218c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
218d0 20 72 65 74 75 72 6e 20 65 66 36 41 73 73 65 6d   return ef6Assem
218e0 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  blyName;..      
218f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21900 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
21950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45 51            /* REQ
21960 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20  UIRED */..      
21970 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
21980 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44 65 73  emblyName GetDes
21990 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  ignerAssemblyNam
219a0 65 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e() /* throw */.
219b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 69 66 20 28 64 65 73 69 67 6e 65 72 41 73 73 65  if (designerAsse
219e0 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  mblyName == null
219f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21a00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21a10 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
21a20 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
21a30 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
21a40 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a60 20 20 20 20 20 20 20 20 44 65 73 69 67 6e 65 72          Designer
21a70 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
21a80 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
21a90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21ab0 75 72 6e 20 64 65 73 69 67 6e 65 72 41 73 73 65  urn designerAsse
21ac0 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
21ad0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21ae0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21b30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 45             /* RE
21b40 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20  QUIRED */..     
21b50 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
21b60 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 50 72  semblyName GetPr
21b70 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61  oviderAssemblyNa
21b80 6d 65 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me() /* throw */
21b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21bb0 20 72 65 74 75 72 6e 20 55 73 65 45 66 36 50 72   return UseEf6Pr
21bc0 6f 76 69 64 65 72 28 29 20 3f 0d 0a 20 20 20 20  ovider() ?..    
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21be0 47 65 74 45 66 36 41 73 73 65 6d 62 6c 79 4e 61  GetEf6AssemblyNa
21bf0 6d 65 28 29 20 3a 20 47 65 74 43 6f 72 65 41 73  me() : GetCoreAs
21c00 73 65 6d 62 6c 79 4e 61 6d 65 28 29 3b 0d 0a 20  semblyName();.. 
21c10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21c70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
21c80 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65 74  ublic string Get
21c90 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e  ConfigInvariantN
21ca0 61 6d 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ame()..         
21cb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21cc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
21cd0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29 3b  InvariantName();
21ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21cf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d40 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
21d50 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
21d60 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61 72  GetProviderInvar
21d70 69 61 6e 74 4e 61 6d 65 28 29 0d 0a 20 20 20 20  iantName()..    
21d80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21d90 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21da0 6e 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61  n GetInvariantNa
21db0 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
21dc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21dd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
21e20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
21e30 72 69 6e 67 20 47 65 74 46 61 63 74 6f 72 79 54  ring GetFactoryT
21e40 79 70 65 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20  ypeName()..     
21e50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21e60 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21e70 20 55 73 65 45 66 36 50 72 6f 76 69 64 65 72 28   UseEf6Provider(
21e80 29 20 3f 20 45 66 36 46 61 63 74 6f 72 79 54 79  ) ? Ef6FactoryTy
21e90 70 65 4e 61 6d 65 20 3a 20 46 61 63 74 6f 72 79  peName : Factory
21ea0 54 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  TypeName;..     
21eb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21ec0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21f10 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
21f20 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20  c void Dump(..  
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
21f40 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
21f50 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20  eCallback..     
21f60 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
21f70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21f80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21f90 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
21fa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
21fb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fd0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
21fe0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
21ff0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22010 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
22020 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ly", ForDisplay(
22030 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20  assembly)),..   
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22050 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22060 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22070 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22080 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22090 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
220a0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220c0 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d       "LogFileNam
220d0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  e", ForDisplay(l
220e0 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  ogFileName)),.. 
220f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22100 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22110 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22130 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
22140 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
22150 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f 72         "Director
22180 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
22190 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
221a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
221c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
221d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
221e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
221f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22200 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61       "CoreFileNa
22230 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
22240 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  coreFileName)),.
22250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22260 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22270 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
222a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
222b0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
222c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
222d0 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69           "LinqFi
222e0 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
222f0 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  lay(linqFileName
22300 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
22310 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22320 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
22350 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
22360 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
22370 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 22 45 66               "Ef
22390 36 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  6FileName", ForD
223a0 69 73 70 6c 61 79 28 65 66 36 46 69 6c 65 4e 61  isplay(ef6FileNa
223b0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
223d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
223e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22400 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22410 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22420 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22440 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
22450 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
22460 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
22470 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22480 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22490 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
224c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
224d0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
224e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
224f0 20 20 20 20 20 20 20 20 20 20 20 22 52 65 67 69             "Regi
22500 73 74 72 79 56 65 72 73 69 6f 6e 22 2c 20 46 6f  stryVersion", Fo
22510 72 44 69 73 70 6c 61 79 28 72 65 67 69 73 74 72  rDisplay(registr
22520 79 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  yVersion)),..   
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22550 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22560 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22570 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22580 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22590 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 20 20 22 43 6f 6e 66 69 67 56 65 72 73       "ConfigVers
225c0 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ion", ForDisplay
225d0 28 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 29 29  (configVersion))
225e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
225f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22600 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
22630 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
22640 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
22650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22660 20 20 20 20 20 20 20 20 20 20 20 22 56 73 56 65             "VsVe
22670 72 73 69 6f 6e 53 75 66 66 69 78 22 2c 20 46 6f  rsionSuffix", Fo
22680 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73 69  rDisplay(vsVersi
22690 6f 6e 53 75 66 66 69 78 29 29 2c 0d 0a 20 20 20  onSuffix)),..   
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
226c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
226d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
226e0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
226f0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22700 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 22 44 65 62 75 67 46 6f 72 6d 61       "DebugForma
22730 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  t", ForDisplay(d
22740 65 62 75 67 46 6f 72 6d 61 74 29 29 2c 0d 0a 20  ebugFormat)),.. 
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22760 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
22770 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
22790 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
227a0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
227b0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 20 20 20 20 20 20 22 54 72 61 63 65 46 6f 72         "TraceFor
227e0 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  mat", ForDisplay
227f0 28 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d  (traceFormat)),.
22800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22810 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22820 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22850 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22860 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22880 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
22890 6c 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70  lFlags", ForDisp
228a0 6c 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73  lay(installFlags
228b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
228c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
228d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
22900 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
22910 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
22920 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72               "Pr
22940 6f 76 69 64 65 72 46 6c 61 67 73 22 2c 20 46 6f  oviderFlags", Fo
22950 72 44 69 73 70 6c 61 79 28 70 72 6f 76 69 64 65  rDisplay(provide
22960 72 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20  rFlags)),..     
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
22990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
229a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
229b0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
229c0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
229d0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
229e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229f0 20 20 20 22 44 65 62 75 67 50 72 69 6f 72 69 74     "DebugPriorit
22a00 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
22a10 65 62 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d  ebugPriority)),.
22a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22a30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22a40 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22a70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22a80 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22aa0 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
22ab0 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
22ac0 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
22ad0 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22af0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22b10 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22b20 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22b30 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
22b40 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22b60 50 65 72 55 73 65 72 22 2c 20 46 6f 72 44 69 73  PerUser", ForDis
22b70 70 6c 61 79 28 70 65 72 55 73 65 72 29 29 2c 0d  play(perUser)),.
22b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22b90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22ba0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22bd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22be0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c00 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
22c10 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69  l", ForDisplay(i
22c20 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20  nstall)),..     
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
22c50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22c60 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
22c70 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
22c80 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
22c90 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 22 57 6f 77 36 34 22 2c 20 46 6f 72 44     "Wow64", ForD
22cc0 69 73 70 6c 61 79 28 77 6f 77 36 34 29 29 2c 0d  isplay(wow64)),.
22cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22ce0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
22cf0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
22d20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
22d30 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
22d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d50 20 20 20 20 20 20 20 20 20 22 4e 6f 52 75 6e 74           "NoRunt
22d60 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72  imeVersion", For
22d70 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d  Display(noRuntim
22d80 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  eVersion)),..   
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
22db0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
22dd0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22de0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22df0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22       "NoDesktop"
22e20 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44  , ForDisplay(noD
22e30 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20  esktop)),..     
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
22e60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22e70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
22e80 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
22e90 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
22ea0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20     "NoCompact", 
22ed0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d  ForDisplay(noCom
22ee0 70 61 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  pact)),..       
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
22f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22f20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
22f30 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
22f40 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
22f50 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f   "NoNetFx20", Fo
22f80 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78  rDisplay(noNetFx
22f90 32 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  20)),..         
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
22fb0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
22fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22fd0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
22fe0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
22ff0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
23000 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23020 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46 6f 72 44  NoNetFx35", ForD
23030 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 33 35  isplay(noNetFx35
23040 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23080 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23090 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
230a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
230b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
230d0 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73  NetFx40", ForDis
230e0 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29  play(noNetFx40))
230f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23100 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23110 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
23140 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
23150 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
23160 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23170 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
23180 74 46 78 34 35 22 2c 20 46 6f 72 44 69 73 70 6c  tFx45", ForDispl
23190 61 79 28 6e 6f 4e 65 74 46 78 34 35 29 29 2c 0d  ay(noNetFx45)),.
231a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231b0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
231c0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
231f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23200 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23220 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46           "NoNetF
23230 78 34 35 31 22 2c 20 46 6f 72 44 69 73 70 6c 61  x451", ForDispla
23240 79 28 6e 6f 4e 65 74 46 78 34 35 31 29 29 2c 0d  y(noNetFx451)),.
23250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23260 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23270 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
232a0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
232b0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
232c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
232d0 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
232e0 30 35 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  05", ForDisplay(
232f0 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a 20 20 20  noVs2005)),..   
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
23320 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
23330 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
23340 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23350 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23360 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23380 20 20 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c       "NoVs2008",
23390 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
233a0 32 30 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20  2008)),..       
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233c0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
233d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
233e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
233f0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
23400 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
23410 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 22 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72   "NoVs2010", For
23440 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30  Display(noVs2010
23450 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23470 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
234a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
234b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
234c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
234e0 56 73 32 30 31 32 22 2c 20 46 6f 72 44 69 73 70  Vs2012", ForDisp
234f0 6c 61 79 28 6e 6f 56 73 32 30 31 32 29 29 2c 0d  lay(noVs2012)),.
23500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23510 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23520 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23550 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23560 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23580 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
23590 31 33 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  13", ForDisplay(
235a0 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a 20 20 20  noVs2013)),..   
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
235d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
235e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
235f0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
23600 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
23610 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
23620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23630 20 20 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20       "NoTrace", 
23640 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61  ForDisplay(noTra
23650 63 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ce)),..         
23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
23670 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
23680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23690 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
236a0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
236b0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
236c0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
236e0 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44  NoConsole", ForD
236f0 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65  isplay(noConsole
23700 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23720 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23740 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
23750 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
23760 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
23770 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
23790 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  Log", ForDisplay
237a0 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20  (noLog)),..     
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
237d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
237e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
237f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23800 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23810 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23830 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69 73 73 69     "ThrowOnMissi
23840 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ng", ForDisplay(
23850 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29 29  throwOnMissing))
23860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23870 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23880 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
23890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238a0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
238b0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
238c0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
238d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
238e0 20 20 20 20 20 20 20 20 20 20 20 22 57 68 61 74             "What
238f0 49 66 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  If", ForDisplay(
23900 77 68 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20  whatIf)),..     
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23930 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23940 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23950 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23960 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23970 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23990 20 20 20 22 44 65 62 75 67 22 2c 20 46 6f 72 44     "Debug", ForD
239a0 69 73 70 6c 61 79 28 64 65 62 75 67 29 29 2c 0d  isplay(debug)),.
239b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
239d0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23a00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23a10 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a30 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f 73           "Verbos
23a40 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76  e", ForDisplay(v
23a50 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20  erbose)),..     
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23a80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23a90 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23aa0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
23ab0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
23ac0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ae0 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f     "Confirm", Fo
23af0 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d  rDisplay(confirm
23b00 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23b20 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b40 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
23b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23b90 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d         if (assem
23ba0 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  bly != null)..  
23bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
23be0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
23bf0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
23c00 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d            "Assem
23c30 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20 20 20 20  blyTitle",..    
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
23c60 61 79 28 47 65 74 41 73 73 65 6d 62 6c 79 54 69  ay(GetAssemblyTi
23c70 74 6c 65 28 61 73 73 65 6d 62 6c 79 29 29 29 2c  tle(assembly))),
23c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
23ca0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
23cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23cc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23cd0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
23ce0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
23cf0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 43        "AssemblyC
23d20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 2c 0d 0a  onfiguration",..
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 20 20 20 46 6f 72 44              ForD
23d50 69 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62  isplay(GetAssemb
23d60 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  lyConfiguration(
23d70 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d 0a 20 20  assembly))),..  
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
23da0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23dc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23dd0 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23e10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
23e20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
23e30 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
23e40 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
23e50 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 20 22 49 73 53 79 73 74 65 6d 45 66 36      "IsSystemEf6
23e80 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c  AssemblyAvailabl
23e90 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  e", ForDisplay(.
23ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23eb0 20 20 20 20 20 20 20 20 20 49 73 53 79 73 74 65           IsSyste
23ec0 6d 45 66 36 41 73 73 65 6d 62 6c 79 41 76 61 69  mEf6AssemblyAvai
23ed0 6c 61 62 6c 65 28 66 61 6c 73 65 29 29 29 2c 0d  lable(false))),.
23ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ef0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
23f00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
23f30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
23f40 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
23f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f60 20 20 20 20 20 20 20 20 20 22 49 73 53 79 73 74           "IsSyst
23f70 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f  emEf6AssemblyGlo
23f80 62 61 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  bal", ForDisplay
23f90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23fa0 20 20 20 20 20 20 20 20 20 20 20 49 73 53 79 73             IsSys
23fb0 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 47 6c  temEf6AssemblyGl
23fc0 6f 62 61 6c 28 29 29 29 2c 0d 0a 20 20 20 20 20  obal())),..     
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23ff0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24000 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
24010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24040 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
24060 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
24070 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
24080 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 22 49 73 4c 69 6e 71 53 75 70        "IsLinqSup
240b0 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69 73 70  ported", ForDisp
240c0 6c 61 79 28 49 73 4c 69 6e 71 53 75 70 70 6f 72  lay(IsLinqSuppor
240d0 74 65 64 28 29 29 29 2c 0d 0a 20 20 20 20 20 20  ted())),..      
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240f0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
24100 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24110 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
24120 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
24130 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
24140 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24160 20 20 22 49 73 45 66 36 53 75 70 70 6f 72 74 65    "IsEf6Supporte
24170 64 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 49  d", ForDisplay(I
24180 73 45 66 36 53 75 70 70 6f 72 74 65 64 28 29 29  sEf6Supported())
24190 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
241a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
241b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
241e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
241f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
24200 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
24210 20 20 20 20 20 20 20 20 20 20 20 20 22 49 73 45              "IsE
24220 66 36 41 73 73 65 6d 62 6c 79 47 6c 6f 62 61 6c  f6AssemblyGlobal
24230 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 20 20 20 20 20 20 49 73 45 66 36 41 73 73          IsEf6Ass
24260 65 6d 62 6c 79 47 6c 6f 62 61 6c 28 29 29 29 2c  emblyGlobal())),
24270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24280 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
24290 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
242a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
242c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
242d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
242e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
242f0 20 20 20 20 20 20 20 20 20 20 22 55 73 65 45 66            "UseEf
24300 36 50 72 6f 76 69 64 65 72 22 2c 20 46 6f 72 44  6Provider", ForD
24310 69 73 70 6c 61 79 28 55 73 65 45 66 36 50 72 6f  isplay(UseEf6Pro
24320 76 69 64 65 72 28 29 29 29 2c 0d 0a 20 20 20 20  vider())),..    
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
24350 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
24360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
243a0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
243c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
243d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
24400 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
24410 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
24420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24440 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e  GetCoreAssemblyN
24450 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
24460 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
24480 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61  etCoreAssemblyNa
24490 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43 61 74  me())), traceCat
244a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
244c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244d0 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
244e0 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
24520 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
24530 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
24540 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24560 20 20 20 20 20 22 47 65 74 43 6f 72 65 41 73 73       "GetCoreAss
24570 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
24580 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20  isplay(e)),..   
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
245b0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
245d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
245e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
245f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24620 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24630 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24670 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24680 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24690 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
246a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246b0 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 4c             "GetL
246c0 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22  inqAssemblyName"
246d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246f0 20 20 20 20 20 20 20 20 20 20 20 47 65 74 4c 69             GetLi
24700 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29  nqAssemblyName()
24710 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
24720 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
24730 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24750 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
24760 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
24770 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24790 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
247a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
247b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
247c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 22 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c   "GetLinqAssembl
247f0 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  yName", ForDispl
24800 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  ay(e)),..       
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
24830 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
24840 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
248a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
248b0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
248c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
248d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
248e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
248f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
24900 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
24910 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 20 20 20 20 20 22 47 65 74 45 66 36 41 73         "GetEf6As
24940 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72  semblyName", For
24950 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 20 20 47 65 74 45 66 36 41 73 73 65        GetEf6Asse
24980 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72  mblyName())), tr
24990 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
249c0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch 
249d0 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20  (Exception e).. 
249e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24a10 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
24a20 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
24a30 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 45             "GetE
24a60 66 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  f6AssemblyName",
24a70 20 46 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c   ForDisplay(e)),
24a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24aa0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ac0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
24ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
24b30 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
24b40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
24b70 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
24b80 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
24b90 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bb0 22 47 65 74 44 65 73 69 67 6e 65 72 41 73 73 65  "GetDesignerAsse
24bc0 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69  mblyName", ForDi
24bd0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bf0 20 20 20 20 47 65 74 44 65 73 69 67 6e 65 72 41      GetDesignerA
24c00 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 29 29 2c  ssemblyName())),
24c10 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
24c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24c40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
24c50 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
24c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c90 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
24ca0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
24cb0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
24cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
24ce0 65 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62  etDesignerAssemb
24cf0 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  lyName", ForDisp
24d00 6c 61 79 28 65 29 29 2c 0d 0a 20 20 20 20 20 20  lay(e)),..      
24d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
24d30 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
24d40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d60 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
24d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24db0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
24dc0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
24dd0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
24de0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
24df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e00 22 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d  "GetInvariantNam
24e10 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 47  e", ForDisplay(G
24e20 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28  etInvariantName(
24e30 29 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ))),..          
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
24e50 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
24e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24e70 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
24e80 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
24e90 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
24ea0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
24ec0 65 74 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e  etConfigInvarian
24ed0 74 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  tName", ForDispl
24ee0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
24ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
24f00 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e  ConfigInvariantN
24f10 61 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43 61  ame())), traceCa
24f20 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
24f50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
24f60 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
24f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24f80 20 20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f           "GetPro
24f90 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
24fa0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
24fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24fc0 20 20 20 20 20 20 20 20 20 20 47 65 74 50 72 6f            GetPro
24fd0 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61  viderInvariantNa
24fe0 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43 61 74  me())), traceCat
24ff0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
25010 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
25020 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
25030 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
25040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25050 20 20 20 20 20 20 20 20 22 47 65 74 46 61 63 74          "GetFact
25060 6f 72 79 54 79 70 65 4e 61 6d 65 22 2c 20 46 6f  oryTypeName", Fo
25070 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 20 20 47 65 74 46 61 63 74 6f 72 79 54 79 70     GetFactoryTyp
250a0 65 4e 61 6d 65 28 29 29 29 2c 20 74 72 61 63 65  eName())), trace
250b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
250c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
250e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
250f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25120 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25150 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
25160 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
25170 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
25180 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 20 20 20 20 20 22 47 65 74 50 72 6f 76 69 64        "GetProvid
251b0 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c  erAssemblyName",
251c0 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
251d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251e0 20 20 20 20 20 20 20 20 20 20 47 65 74 50 72 6f            GetPro
251f0 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  viderAssemblyNam
25200 65 28 29 29 29 2c 20 74 72 61 63 65 43 61 74 65  e())), traceCate
25210 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
25220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
25250 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
25260 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
25290 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
252a0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
252b0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252d0 20 20 20 20 22 47 65 74 50 72 6f 76 69 64 65 72      "GetProvider
252e0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46  AssemblyName", F
252f0 6f 72 44 69 73 70 6c 61 79 28 65 29 29 2c 0d 0a  orDisplay(e)),..
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25310 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
25320 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25350 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25360 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25370 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
25380 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
253c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
253d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
253e0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
253f0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
25400 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73        private As
25410 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b  sembly assembly;
25420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
25430 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73  blic Assembly As
25440 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
25450 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25460 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
25470 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d  urn assembly; }.
25480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25490 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20   set { assembly 
254a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
254b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
254c0 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
25510 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
25520 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69  ate string logFi
25530 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
25540 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
25550 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a  ng LogFileName..
25560 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25580 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46  et { return logF
25590 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
255a0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
255b0 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  { logFileName = 
255c0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
255d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
255e0 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25630 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
25640 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  e string directo
25650 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
25660 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
25670 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
25680 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25690 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
256a0 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b  eturn directory;
256b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
256c0 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74      set { direct
256d0 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ory = value; }..
256e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
256f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
25740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25750 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
25760 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
25770 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
25780 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
25790 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
257a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
257b0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
257c0 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20  n coreFileName; 
257d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
257e0 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c     set { coreFil
257f0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
25800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25860 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
25870 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
25880 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
25890 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
258a0 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  ic string LinqFi
258b0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
258c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
258d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
258e0 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  urn linqFileName
258f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25900 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46       set { linqF
25910 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
25920 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25940 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25980 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25990 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
259a0 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 3b 0d  ng ef6FileName;.
259b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
259c0 6c 69 63 20 73 74 72 69 6e 67 20 45 66 36 46 69  lic string Ef6Fi
259d0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
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 65 66 36 46 69 6c 65 4e 61 6d 65 3b  urn ef6FileName;
25a10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25a20 20 20 20 20 73 65 74 20 7b 20 65 66 36 46 69 6c      set { ef6Fil
25a30 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
25a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25a50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
25a60 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
25ab0 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
25ac0 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
25ad0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25ae0 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65  public string De
25af0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a  signerFileName..
25b00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25b20 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69  et { return desi
25b30 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d  gnerFileName; }.
25b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25b50 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65 72 46   set { designerF
25b60 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
25b70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25b80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25b90 20 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25be0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
25bf0 6e 67 20 72 65 67 69 73 74 72 79 56 65 72 73 69  ng registryVersi
25c00 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
25c10 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 52   public string R
25c20 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 0d 0a  egistryVersion..
25c30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25c50 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65 67 69  et { return regi
25c60 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a  stryVersion; }..
25c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c80 73 65 74 20 7b 20 72 65 67 69 73 74 72 79 56 65  set { registryVe
25c90 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d  rsion = value; }
25ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25cb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
25cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
25d10 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
25d20 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 3b 0d   configVersion;.
25d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
25d40 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6e 66 69  lic string Confi
25d50 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  gVersion..      
25d60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25d70 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
25d80 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 65 72 73  eturn configVers
25d90 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ion; }..        
25da0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f          set { co
25db0 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20 76 61  nfigVersion = va
25dc0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25dd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25de0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
25e30 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25e40 73 74 72 69 6e 67 20 76 73 56 65 72 73 69 6f 6e  string vsVersion
25e50 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20 20 20  Suffix;..       
25e60 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
25e70 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 75 66 66  ng VsVersionSuff
25e80 69 78 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ix..            
25e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25ea0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
25eb0 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78 3b  vsVersionSuffix;
25ec0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25ed0 20 20 20 20 73 65 74 20 7b 20 76 73 56 65 72 73      set { vsVers
25ee0 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 61 6c 75  ionSuffix = valu
25ef0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
25f00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
25f10 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
25f50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25f60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
25f70 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74  ring debugFormat
25f80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
25f90 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44 65 62  ublic string Deb
25fa0 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ugFormat..      
25fb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25fc0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
25fd0 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72 6d 61  eturn debugForma
25fe0 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
25ff0 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
26000 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  gFormat = value;
26010 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26020 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26030 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26070 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26080 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
26090 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ng traceFormat;.
260a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
260b0 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65  lic string Trace
260c0 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20  Format..        
260d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
260e0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
260f0 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74 3b  urn traceFormat;
26100 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26110 20 20 20 20 73 65 74 20 7b 20 74 72 61 63 65 46      set { traceF
26120 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d  ormat = value; }
26130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26190 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
261a0 20 20 70 72 69 76 61 74 65 20 49 6e 73 74 61 6c    private Instal
261b0 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c  lFlags installFl
261c0 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
261d0 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c    public Install
261e0 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61  Flags InstallFla
261f0 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  gs..            
26200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26210 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
26220 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d  installFlags; }.
26230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26240 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c   set { installFl
26250 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ags = value; }..
26260 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26270 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
262c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
262d0 70 72 69 76 61 74 65 20 50 72 6f 76 69 64 65 72  private Provider
262e0 46 6c 61 67 73 20 70 72 6f 76 69 64 65 72 46 6c  Flags providerFl
262f0 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ags;..          
26300 20 20 70 75 62 6c 69 63 20 50 72 6f 76 69 64 65    public Provide
26310 72 46 6c 61 67 73 20 50 72 6f 76 69 64 65 72 46  rFlags ProviderF
26320 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
26330 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26340 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
26350 6e 20 70 72 6f 76 69 64 65 72 46 6c 61 67 73 3b  n providerFlags;
26360 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26370 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76 69 64      set { provid
26380 65 72 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b  erFlags = value;
26390 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
263a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
263b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
263c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26400 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61 63      private Trac
26410 65 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50  ePriority debugP
26420 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20  riority;..      
26430 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72 61        public Tra
26440 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
26450 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
26460 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26470 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
26480 65 74 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72  eturn debugPrior
26490 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ity; }..        
264a0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
264b0 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61  bugPriority = va
264c0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
264d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
264e0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
264f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26520 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26530 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
26540 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
26550 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
26560 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
26570 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 54   TracePriority T
26580 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
26590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
265b0 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50   { return traceP
265c0 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20  riority; }..    
265d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
265e0 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  { tracePriority 
265f0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
26600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26610 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26660 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
26670 61 74 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72  ate bool perUser
26680 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
26690 75 62 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73  ublic bool PerUs
266a0 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  er..            
266b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
266c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
266d0 70 65 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20  perUser; }..    
266e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
266f0 7b 20 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75  { perUser = valu
26700 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
26710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26720 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26760 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26770 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
26780 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20  ol install;..   
26790 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
267a0 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20  bool Install..  
267b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
267c0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
267d0 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
267e0 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  l; }..          
267f0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
26800 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  all = value; }..
26810 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26820 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26880 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77  private bool wow
26890 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
268a0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77   public bool Wow
268b0 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  64..            
268c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
268d0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
268e0 77 6f 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20  wow64; }..      
268f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
26900 77 6f 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d  wow64 = value; }
26910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26970 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26980 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
26990 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  oRuntimeVersion;
269a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
269b0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74  blic bool NoRunt
269c0 69 6d 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  imeVersion..    
269d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
269e0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
269f0 20 72 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d   return noRuntim
26a00 65 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20  eVersion; }..   
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
26a20 20 7b 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73   { noRuntimeVers
26a30 69 6f 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ion = value; }..
26a40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
26a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26aa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ab0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
26ac0 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
26ad0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
26ae0 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
26af0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26b00 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
26b10 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
26b20 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
26b30 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
26b40 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
26b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26b60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26bc0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
26bd0 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
26be0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
26bf0 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
26c00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
26c20 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
26c30 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
26c40 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
26c50 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
26c60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26c70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26c80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26cd0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
26ce0 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
26cf0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
26d00 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
26d10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
26d30 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
26d40 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
26d50 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
26d60 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
26d70 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
26d80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26d90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26dd0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26de0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
26df0 6f 6c 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20  ol noNetFx35;.. 
26e00 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
26e10 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35  c bool NoNetFx35
26e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
26e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e40 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
26e50 4e 65 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20  NetFx35; }..    
26e60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
26e70 7b 20 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61  { noNetFx35 = va
26e80 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
26e90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26ea0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ee0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26ef0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
26f00 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  bool noNetFx40;.
26f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
26f20 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
26f30 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..            
26f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26f50 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
26f60 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20  noNetFx40; }..  
26f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
26f80 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20  t { noNetFx40 = 
26f90 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
26fa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26fb0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27000 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27010 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35  e bool noNetFx45
27020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
27030 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74  ublic bool NoNet
27040 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20  Fx45..          
27050 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27060 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27070 6e 20 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a  n noNetFx45; }..
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20  set { noNetFx45 
270a0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
270b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
270c0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
270d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
270f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27110 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
27120 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
27130 34 35 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  451;..          
27140 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
27150 4e 65 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20  NetFx451..      
27160 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27170 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
27180 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31  eturn noNetFx451
27190 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
271a0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
271b0 46 78 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d  Fx451 = value; }
271c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
271d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
271e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
271f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27220 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27230 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
27240 6f 56 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20  oVs2005;..      
27250 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
27260 6c 20 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20  l NoVs2005..    
27270 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27280 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
27290 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35   return noVs2005
272a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
272b0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
272c0 30 30 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  005 = value; }..
272d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
272e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
272f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27340 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
27350 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
27360 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
27370 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20  NoVs2008..      
27380 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27390 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
273a0 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20  eturn noVs2008; 
273b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
273c0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30     set { noVs200
273d0 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  8 = value; }..  
273e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
273f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
27400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
27450 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
27460 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  010;..          
27470 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
27480 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20  Vs2010..        
27490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
274a0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
274b0 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d  urn noVs2010; }.
274c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
274d0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20   set { noVs2010 
274e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
274f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27500 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
27510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27550 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
27560 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
27570 32 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  2;..            
27580 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
27590 32 30 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20  2012..          
275a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
275b0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
275c0 6e 20 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20  n noVs2012; }.. 
275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
275e0 65 74 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20  et { noVs2012 = 
275f0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
27600 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27610 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
27660 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
27670 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b  e bool noVs2013;
27680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
27690 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
276a0 31 33 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  13..            
276b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
276c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
276d0 6e 6f 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20  noVs2013; }..   
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
276f0 20 7b 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61   { noVs2013 = va
27700 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
27710 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27720 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
27730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27760 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
27770 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
27780 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20  bool noTrace;.. 
27790 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
277a0 63 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a  c bool NoTrace..
277b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
277d0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72  et { return noTr
277e0 61 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ace; }..        
277f0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
27800 54 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d  Trace = value; }
27810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27820 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
27830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27870 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27880 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
27890 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20  oConsole;..     
278a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
278b0 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20  ol NoConsole..  
278c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
278e0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73   { return noCons
278f0 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ole; }..        
27900 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
27910 43 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b  Console = value;
27920 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27940 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27980 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27990 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
279a0 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20   noLog;..       
279b0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
279c0 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20   NoLog..        
279d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
279e0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
279f0 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20  urn noLog; }..  
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
27a10 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75  t { noLog = valu
27a20 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
27a30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27a40 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
27a80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27a90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
27aa0 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ol throwOnMissin
27ab0 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
27ac0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f  public bool Thro
27ad0 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20  wOnMissing..    
27ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27af0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
27b00 20 72 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d   return throwOnM
27b10 69 73 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20  issing; }..     
27b20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
27b30 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20   throwOnMissing 
27b40 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
27b50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
27b60 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
27b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
27bc0 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
27bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
27be0 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
27bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c10 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68   get { return wh
27c20 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
27c30 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
27c40 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d  hatIf = value; }
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27cc0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
27cd0 65 62 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  ebug;..         
27ce0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44     public bool D
27cf0 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ebug..          
27d00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27d10 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27d20 6e 20 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20  n debug; }..    
27d30 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
27d40 7b 20 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b  { debug = value;
27d50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27d60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27d70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27db0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
27dc0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
27dd0 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
27de0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
27df0 6f 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol Verbose..    
27e00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27e10 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
27e20 20 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b   return verbose;
27e30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27e40 20 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73      set { verbos
27e50 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
27e60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27e70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
27e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
27ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
27ed0 69 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69  ivate bool confi
27ee0 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rm;..           
27ef0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e   public bool Con
27f00 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  firm..          
27f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27f20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
27f30 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20  n confirm; }..  
27f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
27f50 74 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61  t { confirm = va
27f60 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
27f70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27f80 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
27f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
27fa0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
27fb0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
27fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28000 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
28010 6f 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  on FrameworkList
28020 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
28030 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
28040 6c 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69  lass FrameworkLi
28050 73 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  st..        {.. 
28060 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
28070 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
28080 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
28090 20 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65      public Frame
280a0 77 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20  workList()..    
280b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
280c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
280d0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
280e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
280f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28150 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28160 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
28170 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
28180 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
28190 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
281a0 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
281b0 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
281c0 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74  RegistryKey Root
281d0 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Key..           
281e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
281f0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
28200 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20   rootKey; }..   
28210 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28220 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c   { rootKey = val
28230 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
28240 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28250 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
28260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28290 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
282a0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53         private S
282b0 74 72 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b  tringList names;
282c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
282d0 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  blic StringList 
282e0 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20  Names..         
282f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28300 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
28310 72 6e 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20  rn names; }..   
28320 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28330 20 7b 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65   { names = value
28340 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
28350 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
28360 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
28370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
283b0 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72       private Ver
283c0 73 69 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73  sionMap versions
283d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
283e0 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70  ublic VersionMap
283f0 20 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20   Versions..     
28400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28410 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
28420 72 65 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b  return versions;
28430 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28440 20 20 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f      set { versio
28450 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ns = value; }.. 
28460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
28470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
284b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
284c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
284d0 72 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73  rivate StringLis
284e0 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  t platformNames;
284f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
28500 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20  blic StringList 
28510 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20  PlatformNames.. 
28520 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
28540 74 20 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66  t { return platf
28550 6f 72 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20  ormNames; }..   
28560 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
28570 20 7b 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73   { platformNames
28580 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
28590 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
285a0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
285b0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
285c0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
285d0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
285e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28630 23 72 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43  #region VsList C
28640 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
28650 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
28660 73 73 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20  ss VsList..     
28670 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
28680 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
28690 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
286a0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
286b0 63 20 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20  c VsList()..    
286c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
286d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
286e0 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
286f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28700 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28760 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
28770 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
28780 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20  c Properties..  
28790 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
287a0 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
287b0 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20  y rootKey;..    
287c0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
287d0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52  ockRegistryKey R
287e0 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20  ootKey..        
287f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28800 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
28810 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a  urn rootKey; }..
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28830 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20  set { rootKey = 
28840 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
28850 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
28860 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
288b0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
288c0 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65  e VersionList ve
288d0 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  rsions;..       
288e0 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
288f0 69 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73  ionList Versions
28900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28920 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
28930 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
28940 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
28950 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
28960 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
28970 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
28980 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
28990 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
289a0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
289b0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
289c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
289d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
28a20 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
28a30 73 74 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20  stant Data..    
28a40 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61 63 6b      #region Pack
28a50 61 67 65 20 26 20 50 72 6f 76 69 64 65 72 20 4e  age & Provider N
28a60 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72  ames..        pr
28a70 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
28a80 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng CoreFileName 
28a90 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
28aa0 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20  QLite.dll";..   
28ab0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
28ac0 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  st string LinqFi
28ad0 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
28ae0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
28af0 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  q.dll";..       
28b00 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
28b10 74 72 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d  tring Ef6FileNam
28b20 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
28b30 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22  .SQLite.EF6.dll"
28b40 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
28b50 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
28b60 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
28b70 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
28b80 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
28b90 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
28ba0 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
28bb0 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
28bc0 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
28bd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28be0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
28bf0 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
28c00 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
28c10 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
28c20 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
28c30 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
28c40 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a   = "SQLite";....
28c50 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28ca0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
28cb0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
28cc0 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20  Description =.. 
28cd0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
28ce0 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20   Framework Data 
28cf0 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c  Provider for SQL
28d00 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  ite";..        #
28d10 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
28d20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28d70 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28d80 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52  const string CLR
28d90 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
28da0 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30  rsion = "v2.0.50
28db0 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  727";..        p
28dc0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
28dd0 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75  ing CLRv4ImageRu
28de0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
28df0 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a  v4.0.30319";....
28e00 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28e50 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
28e60 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
28e70 53 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c  SystemEf6Assembl
28e80 79 4e 61 6d 65 20 3d 20 22 45 6e 74 69 74 79 46  yName = "EntityF
28e90 72 61 6d 65 77 6f 72 6b 2c 20 22 20 2b 0d 0a 20  ramework, " +.. 
28ea0 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72 73             "Vers
28eb0 69 6f 6e 3d 36 2e 30 2e 30 2e 30 2c 20 43 75 6c  ion=6.0.0.0, Cul
28ec0 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75  ture=neutral, Pu
28ed0 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37  blicKeyToken=b77
28ee0 61 35 63 35 36 31 39 33 34 65 30 38 39 22 3b 0d  a5c561934e089";.
28ef0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
28f00 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
28f50 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
28f60 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  ng NameAndValueF
28f70 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31  ormat = "{0}: {1
28f80 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  }";..        pri
28f90 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
28fa0 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20  g LogFileSuffix 
28fb0 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20  = ".log";....   
28fc0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
28fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29010 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29020 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 56 73 44  const string VsD
29030 65 76 45 6e 76 53 65 74 75 70 46 6f 72 6d 61 74  evEnvSetupFormat
29040 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a   = "{0}: {1}";..
29050 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
290b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
290c0 67 20 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20  g RootKeyName = 
290d0 22 53 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20  "Software";..   
290e0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
290f0 73 74 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53  st string Wow64S
29100 75 62 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77  ubKeyName = "Wow
29110 36 34 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20  6432Node";....  
29120 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
29130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
29170 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
29180 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
29190 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
291a0 20 68 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74   has both 32-bit
291b0 20 61 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74   and 64-bit edit
291c0 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  ions...        /
291d0 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  /..        priva
291e0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
291f0 6c 79 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33  ly bool NetFxIs3
29200 32 42 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65  2BitOnly = false
29210 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
29220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29260 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29270 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
29280 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69  OTE: For now, Vi
29290 73 75 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61  sual Studio is a
292a0 6c 77 61 79 73 20 61 20 33 32 2d 62 69 74 20 61  lways a 32-bit a
292b0 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  pplication...   
292c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
292d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
292e0 72 65 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73  readonly bool Vs
292f0 49 73 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72  Is32BitOnly = tr
29300 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ue;....        /
29310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29350 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29360 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29370 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
29380 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42   VsIdFormat = "B
29390 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
293a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
293e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
293f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
29400 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
29410 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
29420 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
29430 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
29440 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
29450 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
29460 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
29470 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
29480 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
29490 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
294a0 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
294b0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
294c0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
294d0 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
294e0 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
294f0 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
29500 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
29510 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
29520 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29530 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29580 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29590 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20 44  Private Static D
295a0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 23 72 65  ata..        #re
295b0 67 69 6f 6e 20 44 69 61 67 6e 6f 73 74 69 63 73  gion Diagnostics
295c0 20 26 20 4c 6f 67 67 69 6e 67 0d 0a 20 20 20 20   & Logging..    
295d0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
295e0 2f 2f 20 4e 4f 54 45 3a 20 43 61 63 68 65 20 74  // NOTE: Cache t
295f0 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
29600 73 73 20 61 6e 64 20 61 73 73 65 6d 62 6c 79 20  ss and assembly 
29610 61 73 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 63  as they do not c
29620 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 2f  hange..        /
29630 2f 20 20 20 20 20 20 20 61 6e 64 20 6d 61 79 20  /       and may 
29640 62 65 20 6e 65 65 64 65 64 20 69 6e 20 71 75 69  be needed in qui
29650 74 65 20 61 20 66 65 77 20 64 69 66 66 65 72 65  te a few differe
29660 6e 74 20 70 6c 61 63 65 73 2e 0d 0a 20 20 20 20  nt places...    
29670 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29680 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 50  private static P
29690 72 6f 63 65 73 73 20 74 68 69 73 50 72 6f 63 65  rocess thisProce
296a0 73 73 20 3d 20 50 72 6f 63 65 73 73 2e 47 65 74  ss = Process.Get
296b0 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29  CurrentProcess()
296c0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
296d0 74 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62  te static Assemb
296e0 6c 79 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20  ly thisAssembly 
296f0 3d 20 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78  = Assembly.GetEx
29700 65 63 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28  ecutingAssembly(
29710 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29770 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20   //..        // 
29780 4e 4f 54 45 3a 20 54 68 65 20 74 72 61 63 65 20  NOTE: The trace 
29790 63 61 74 65 67 6f 72 79 20 69 73 20 74 68 65 20  category is the 
297a0 73 61 6d 65 20 66 6f 72 20 62 6f 74 68 20 74 68  same for both th
297b0 65 20 64 65 62 75 67 20 61 6e 64 20 74 72 61 63  e debug and trac
297c0 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
297d0 20 20 20 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a      callbacks...
297e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
297f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
29800 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43  ic string traceC
29810 61 74 65 67 6f 72 79 20 3d 20 28 74 68 69 73 41  ategory = (thisA
29820 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
29830 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
29840 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65  Path.GetFileName
29850 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f  (thisAssembly.Lo
29860 63 61 74 69 6f 6e 29 20 3a 20 6e 75 6c 6c 3b 0d  cation) : null;.
29870 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
298d0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
298e0 45 3a 20 53 65 74 20 74 68 65 20 64 65 62 75 67  E: Set the debug
298f0 20 61 6e 64 20 74 72 61 63 65 20 6c 6f 67 67 69   and trace loggi
29900 6e 67 20 63 61 6c 6c 62 61 63 6b 73 20 75 73 65  ng callbacks use
29910 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
29920 20 20 2f 2f 20 20 20 20 20 20 20 61 70 70 6c 69    //       appli
29930 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  cation...       
29940 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69   //..        pri
29950 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
29960 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
29970 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62  allback = AppDeb
29980 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ug;..        pri
29990 76 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63  vate static Trac
299a0 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43  eCallback traceC
299b0 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61  allback = AppTra
299c0 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ce;..        #en
299d0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
299e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
299f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
29a30 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79        #region Sy
29a40 73 74 65 6d 20 44 69 72 65 63 74 6f 72 79 0d 0a  stem Directory..
29a50 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29a60 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79  static string sy
29a70 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
29a80 6e 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e  null;....#if WIN
29a90 44 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72  DOWS..        pr
29aa0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
29ab0 69 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74  ing systemDirect
29ac0 6f 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b  oryWow64 = null;
29ad0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
29ae0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
29af0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29b40 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
29b50 6f 6e 20 52 65 67 69 73 74 72 79 20 53 74 61 74  on Registry Stat
29b60 69 73 74 69 63 73 0d 0a 20 20 20 20 20 20 20 20  istics..        
29b70 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
29b80 6e 74 20 66 69 6c 65 73 43 72 65 61 74 65 64 20  nt filesCreated 
29b90 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  = 0;..        pr
29ba0 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
29bb0 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d   filesModified =
29bc0 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69   0;..        pri
29bd0 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
29be0 66 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30  filesDeleted = 0
29bf0 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
29c00 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
29c10 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29c20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29c70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29c80 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  Trace Handling..
29c90 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
29ca0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
29cb0 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  tLogFileName(.. 
29cc0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
29cd0 67 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20  g typeName..    
29ce0 20 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72          ) /* thr
29cf0 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  ow */..        {
29d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
29d10 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
29d20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65  Path.GetTempFile
29d30 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
29d40 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
29d50 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  ctory = Path.Get
29d60 44 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69  DirectoryName(fi
29d70 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
29d80 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
29d90 65 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68  eNameOnly = Path
29da0 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68  .GetFileNameWith
29db0 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c  outExtension(fil
29dc0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
29dd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
29de0 77 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  wFileName = Path
29df0 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f  .Combine(directo
29e00 72 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ry, String.Forma
29e10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
29e20 20 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c      "{0}{1}{2}",
29e30 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
29e40 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
29e50 45 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20  Empty(typeName) 
29e60 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
29e70 20 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70         "." + typ
29e80 65 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45  eName : String.E
29e90 6d 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65  mpty, "." + file
29ea0 4e 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20  NameOnly +..    
29eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ec0 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b  LogFileSuffix));
29ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29ee0 46 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61  File.Move(fileNa
29ef0 6d 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29  me, newFileName)
29f00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29f10 20 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e   return newFileN
29f20 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame;..        }.
29f30 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f80 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
29f90 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
29fa0 64 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20  d AppDebug(..   
29fb0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
29fc0 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
29fd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
29fe0 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  egory..         
29ff0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
2a000 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
2a010 63 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28  ceOps.DebugCore(
2a020 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a040 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f  TraceOps.DebugFo
2a050 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e  rmat, TraceOps.N
2a060 65 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20  extDebugId(),.. 
2a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2a080 72 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d  raceOps.TimeStam
2a090 70 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f  p(DateTime.UtcNo
2a0a0 77 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61  w), message), ca
2a0b0 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
2a0c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2a0d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a0f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a110 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a120 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2a130 20 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d   void AppTrace(.
2a140 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2a150 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
2a160 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2a170 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20   category..     
2a180 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2a190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2a1a0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43   TraceOps.TraceC
2a1b0 6f 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ore(String.Forma
2a1c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2a1d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
2a1e0 63 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f  ceFormat, TraceO
2a1f0 70 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29  ps.NextTraceId()
2a200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a210 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65     TraceOps.Time
2a220 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55  Stamp(DateTime.U
2a230 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29  tcNow), message)
2a240 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  , category);..  
2a250 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a260 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2a270 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2a280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a2c0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2a2d0 6e 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f  n Generic Platfo
2a2e0 72 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rm Handling..   
2a2f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2a300 74 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74  tic bool Is64Bit
2a310 50 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20  Process()..     
2a320 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a330 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2a340 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
2a350 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63  ns true if the c
2a360 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69  urrent process i
2a370 73 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68  s 64-bit.  If th
2a380 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
2a390 2f 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65  //       is true
2a3a0 2c 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74  , we *know* that
2a3b0 20 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e   we must be runn
2a3c0 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d  ing on a 64-bit.
2a3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
2a3e0 20 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20        operating 
2a3f0 73 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20  system as well. 
2a400 20 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69   However, if thi
2a410 73 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a  s is false, we..
2a420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2a430 20 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65       do not nece
2a440 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61  ssarily know tha
2a450 74 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  t we are running
2a460 20 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20   on a 32-bit..  
2a470 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
2a480 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73     operating sys
2a490 74 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36  tem, due to WoW6
2a4a0 34 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36  4 (Win32-on-Win6
2a4b0 34 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  4), etc...      
2a4c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2a4d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e        return (In
2a4e0 74 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a  tPtr.Size == siz
2a4f0 65 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e  eof(long)); // N
2a500 4f 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20  OTE: Pointer is 
2a510 36 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20  64-bits?..      
2a520 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2a530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a570 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a580 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2a590 20 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74 65   bool IsSupporte
2a5a0 64 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20  dRootKey(..     
2a5b0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
2a5c0 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20  try registry,.. 
2a5d0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
2a5e0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
2a5f0 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
2a600 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2a610 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a620 20 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63   Object.Referenc
2a630 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
2a640 20 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   registry.Curren
2a650 74 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20  tUser) ||..     
2a660 20 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63             Objec
2a670 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
2a680 73 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73  s(rootKey, regis
2a690 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
2a6a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
2a6b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2a6c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
2a710 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
2a720 67 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65  g GetRootKeyName
2a730 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
2a740 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2a750 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2a760 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
2a770 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2a780 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2a790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
2a7a0 55 47 46 49 58 3a 20 41 70 70 61 72 65 6e 74 6c  UGFIX: Apparentl
2a7b0 79 2c 20 74 68 65 20 70 65 72 2d 75 73 65 72 20  y, the per-user 
2a7c0 72 65 67 69 73 74 72 79 20 68 69 76 65 20 64 6f  registry hive do
2a7d0 65 73 20 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20  es not use..    
2a7e0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2a7f0 20 20 20 74 68 65 20 22 57 6f 77 36 34 33 32 4e     the "Wow6432N
2a800 6f 64 65 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f  ode" node to sto
2a810 72 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20  re settings for 
2a820 33 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20  32-bit..        
2a830 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61      //         a
2a840 70 70 6c 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e  pplications runn
2a850 69 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 20  ing on a 64-bit 
2a860 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
2a870 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2a880 2f 20 20 20 20 20 20 20 20 20 54 69 63 6b 65 74  /         Ticket
2a890 20 5b 61 30 36 37 37 33 30 39 66 30 5d 20 68 61   [a0677309f0] ha
2a8a0 73 20 66 75 72 74 68 65 72 20 64 65 74 61 69 6c  s further detail
2a8b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
2a8c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2a8d0 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f  return String.Fo
2a8e0 72 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52  rmat("{0}{1}", R
2a8f0 6f 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  ootKeyName,..   
2a900 20 20 20 20 20 20 20 20 20 20 20 20 20 21 70 65               !pe
2a910 72 55 73 65 72 20 26 26 20 77 6f 77 36 34 20 26  rUser && wow64 &
2a920 26 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73  & Is64BitProcess
2a930 28 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  () ?..          
2a940 20 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20 2b            "\\" +
2a950 20 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65   Wow64SubKeyName
2a960 20 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29   : String.Empty)
2a970 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
2a980 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2a990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2a9d0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
2a9e0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
2a9f0 20 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74   GetSystemDirect
2aa00 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
2aa10 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20    bool wow64..  
2aa20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2aa30 20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44       {..#if WIND
2aa40 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OWS..           
2aa50 20 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20 20   if (wow64)..   
2aa60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2aa70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2aa80 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57  systemDirectoryW
2aa90 6f 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ow64 == null).. 
2aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2aab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2aac0 20 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65        systemDire
2aad0 63 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20  ctoryWow64 =..  
2aae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aaf0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
2ab00 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79 73  veMethods.GetSys
2ab10 74 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b 0d  temDirectory();.
2ab20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ab30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ab40 20 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73        return sys
2ab50 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36  temDirectoryWow6
2ab60 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4;..            
2ab70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
2ab80 6c 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  lse..#endif..   
2ab90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2abb0 73 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20  systemDirectory 
2abc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79                sy
2abe0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20  stemDirectory = 
2abf0 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
2ac00 65 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a  emDirectory;....
2ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac20 72 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72  return systemDir
2ac30 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20  ectory;..       
2ac40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2ac50 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
2ac60 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2ac70 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ac80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2acb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2acc0 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65      #region Gene
2acd0 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c  ric String Handl
2ace0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
2acf0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
2ad00 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ng ForDisplay(..
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2ad20 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
2ad30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2ad40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ad50 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
2ad60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ad70 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c      return "<nul
2ad80 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  l>";....        
2ad90 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
2ada0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
2adb0 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75  Type type = valu
2adc0 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a  e.GetType();....
2add0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ade0 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58  type == typeof(X
2adf0 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20  mlElement))..   
2ae00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2ae10 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
2ae20 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d  lement element =
2ae30 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c   (XmlElement)val
2ae40 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2ae50 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
2ae60 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c  element.OuterXml
2ae70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2ae80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
2ae90 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74  se if (type == t
2aea0 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d  ypeof(Version)).
2aeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aed0 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20  Version version 
2aee0 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65  = (Version)value
2aef0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2af00 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74       result = St
2af10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
2af20 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20  }", version);.. 
2af30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2af40 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
2af50 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f  f (type == typeo
2af60 66 28 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e  f(ProcessStartIn
2af70 66 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  fo))..          
2af80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2af90 20 20 20 20 20 50 72 6f 63 65 73 73 53 74 61 72       ProcessStar
2afa0 74 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f 20  tInfo startInfo 
2afb0 3d 20 28 50 72 6f 63 65 73 73 53 74 61 72 74 49  = (ProcessStartI
2afc0 6e 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  nfo)value;....  
2afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2afe0 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f  sult = String.Fo
2aff0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2b000 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65             "file
2b010 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 61 72 67 75  Name = {0}, argu
2b020 6d 65 6e 74 73 20 3d 20 7b 31 7d 2c 20 77 6f 72  ments = {1}, wor
2b030 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20  kingDirectory = 
2b040 7b 32 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {2}, " +..      
2b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75                "u
2b060 73 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d  seShellExecute =
2b070 20 7b 33 7d 2c 20 72 65 64 69 72 65 63 74 53 74   {3}, redirectSt
2b080 61 6e 64 61 72 64 4f 75 74 70 75 74 20 3d 20 7b  andardOutput = {
2b090 34 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  4}, " +..       
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65               "re
2b0b0 64 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72  directStandardEr
2b0c0 72 6f 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44  ror = {5}", ForD
2b0d0 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
2b0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
2b0f0 72 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29  rtInfo.FileName)
2b100 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61  , ForDisplay(sta
2b110 72 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73  rtInfo.Arguments
2b120 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2b130 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2b140 61 79 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72  ay(startInfo.Wor
2b150 6b 69 6e 67 44 69 72 65 63 74 6f 72 79 29 2c 20  kingDirectory), 
2b160 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
2b170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b180 20 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68   startInfo.UseSh
2b190 65 6c 6c 45 78 65 63 75 74 65 29 2c 20 46 6f 72  ellExecute), For
2b1a0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2b1c0 61 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74  artInfo.Redirect
2b1d0 53 74 61 6e 64 61 72 64 4f 75 74 70 75 74 29 2c  StandardOutput),
2b1e0 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b200 20 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69    startInfo.Redi
2b210 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f  rectStandardErro
2b220 72 29 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56  r)); /* RECURSIV
2b230 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
2b240 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2b250 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d   else if (type =
2b260 3d 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73  = typeof(Process
2b270 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2b280 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b290 20 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65     Process proce
2b2a0 73 73 20 3d 20 28 50 72 6f 63 65 73 73 29 76 61  ss = (Process)va
2b2b0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
2b2c0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
2b2d0 20 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74   process.Id.ToSt
2b2e0 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20  ring();..       
2b2f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b300 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70      else if (typ
2b310 65 20 3d 3d 20 74 79 70 65 6f 66 28 44 61 74 61  e == typeof(Data
2b320 52 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67  ReceivedEventArg
2b330 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
2b340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b350 20 20 20 20 44 61 74 61 52 65 63 65 69 76 65 64      DataReceived
2b360 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
2b370 72 67 73 20 3d 20 28 44 61 74 61 52 65 63 65 69  rgs = (DataRecei
2b380 76 65 64 45 76 65 6e 74 41 72 67 73 29 76 61 6c  vedEventArgs)val
2b390 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2b3a0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
2b3b0 46 6f 72 44 69 73 70 6c 61 79 28 65 76 65 6e 74  ForDisplay(event
2b3c0 41 72 67 73 2e 44 61 74 61 29 3b 20 2f 2a 20 52  Args.Data); /* R
2b3d0 45 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20  ECURSIVE */..   
2b3e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b3f0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
2b400 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b410 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
2b420 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74  ult = value.ToSt
2b430 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ring();....     
2b440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
2b450 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20  esult.Length == 
2b460 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
2b470 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
2b480 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20  <empty>";....   
2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2b4a0 28 74 79 70 65 2e 49 73 53 75 62 63 6c 61 73 73  (type.IsSubclass
2b4b0 4f 66 28 74 79 70 65 6f 66 28 45 78 63 65 70 74  Of(typeof(Except
2b4c0 69 6f 6e 29 29 29 0d 0a 20 20 20 20 20 20 20 20  ion)))..        
2b4d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2b4f0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
2b500 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b520 22 7b 30 7d 7b 31 7d 7b 30 7d 22 2c 20 45 6e 76  "{0}{1}{0}", Env
2b530 69 72 6f 6e 6d 65 6e 74 2e 4e 65 77 4c 69 6e 65  ironment.NewLine
2b540 2c 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20 20  , result);..    
2b550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2b570 6c 73 65 20 69 66 20 28 21 74 79 70 65 2e 49 73  lse if (!type.Is
2b580 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
2b590 66 28 56 61 6c 75 65 54 79 70 65 29 29 29 0d 0a  f(ValueType)))..
2b5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2b5c0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
2b5d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 5c  String.Format("\
2b5e0 22 7b 30 7d 5c 22 22 2c 20 72 65 73 75 6c 74 29  "{0}\"", result)
2b5f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b600 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2b610 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2b620 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
2b630 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
2b640 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2b650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2b660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
2b6b0 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20  region Assembly 
2b6c0 41 74 74 72 69 62 75 74 65 20 48 61 6e 64 6c 69  Attribute Handli
2b6d0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c  ng..        publ
2b6e0 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2b6f0 20 47 65 74 41 73 73 65 6d 62 6c 79 43 6f 6e 66   GetAssemblyConf
2b700 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20  iguration(..    
2b710 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2b720 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
2b730 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2b740 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b750 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
2b760 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2b770 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b780 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
2b790 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7b0 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e     if (assembly.
2b7c0 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20  IsDefined(..    
2b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7e0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41          typeof(A
2b7f0 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61  ssemblyConfigura
2b800 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29 2c 20  tionAttribute), 
2b810 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
2b820 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2b830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b840 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
2b850 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
2b860 72 69 62 75 74 65 20 63 6f 6e 66 69 67 75 72 61  ribute configura
2b870 74 69 6f 6e 20 3d 0d 0a 20 20 20 20 20 20 20 20  tion =..        
2b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b890 20 20 20 20 28 41 73 73 65 6d 62 6c 79 43 6f 6e      (AssemblyCon
2b8a0 66 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62  figurationAttrib
2b8b0 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ute)..          
2b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b8d0 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75    assembly.GetCu
2b8e0 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d  stomAttributes(.
2b8f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b910 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79   typeof(Assembly
2b920 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 41 74 74  ConfigurationAtt
2b930 72 69 62 75 74 65 29 2c 0d 0a 20 20 20 20 20 20  ribute),..      
2b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b950 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 29            false)
2b960 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
2b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b980 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 75 72 61  return configura
2b990 74 69 6f 6e 2e 43 6f 6e 66 69 67 75 72 61 74 69  tion.Configurati
2b9a0 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on;..           
2b9b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2b9c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2b9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2b9e0 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20  atch..          
2b9f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2ba10 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
2ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2ba30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ba40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2ba50 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
2ba60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ba70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2baa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bab0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2bac0 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2bad0 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
2bae0 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20  blyTitle(..     
2baf0 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
2bb00 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
2bb10 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2bb20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2bb30 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20  if (assembly != 
2bb40 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2bb50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2bb60 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
2bb70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb90 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49    if (assembly.I
2bba0 73 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20  sDefined(..     
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
2bbd0 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
2bbe0 62 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a  bute), false))..
2bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2bc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
2bc20 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
2bc30 69 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20  ibute title =.. 
2bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc50 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
2bc60 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75  mblyTitleAttribu
2bc70 74 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  te)..           
2bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc90 20 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73   assembly.GetCus
2bca0 74 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a  tomAttributes(..
2bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bcd0 74 79 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54  typeof(AssemblyT
2bce0 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20  itleAttribute), 
2bcf0 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20  false)[0];....  
2bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd10 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74        return tit
2bd20 6c 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20  le.Title;..     
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2bd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bd50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2bd60 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
2bd70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bd90 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
2bda0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2bdb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2bdc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2bdd0 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2bde0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2bdf0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2be00 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2be10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2be50 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
2be60 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77  gion .NET Framew
2be70 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ork Handling..  
2be80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2be90 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
2bea0 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e  rameworkRootKeyN
2beb0 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
2bec0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2bed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2bee0 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20  l wow64..       
2bef0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
2bf00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
2bf10 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
2bf20 6d 61 74 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73  mat("{0}\\Micros
2bf30 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f  oft\\.NETFramewo
2bf40 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
2bf50 20 20 20 20 20 20 47 65 74 52 6f 6f 74 4b 65 79        GetRootKey
2bf60 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
2bf70 77 36 34 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  w64));..        
2bf80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
2bf90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2bfd0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2bfe0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
2bff0 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f  tring GetFramewo
2c000 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  rkKeyName(..    
2c010 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
2c020 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
2c030 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
2c040 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
2c050 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2c060 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
2c070 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
2c080 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
2c090 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2c0a0 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20 20  ool wow64..     
2c0b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c0c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c0d0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
2c0e0 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
2c0f0 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
2c100 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
2c110 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
2c120 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
2c130 32 7d 5c 5c 7b 33 7d 22 20 3a 0d 0a 20 20 20 20  2}\\{3}" :..    
2c140 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d              "{0}
2c150 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d  \\Microsoft\\{1}
2c160 5c 5c 76 7b 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20  \\v{2}";....    
2c170 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
2c180 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
2c190 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e  mat, GetRootKeyN
2c1a0 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77  ame(perUser, wow
2c1b0 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  64),..          
2c1c0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
2c1d0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
2c1e0 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
2c1f0 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
2c200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
2c210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
2c260 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
2c270 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e  ring GetImageRun
2c280 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
2c290 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2c2a0 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20   fileName..     
2c2b0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2c2c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c2d0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
2c2e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2c2f0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
2c300 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c  sembly = Assembl
2c310 79 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79  y.ReflectionOnly
2c320 4c 6f 61 64 46 72 6f 6d 28 0d 0a 20 20 20 20 20  LoadFrom(..     
2c330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2c340 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
2c350 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
2c360 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73           if (ass
2c370 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a  embly != null)..
2c380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c390 20 20 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d      return assem
2c3a0 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65  bly.ImageRuntime
2c3b0 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20  Version;..      
2c3c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c3d0 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
2c3e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c3f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
2c400 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
2c410 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2c420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
2c430 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
2c440 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2c450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c490 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
2c4a0 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
2c4b0 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  ing GetFramework
2c4c0 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
2c4d0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2c4e0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
2c4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
2c500 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
2c510 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
2c520 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
2c530 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2c540 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
2c550 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2c560 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2c570 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
2c580 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
2c590 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c5a0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2c5b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2c5c0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2c5d0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5f0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 47 65 74      rootKey, Get
2c600 46 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  FrameworkRootKey
2c610 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77 6f  Name(perUser, wo
2c620 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  w64),..         
2c630 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
2c640 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
2c650 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
2c660 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2c670 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
2c680 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c690 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2c6a0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
2c6b0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2c6c0 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
2c6d0 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
2c6e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2c6f0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
2c700 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c  tallRoot", null,
2c710 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2c720 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2c730 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
2c740 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c760 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2c770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2c780 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43     return Path.C
2c790 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
2c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
2c7b0 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69  ring)value, Stri
2c7c0 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22  ng.Format("v{0}"
2c7d0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
2c7e0 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
2c7f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2c800 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2c810 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2c820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c860 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2c870 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72    #region Per-Fr
2c880 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d  amework/Platform
2c890 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
2c8a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2c8b0 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
2c8c0 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d  eFrameworkList(.
2c8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2c8e0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2c8f0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
2c900 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
2c910 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
2c920 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2c930 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
2c940 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a 20 20  rameworkList..  
2c950 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2c960 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c970 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2c980 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  kList == null)..
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20  frameworkList = 
2c9b0 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  new FrameworkLis
2c9c0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
2c9d0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2c9e0 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d  kList.RootKey ==
2c9f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2ca00 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2ca10 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 20  kList.RootKey = 
2ca20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  rootKey;....    
2ca30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2ca40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2ca80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2ca90 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2caa0 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
2cab0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2cad0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
2cae0 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
2caf0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
2cb00 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
2cb10 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
2cb20 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
2cb30 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d  tion.NoDesktop).
2cb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cb50 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2cb60 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
2cb70 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ETFramework");..
2cb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cb90 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2cba0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2cbb0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2cbc0 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20  NoCompact)..    
2cbd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbf0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2cc00 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
2cc10 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
2cc20 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
2cc30 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2cc40 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
2cc50 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
2cc60 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
2cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2cc80 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
2cc90 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
2cca0 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
2ccb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ccc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2ccd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cce0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ccf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2cd30 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2cd40 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
2cd50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2cd60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cd70 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2cd80 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
2cd90 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28   new VersionMap(
2cda0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2cdb0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2cdc0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2cdd0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2cde0 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ce10 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
2ce20 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f  st desktopVersio
2ce30 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
2ce40 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ionList();....  
2ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce60 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2ce70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2ce80 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2ce90 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20  NoNetFx20)..    
2cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ceb0 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
2cec0 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2ced0 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
2cee0 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  27));....       
2cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2cf00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf10 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2cf20 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2cf30 20 33 2e 35 20 64 6f 65 73 20 6e 6f 74 20 68 61   3.5 does not ha
2cf40 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20 20 20  ve its own..    
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63 74 6f  //       directo
2cf70 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  ry; however, it 
2cf80 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65 20 61  still may have a
2cf90 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2cfb0 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20 66 6f        folders fo
2cfc0 72 20 75 73 65 20 69 6e 20 56 69 73 75 61 6c 20  r use in Visual 
2cfd0 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a 20 20  Studio, etc...  
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2d000 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
2d010 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
2d020 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
2d030 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33  uration.NoNetFx3
2d040 35 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5)..            
2d050 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
2d060 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
2d070 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 33  dd(new Version(3
2d080 2c 20 35 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  , 5));....      
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2d0a0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
2d0b0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
2d0c0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
2d0d0 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20  tFx40)..        
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
2d100 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
2d110 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29  on(4, 0, 30319))
2d120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2d130 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d150 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
2d160 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 34 2e 35  ET Framework 4.5
2d170 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
2d180 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
2d190 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2d1a0 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
2d1b0 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
2d1c0 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
2d1d0 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
2d1e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
2d1f0 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
2d200 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
2d210 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2d230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d240 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
2d250 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
2d260 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
2d270 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 35 29 0d 0a  ion.NoNetFx45)..
2d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d290 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
2d2a0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
2d2b0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 35 2c  ew Version(4, 5,
2d2c0 20 35 30 37 30 39 29 29 3b 0d 0a 0d 0a 20 20 20   50709));....   
2d2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2e0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2d2f0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2d300 3a 20 54 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  : The .NET Frame
2d310 77 6f 72 6b 20 34 2e 35 2e 31 20 64 6f 65 73 20  work 4.5.1 does 
2d320 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f 77 6e  not have its own
2d330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d340 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
2d350 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65 76 65  irectory; howeve
2d360 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61 79 20  r, it still may 
2d370 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  have assembly.. 
2d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d390 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f 6c 64     //       fold
2d3a0 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e 20 56  ers for use in V
2d3b0 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20 65 74  isual Studio, et
2d3c0 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  c...            
2d3d0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d3f0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2d400 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2d410 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2d420 4e 65 74 46 78 34 35 31 29 0d 0a 20 20 20 20 20  NetFx451)..     
2d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d440 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f     desktopVersio
2d450 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65  nList.Add(new Ve
2d460 72 73 69 6f 6e 28 34 2c 20 35 2c 20 31 29 29 3b  rsion(4, 5, 1));
2d470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2d480 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2d490 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
2d4a0 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
2d4b0 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
2d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
2d4d0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29  ktopVersionList)
2d4e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d4f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d500 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
2d510 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
2d520 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
2d530 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
2d540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2d550 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2d560 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2d570 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
2d580 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
2d590 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d5b0 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
2d5c0 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e  List(new Version
2d5d0 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
2d5f0 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20  w Version(2, 0, 
2d600 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69  0, 0), new Versi
2d610 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a  on(3, 5, 0, 0)..
2d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d630 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20      }));..      
2d640 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d650 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d660 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2d670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2d6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d6c0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
2d6d0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
2d6e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d6f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2d700 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2d710 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2d720 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
2d730 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
2d740 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
2d750 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
2d760 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
2d770 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
2d780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2d790 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2d7a0 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
2d7b0 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d  es.Add(null);...
2d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d7d0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
2d7e0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
2d7f0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
2d800 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
2d810 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d830 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
2d840 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
2d850 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a  d("PocketPC");..
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2d880 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
2d890 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22  Add("Smartphone"
2d8a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2d8b0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
2d8c0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2d8d0 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73  mes.Add("Windows
2d8e0 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  CE");..         
2d8f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2d900 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2d910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
2d920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d960 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2d970 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2d980 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f  bool HaveFramewo
2d990 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20  rkDirectory(..  
2d9a0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
2d9b0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
2d9c0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
2d9d0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2d9e0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
2d9f0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
2da00 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
2da10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2da20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
2da30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2da40 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2da50 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2da60 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2da70 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
2da80 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
2da90 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2daa0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
2dab0 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2dac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2dad0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2dae0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
2daf0 65 79 4e 61 6d 65 20 3d 20 47 65 74 46 72 61 6d  eyName = GetFram
2db00 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20  eworkKeyName(.. 
2db10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2db20 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
2db30 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
2db40 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
2db50 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
2db60 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
2db70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
2db80 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
2db90 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
2dba0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
2dbb0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
2dbc0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2dbd0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
2dbe0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
2dbf0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
2dc00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2dc10 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
2dc20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2dc40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
2dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2dc60 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
2dc70 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a  = null) // NOTE:
2dc80 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f   Skip non-deskto
2dc90 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p...            
2dca0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
2dcb0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
2dcc0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
2dcd0 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
2dce0 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
2dcf0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2dd00 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
2dd10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2dd20 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2dd30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2dd50 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2dd60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2dd70 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
2dd80 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
2dd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dda0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2ddb0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
2ddc0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
2ddd0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
2dde0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2de00 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
2de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2de20 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2de30 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2de40 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
2de50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de60 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
2de70 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
2de80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
2de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dea0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
2deb0 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61 20  k {0} found via 
2dec0 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22 2c  directory {1}.",
2ded0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2dee0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2def0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
2df00 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  n), ForDisplay(d
2df10 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
2df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df30 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2df40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2df50 20 20 20 20 69 6e 73 74 61 6c 6c 44 69 72 65 63      installDirec
2df60 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79  tory = directory
2df70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2df80 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
2df90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2dfa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2dfb0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2dfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2e000 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2e010 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
2e020 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
2e030 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2e040 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
2e050 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
2e060 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
2e070 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
2e080 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2e090 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2e0a0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
2e0b0 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2e0c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
2e0d0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
2e0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
2e0f0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
2e100 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
2e110 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
2e120 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
2e130 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2e140 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e150 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2e160 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  me = GetFramewor
2e170 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
2e180 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2e190 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2e1a0 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2e1b0 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
2e1c0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2e1d0 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
2e1e0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2e1f0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2e200 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2e210 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2e220 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2e230 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2e240 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2e250 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2e260 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2e270 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2e280 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2e290 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2e2a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e2b0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2e2c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
2e2d0 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
2e2e0 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
2e2f0 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e310 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2e320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e330 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2e340 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2e350 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
2e360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e370 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2e380 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2e390 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2e3a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e3b0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
2e3c0 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 6f 75 6e 64  mework {0} found
2e3d0 20 76 69 61 20 72 65 67 69 73 74 72 79 20 7b 31   via registry {1
2e3e0 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
2e3f0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2e400 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65  play(frameworkVe
2e410 72 73 69 6f 6e 29 2c 20 46 6f 72 44 69 73 70 6c  rsion), ForDispl
2e420 61 79 28 6b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20  ay(keyName)),.. 
2e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e440 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
2e450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2e460 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
2e470 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2e480 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2e490 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2e4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2e4e0 0a 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  ...        [Meth
2e4f0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2e500 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2e510 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2e520 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2e530 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
2e540 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20  orkConfig(..    
2e550 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
2e560 73 74 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a  stry registry,..
2e570 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
2e580 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
2e590 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20  orkList,..      
2e5a0 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43        FrameworkC
2e5b0 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61  onfigCallback ca
2e5c0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
2e5d0 20 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73       string vers
2e5e0 69 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70  ion, /* NOTE: Op
2e5f0 74 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20  tional. */..    
2e600 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
2e610 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
2e620 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2e630 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
2e640 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
2e650 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
2e660 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
2e670 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2e680 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
2e690 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
2e6b0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
2e6c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e6d0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
2e6e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
2e6f0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
2e700 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
2e710 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
2e720 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2e730 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2e740 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
2e750 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
2e760 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
2e770 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
2e780 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
2e790 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2e7a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2e7b0 72 65 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c  registry == null
2e7c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2e7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e7e0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2e7f0 69 64 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20  id registry";.. 
2e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2e810 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2e820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e830 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
2e840 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
2e850 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e860 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e870 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2e880 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
2e890 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
2e8a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2e8b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2e8c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2e8d0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
2e8e0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66  yKey rootKey = f
2e8f0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f  rameworkList.Roo
2e900 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
2e910 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
2e920 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 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 65 72 72 6f 72 20            error 
2e950 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
2e960 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
2e970 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2e980 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2e990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2e9a0 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f 72     if (!IsSuppor
2e9b0 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73  tedRootKey(regis
2e9c0 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a  try, rootKey))..
2e9d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2e9f0 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
2ea00 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
2ea10 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
2ea20 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
2ea30 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ea40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2ea50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ea60 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
2ea70 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
2ea80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2ea90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2eaa0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
2eab0 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
2eac0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
2ead0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
2eae0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
2eaf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2eb00 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
2eb10 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
2eb20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2eb30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2eb40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
2eb50 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
2eb60 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2eb80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2eb90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2eba0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
2ebb0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2ebc0 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
2ebd0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ebe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ebf0 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
2ec00 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
2ec10 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
2ec20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
2ec30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
2ec40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ec50 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
2ec60 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
2ec70 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
2ec80 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
2ec90 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
2eca0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2ecb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
2ecc0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
2ecd0 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
2ece0 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
2ecf0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2ed00 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
2ed10 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
2ed20 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
2ed30 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
2ed40 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
2ed50 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2ed60 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2ed70 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
2ed80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ed90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2edb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
2edc0 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
2edd0 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
2ede0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
2edf0 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
2ee00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2ee20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee30 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
2ee40 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
2ee50 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
2ee60 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
2ee70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ee80 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
2ee90 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
2eea0 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
2eeb0 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eee0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
2eef0 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
2ef00 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
2ef10 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
2ef20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
2ef30 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
2ef40 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2ef50 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
2ef60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef70 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2ef80 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b       // NOTE: Sk
2ef90 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74  ip all non-deskt
2efa0 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69  op frameworks (i
2efb0 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66  .e. if the platf
2efc0 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..           
2efd0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61       //       na
2efe0 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e  me is not null).
2eff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f000 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f010 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
2f020 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d  rmName != null).
2f030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f040 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2f050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f060 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2f070 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
2f080 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65  rab the supporte
2f090 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68  d versions of th
2f0a0 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20  is particular.. 
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f0c0 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72  /       framewor
2f0d0 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
2f0e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2f0f0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c          VersionL
2f100 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ist frameworkVer
2f110 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20  sionList;....   
2f120 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2f130 28 76 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c  (version != null
2f140 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2f150 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f160 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f180 20 20 2f 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61    // NOTE: Manua
2f190 6c 20 6f 76 65 72 72 69 64 65 20 6f 66 20 74 68  l override of th
2f1a0 65 20 2a 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72  e *ONE* framewor
2f1b0 6b 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  k version..     
2f1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f1d0 2f 20 20 20 20 20 20 20 74 6f 20 70 72 6f 63 65  /       to proce
2f1e0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...           
2f1f0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2f200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f210 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2f220 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
2f230 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20  ionList();..    
2f240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f250 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2f260 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72  List.Add(new Ver
2f270 73 69 6f 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d  sion(version));.
2f280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f290 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2f2a0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
2f2b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2d0 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c   if (!frameworkL
2f2e0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79  ist.Versions.Try
2f2f0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
2f300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f310 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2f320 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
2f330 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
2f340 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
2f350 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61              (fra
2f360 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2f370 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20  t == null))..   
2f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2f3a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
2f3b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
2f3c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2f3e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f3f0 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
2f400 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
2f410 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72  sion in framewor
2f420 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20  kVersionList).. 
2f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f450 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2f460 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2f470 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
2f480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f490 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2f4a0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2f4b0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2f4c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20   "frameworkName 
2f4f0 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b  = {0}, framework
2f500 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22  Version = {1}, "
2f510 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2f520 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61              "pla
2f530 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22  tformName = {2}"
2f540 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
2f550 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20  meworkName),..  
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f570 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2f580 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
2f590 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
2f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2f5b0 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d  Display(platform
2f5c0 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
2f5d0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2f5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2f5f0 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72  tring installDir
2f600 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a  ectory = null;..
2f610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f620 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 46        if (!HaveF
2f630 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
2f640 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f660 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
2f670 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
2f680 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
2f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6a0 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
2f6b0 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  ame, perUser, wo
2f6c0 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65 72  w64, whatIf, ver
2f6d0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f6f0 20 20 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69     ref installDi
2f700 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2f720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f730 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2f740 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2f750 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2f760 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow,..           
2f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f780 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2f790 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2f7a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f7c0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
2f7d0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
2f7e0 69 72 65 63 74 6f 72 79 20 6e 6f 74 20 66 6f 75  irectory not fou
2f7f0 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  nd, " +..       
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f810 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
2f820 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
2f830 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
2f840 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f860 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
2f870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f880 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2f890 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2f8a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8c0 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20     if (callback 
2f8d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8f0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
2f900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f910 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
2f920 6f 72 79 20 3d 20 69 6e 73 74 61 6c 6c 44 69 72  ory = installDir
2f930 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20 20 20 20 20  ectory;....     
2f940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f950 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
2f960 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
2f970 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2f980 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2f990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2f9b0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2f9c0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
2f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f9e0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2f9f0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2fa00 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2fa10 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa30 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65       ".NET Frame
2fa40 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f  work {0} directo
2fa50 72 79 20 69 73 20 69 6e 76 61 6c 69 64 2c 20 22  ry is invalid, "
2fa60 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
2fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa80 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
2fa90 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
2faa0 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  orkVersion)),.. 
2fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fac0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2fad0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faf0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2fb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
2fb30 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43  rectory = Path.C
2fb40 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
2fb50 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a  , "Config");....
2fb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb70 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
2fb80 72 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74  ry.Exists(direct
2fb90 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2fba0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2fbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fbc0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2fbd0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2fbe0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
2fbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc00 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2fc10 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2fc20 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2fc30 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fc50 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
2fc60 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
2fc70 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f  tory {1} does no
2fc80 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  t " +..         
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fca0 20 20 20 22 65 78 69 73 74 2c 20 73 6b 69 70 70     "exist, skipp
2fcb0 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
2fcc0 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
2fcd0 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
2fce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fcf0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
2fd00 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72 61 63  irectory)), trac
2fd10 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd30 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2fd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fd50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2fd70 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
2fd80 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
2fd90 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e  rectory, "machin
2fda0 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20  e.config");.... 
2fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdc0 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45 78 69     if (!File.Exi
2fdd0 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a  sts(fileName))..
2fde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fdf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2fe10 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2fe20 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2fe30 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20  ity.Low,..      
2fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fe50 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
2fe60 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
2fe70 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
2fe80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fea0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
2feb0 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65  {0} file {1} doe
2fec0 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b  s not exist, " +
2fed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
2fef0 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
2ff00 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
2ff10 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
2ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ff30 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2ff40 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74  ay(fileName)), t
2ff50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2ff60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ff70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
2ff80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
2ff90 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffb0 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65    bool localSave
2ffc0 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
2ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ffe0 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
2fff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
30010 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
30020 74 4e 61 6d 65 2c 20 6e 61 6d 65 2c 20 64 65 73  tName, name, des
30030 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30050 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
30060 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 69   assemblyName, i
30070 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 2c  nstallDirectory,
30080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
300a0 69 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73 65  ientData, perUse
300b0 72 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f  r, wow64, throwO
300c0 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
300d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
300e0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
300f0 65 72 62 6f 73 65 2c 20 72 65 66 20 6c 6f 63 61  erbose, ref loca
30100 6c 53 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f  lSaved, ref erro
30110 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
30120 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30150 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30160 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
30170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
30180 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
30190 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
301a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301b0 20 20 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65     if (localSave
301c0 64 20 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20  d && !saved)..  
301d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
301e0 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
301f0 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
30200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30210 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
30220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
30240 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
30250 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
30260 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20  y.Lowest,..     
30270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30280 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
30290 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
302a0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
302b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
302d0 20 20 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53           "localS
302e0 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65  aved = {0}, save
302f0 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  d = {1}",..     
30300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30310 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
30320 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64  splay(localSaved
30330 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61  ), ForDisplay(sa
30340 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ved)),..        
30350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30360 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
30370 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
30380 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
30390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
303a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
303b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
303c0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
303d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
303e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
303f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
30430 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
30440 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
30450 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
30460 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
30470 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
30480 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65  rEachFrameworkRe
30490 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
304a0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
304b0 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
304c0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
304d0 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
304e0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
304f0 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69     FrameworkRegi
30500 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c  stryCallback cal
30510 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
30520 20 20 20 20 73 74 72 69 6e 67 20 76 65 72 73 69      string versi
30530 6f 6e 2c 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74  on, /* NOTE: Opt
30540 69 6f 6e 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20  ional. */..     
30550 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
30560 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
30570 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
30580 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
30590 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
305a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
305b0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d  throwOnMissing,.
305c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
305d0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
305e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
305f0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
30600 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
30610 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
30620 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
30630 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
30640 67 69 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d  gistry == null).
30650 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30670 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
30680 20 72 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20   registry";..   
30690 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
306a0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
306b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
306c0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
306d0 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
306e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
306f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30700 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
30710 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
30720 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
30730 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
30740 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
30750 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
30760 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
30770 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
30780 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
30790 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
307a0 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
307b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
307c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
307d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
307e0 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
307f0 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
30800 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30810 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30820 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30830 20 69 66 20 28 21 49 73 53 75 70 70 6f 72 74 65   if (!IsSupporte
30840 64 52 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72  dRootKey(registr
30850 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20  y, rootKey))..  
30860 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
30870 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
30880 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
30890 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
308a0 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
308b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
308c0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
308d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
308e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
308f0 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
30900 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
30910 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
30930 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
30940 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
30950 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
30960 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
30970 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
30980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30990 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
309a0 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
309b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
309c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
309d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
309e0 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
309f0 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
30a00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
30a10 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
30a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30a30 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
30a40 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
30a50 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
30a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30a80 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
30a90 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
30aa0 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
30ab0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
30ac0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
30ad0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
30ae0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
30af0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
30b00 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
30b10 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
30b20 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
30b30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
30b40 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
30b50 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
30b60 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
30b70 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
30b80 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
30b90 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
30ba0 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
30bb0 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
30bc0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
30bd0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
30be0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
30bf0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
30c00 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
30c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
30c20 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
30c30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
30c40 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
30c50 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
30c60 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
30c70 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
30c80 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
30c90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
30ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
30cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30cc0 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
30cd0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
30ce0 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
30cf0 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
30d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30d10 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
30d20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
30d30 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
30d40 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
30d50 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
30d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
30d70 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
30d80 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
30d90 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
30da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30db0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
30dc0 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
30dd0 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
30de0 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30e00 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
30e10 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
30e20 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76   the supported v
30e30 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ersions of this 
30e40 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20  particular..    
30e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
30e60 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d       framework..
30e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30e80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
30e90 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
30ea0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
30eb0 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
30ec0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
30ed0 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  rsion != null)..
30ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
30f00 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
30f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30f20 2f 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f  / NOTE: Manual o
30f30 76 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a  verride of the *
30f40 4f 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76  ONE* framework v
30f50 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..        
30f60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
30f70 20 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e       to process.
30f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
30f90 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
30fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
30fb0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
30fc0 73 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  st = new Version
30fd0 4c 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20  List();..       
30fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
30ff0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
31000 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
31010 6e 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20  n(version));..  
31020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
31030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31040 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
31050 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
31070 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   (!frameworkList
31080 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74  .Versions.TryGet
31090 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
310c0 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b  e, out framework
310d0 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d  VersionList) ||.
310e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
310f0 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77           (framew
31100 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
31110 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
31120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
31130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
31140 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
31150 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
31160 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
31170 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
31180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31190 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
311a0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
311b0 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
311c0 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
311d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
311e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311f0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
31200 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
31210 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
31220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31230 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
31240 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
31250 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
31260 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
31270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
31280 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
31290 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
312a0 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
312b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
312c0 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
312d0 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
312e0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
312f0 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
31300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31310 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
31320 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
31330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
31340 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
31350 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
31360 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
31370 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
31380 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
31390 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 52 65  !HaveFrameworkRe
313a0 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
313b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
313c0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
313d0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
313e0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
313f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31400 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
31410 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
31420 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66  r, wow64, whatIf
31430 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31460 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
31470 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
31480 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
31490 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
314a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314b0 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
314c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
314d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
314e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
314f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
31500 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
31510 20 72 65 67 69 73 74 72 79 20 6e 6f 74 20 66 6f   registry not fo
31520 75 6e 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  und, " +..      
31530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31540 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
31550 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
31560 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
31570 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
31580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31590 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
315a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
315b0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
315c0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
315d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
315e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
315f0 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
31600 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
31610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31620 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
31650 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
31660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31670 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
31680 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
31690 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
316b0 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
316c0 61 6d 65 2c 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e  ame, null, clien
316d0 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 0d  tData, perUser,.
316e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
316f0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77               wow
31700 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
31710 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ng, whatIf, verb
31720 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
31730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31740 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20    ref error)).. 
31750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
31770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31780 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
31790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
317a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
317b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
317c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
317d0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
317e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
317f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
31800 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
31810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31850 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
31860 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c  egion Per-Visual
31870 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20   Studio Version 
31880 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
31890 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
318a0 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
318b0 56 73 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20  VsList(..       
318c0 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
318d0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
318e0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
318f0 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
31900 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ration,..       
31910 20 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20       ref VsList 
31920 76 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  vsList..        
31930 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
31940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
31950 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c   (vsList == null
31960 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
31970 20 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20     vsList = new 
31980 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  VsList();....   
31990 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c           if (vsL
319a0 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e  ist.RootKey == n
319b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
319c0 20 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f        vsList.Roo
319d0 74 4b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d  tKey = rootKey;.
319e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
319f0 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f  f (vsList.Versio
31a00 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
31a10 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
31a20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
31a30 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65  st.Versions = ne
31a40 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b  w VersionList();
31a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31a60 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
31a70 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
31a80 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
31a90 6e 2e 4e 6f 56 73 32 30 30 35 29 0d 0a 20 20 20  n.NoVs2005)..   
31aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31ab0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
31ac0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
31ad0 28 38 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 35  (8, 0)); // 2005
31ae0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31af0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
31b00 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
31b10 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
31b20 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20  n.NoVs2008)..   
31b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b40 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
31b50 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
31b60 28 39 2c 20 30 29 29 3b 20 2f 2f 20 32 30 30 38  (9, 0)); // 2008
31b70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31b80 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
31b90 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
31ba0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
31bb0 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20  n.NoVs2010)..   
31bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31bd0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
31be0 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
31bf0 28 31 30 2c 20 30 29 29 3b 2f 2f 20 32 30 31 30  (10, 0));// 2010
31c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31c10 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
31c20 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
31c30 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
31c40 6e 2e 4e 6f 56 73 32 30 31 32 29 0d 0a 20 20 20  n.NoVs2012)..   
31c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31c60 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
31c70 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
31c80 28 31 31 2c 20 30 29 29 3b 2f 2f 20 32 30 31 32  (11, 0));// 2012
31c90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
31ca0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
31cb0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
31cc0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
31cd0 6e 2e 4e 6f 56 73 32 30 31 33 29 0d 0a 20 20 20  n.NoVs2013)..   
31ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31cf0 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73   vsList.Versions
31d00 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
31d10 28 31 32 2c 20 30 29 29 3b 2f 2f 20 32 30 31 33  (12, 0));// 2013
31d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
31d30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
31d40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
31d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
31d90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
31da0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
31db0 65 56 73 56 65 72 73 69 6f 6e 44 69 72 65 63 74  eVsVersionDirect
31dc0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
31dd0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
31de0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
31df0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
31e00 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
31e10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
31e20 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
31e30 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72      bool perUser
31e40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
31e50 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20  ool wow64,..    
31e60 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
31e70 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
31e80 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
31e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
31ea0 20 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44   string installD
31eb0 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
31ec0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
31ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31ee0 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
31ef0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
31f00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
31f10 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
31f20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
31f30 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
31f40 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
31f50 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
31f60 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
31f70 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
31f80 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
31f90 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
31fa0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fc0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
31fd0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
31fe0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
31ff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
32010 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32030 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32040 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
32050 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
32060 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  e = RegistryHelp
32070 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.GetValue(..  
32080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32090 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44    key, "InstallD
320a0 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49  ir", null, whatI
320b0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
320c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
320d0 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73  if (!(value is s
320e0 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  tring))..       
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32100 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
32110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
32120 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
32130 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d   (string)value;.
32140 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32150 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
32160 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
32170 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
32180 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
32190 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
321a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
321b0 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
321c0 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d  sts(directory)).
321d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
321e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
321f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
32200 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
32210 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
32220 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
32230 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32240 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
32250 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
32260 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
32270 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
32280 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61 6c           "Visual
32290 20 53 74 75 64 69 6f 20 7b 30 7d 20 66 6f 75 6e   Studio {0} foun
322a0 64 20 69 6e 20 64 69 72 65 63 74 6f 72 79 20 7b  d in directory {
322b0 31 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  1}.",..         
322c0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
322d0 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
322e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72  , ForDisplay(dir
322f0 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20  ectory)),..     
32300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
32310 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
32320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32330 20 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f    installDirecto
32340 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d  ry = directory;.
32350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32360 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
32370 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32380 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
32390 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
323a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
323d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
323e0 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
323f0 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
32400 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
32410 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
32420 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
32430 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
32440 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
32450 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
32460 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20  y registry,..   
32470 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20           VsList 
32480 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  vsList,..       
32490 20 20 20 20 20 56 69 73 75 61 6c 53 74 75 64 69       VisualStudi
324a0 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  oRegistryCallbac
324b0 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
324c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
324d0 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
324e0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
324f0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
32500 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
32510 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
32520 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
32530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
32540 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
32550 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
32560 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
32570 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
32580 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
32590 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
325a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
325b0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
325c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
325d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
325e0 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
325f0 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
32600 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32610 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
32620 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
32630 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
32640 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32650 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
32660 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32670 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20       if (vsList 
32680 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
32690 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
326a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
326b0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73   "invalid VS lis
326c0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
326d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
326e0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
326f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
32700 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
32710 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 4c 69 73   rootKey = vsLis
32720 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
32730 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
32740 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
32750 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32770 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
32780 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
32790 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
327a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
327b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
327c0 20 20 20 20 20 20 20 20 69 66 20 28 21 49 73 53          if (!IsS
327d0 75 70 70 6f 72 74 65 64 52 6f 6f 74 4b 65 79 28  upportedRootKey(
327e0 72 65 67 69 73 74 72 79 2c 20 72 6f 6f 74 4b 65  registry, rootKe
327f0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
32800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
32810 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
32820 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
32830 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
32840 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
32850 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32860 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
32870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32880 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
32890 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
328a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
328b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
328c0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53    error = "no VS
328d0 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
328e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
328f0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
32900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32910 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
32920 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
32930 76 73 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 4c  vsVersion in vsL
32940 69 73 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a 20  ist.Versions).. 
32950 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
32970 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
32980 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
32990 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20  ty.Lower,..     
329a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
329b0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
329c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
329d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
329e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
329f0 20 22 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30   "vsVersion = {0
32a00 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76  }", ForDisplay(v
32a10 73 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  sVersion)),..   
32a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32a30 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
32a40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32a50 20 20 20 20 73 74 72 69 6e 67 20 69 6e 73 74 61      string insta
32a60 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  llDirectory = nu
32a70 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
32a80 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65         if (!Have
32a90 56 73 56 65 72 73 69 6f 6e 44 69 72 65 63 74 6f  VsVersionDirecto
32aa0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
32ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
32ac0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
32ad0 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65 72   suffix, perUser
32ae0 2c 20 77 6f 77 36 34 2c 20 77 68 61 74 49 66 2c  , wow64, whatIf,
32af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32b00 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
32b10 65 2c 20 72 65 66 20 69 6e 73 74 61 6c 6c 44 69  e, ref installDi
32b20 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
32b30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
32b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b50 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
32b60 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
32b70 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
32b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b90 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
32ba0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
32bb0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
32bc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
32bd0 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75             "Visu
32be0 61 6c 20 53 74 75 64 69 6f 20 7b 30 7d 20 6e 6f  al Studio {0} no
32bf0 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e  t found, skippin
32c00 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  g...",..        
32c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
32c30 73 69 6f 6e 29 29 2c 20 74 72 61 63 65 43 61 74  sion)), traceCat
32c40 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
32c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
32c60 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
32c70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
32c90 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
32ca0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
32cb0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
32cc0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
32cd0 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c         if (!call
32ce0 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  back(..         
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32d00 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
32d10 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
32d20 67 65 2c 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ge, installDirec
32d30 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
32d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
32d50 6c 69 65 6e 74 44 61 74 61 2c 20 70 65 72 55 73  lientData, perUs
32d60 65 72 2c 20 77 6f 77 36 34 2c 20 74 68 72 6f 77  er, wow64, throw
32d70 4f 6e 4d 69 73 73 69 6e 67 2c 20 77 68 61 74 49  OnMissing, whatI
32d80 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
32d90 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
32da0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ose, ref error))
32db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32dc0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
32dd0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
32de0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
32df0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
32e00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
32e10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
32e20 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
32e30 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
32e40 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
32e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
32ea0 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67    #region Config
32eb0 75 72 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e  uration File Han
32ec0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 5b  dling..        [
32ed0 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
32ee0 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
32ef0 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
32f00 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
32f10 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76  c bool AddDbProv
32f20 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
32f30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
32f40 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
32f50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
32f60 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20  nvariantName,.. 
32f70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
32f80 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
32f90 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
32fa0 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
32fb0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
32fc0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
32fd0 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
32fe0 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
32ff0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
33000 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
33010 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
33020 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
33030 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
33040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
33050 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
33060 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
33070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33080 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79        bool dirty
33090 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
330a0 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65         XmlDocume
330b0 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65  nt document = ne
330c0 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b  w XmlDocument();
330d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
330e0 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76  document.Preserv
330f0 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72  eWhitespace = tr
33100 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
33110 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66   document.Load(f
33120 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
33130 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
33140 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d  ent addElement =
33150 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
33160 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20  SingleNode(..   
33170 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
33180 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68  ing.Format(XPath
33190 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69  ForAddElement, i
331a0 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 29 20 61  nvariantName)) a
331b0 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
331c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
331d0 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e  (addElement == n
331e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
331f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
33200 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c       string[] el
33210 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a  ementNames = {..
33220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33230 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61      "system.data
33240 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46 61  ", "DbProviderFa
33250 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20  ctories"..      
33260 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
33270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33280 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69  XmlElement previ
33290 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  ousElement =..  
332a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
332b0 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d    document.Docum
332c0 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63  entElement; /* c
332d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d  onfiguration */.
332e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
332f0 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
33300 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69  ng elementName i
33310 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d  n elementNames).
33320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33340 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
33350 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65  nt = previousEle
33360 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
33370 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20  eNode(..        
33380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33390 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20  elementName) as 
333a0 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
333b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333c0 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65 6e     if (addElemen
333d0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
333e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
333f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33400 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
33410 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
33420 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d  .CreateElement(.
33430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
33450 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e 67  mentName, String
33460 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20  .Empty);....    
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
33490 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28  ent.AppendChild(
334a0 61 64 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20  addElement);..  
334b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
334c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
334d0 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
334e0 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 61 64 64  ousElement = add
334f0 45 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20  Element;..      
33500 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
33510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
33520 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  ddElement = docu
33530 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
33540 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
33550 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20           "add", 
33560 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
33570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33580 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
33590 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64  t.AppendChild(ad
335a0 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20  dElement);....  
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
335c0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
335d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
335e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
335f0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64  tring.Equals(add
33600 45 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  Element.GetAttri
33610 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20  bute("name"),.. 
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33630 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43     name, StringC
33640 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
33650 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
33660 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
33670 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53      addElement.S
33680 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
33690 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20  e", name);..    
336a0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
336b0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
336c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
336d0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
336e0 69 6e 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c  ing.Equals(addEl
336f0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
33700 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c  te("invariant"),
33710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33720 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 4e        invariantN
33730 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
33740 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
33750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
33760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33770 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
33780 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
33790 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61  nt", invariantNa
337a0 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
337b0 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
337c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
337d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
337e0 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71    if (!String.Eq
337f0 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e  uals(addElement.
33800 47 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65  GetAttribute("de
33810 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20  scription"),..  
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53    description, S
33840 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
33850 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20  Ordinal))..     
33860 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33870 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c 65            addEle
33880 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74  ment.SetAttribut
33890 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c  e("description",
338a0 20 64 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a   description);..
338b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338c0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
338d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
338e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
338f0 6e 67 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20  ng fullTypeName 
33900 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
33910 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20  "{0}, {1}",..   
33920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
33930 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
33940 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
33950 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
33960 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65  .Equals(addEleme
33970 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
33980 22 74 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20  "type"),..      
33990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 75                fu
339a0 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69  llTypeName, Stri
339b0 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
339c0 69 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  inal))..        
339d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
339e0 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e         addElemen
339f0 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
33a00 74 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e  type", fullTypeN
33a10 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
33a20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
33a30 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
33a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33a50 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20     if (dirty || 
33a60 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
33a70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33a80 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
33a90 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
33aa0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
33ab0 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
33ac0 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
33ad0 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
33ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33af0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
33b00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
33b10 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
33b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b30 20 20 20 20 20 20 20 22 61 64 64 45 6c 65 6d 65         "addEleme
33b40 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  nt = {0}", ForDi
33b50 73 70 6c 61 79 28 61 64 64 45 6c 65 6d 65 6e 74  splay(addElement
33b60 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
33b70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
33b80 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
33b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ba0 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
33bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bc0 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
33bd0 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
33bf0 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a  lesModified++;..
33c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33c10 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
33c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
33c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
33c40 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
33c50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33c60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
33c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33ca0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
33cb0 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
33cc0 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
33cd0 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
33ce0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
33cf0 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
33d00 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
33d10 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
33d20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
33d30 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33d40 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
33d50 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
33d60 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
33d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33d80 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
33d90 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
33da0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
33db0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
33dc0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
33dd0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
33de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
33df0 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b  l dirty = false;
33e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
33e10 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65  lDocument docume
33e20 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75  nt = new XmlDocu
33e30 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ment();....     
33e40 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
33e50 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61  PreserveWhitespa
33e60 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ce = true;..    
33e70 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
33e80 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b  .Load(fileName);
33e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33ea0 58 6d 6c 45 6c 65 6d 65 6e 74 20 61 64 64 45 6c  XmlElement addEl
33eb0 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
33ec0 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
33ed0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
33ee0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
33ef0 74 28 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65  t(XPathForAddEle
33f00 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e  ment, invariantN
33f10 61 6d 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ame)) as XmlElem
33f20 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
33f30 20 20 20 20 69 66 20 28 61 64 64 45 6c 65 6d 65      if (addEleme
33f40 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  nt != null)..   
33f50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
33f60 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
33f70 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
33f80 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 61 64  e.RemoveChild(ad
33f90 64 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  dElement);..    
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
33fb0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
33fc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
33fd0 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
33fe0 6e 74 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74  nt removeElement
33ff0 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
34000 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
34010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
34020 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50 61  tring.Format(XPa
34030 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65  thForRemoveEleme
34040 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  nt, invariantNam
34050 65 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  e)) as XmlElemen
34060 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
34070 20 20 69 66 20 28 72 65 6d 6f 76 65 45 6c 65 6d    if (removeElem
34080 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent != null)..  
34090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
340a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d               rem
340b0 6f 76 65 45 6c 65 6d 65 6e 74 2e 50 61 72 65 6e  oveElement.Paren
340c0 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
340d0 64 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 29  d(removeElement)
340e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
340f0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
34100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
34110 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
34120 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
34130 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
34140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34150 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
34160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34170 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
34180 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
34190 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
341a0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
341b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
341c0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
341d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
341e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
341f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34200 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d     "addElement =
34210 20 7b 30 7d 2c 20 72 65 6d 6f 76 65 45 6c 65 6d   {0}, removeElem
34220 65 6e 74 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ent = {1}",..   
34230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34240 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
34250 61 64 64 45 6c 65 6d 65 6e 74 29 2c 20 46 6f 72  addElement), For
34260 44 69 73 70 6c 61 79 28 72 65 6d 6f 76 65 45 6c  Display(removeEl
34270 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20  ement)),..      
34280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34290 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
342a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
342b0 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
342c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
342d0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
342e0 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d  Save(fileName);.
342f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34300 20 20 20 66 69 6c 65 73 4d 6f 64 69 66 69 65 64     filesModified
34310 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
34320 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
34330 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
34340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
34350 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
34360 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
34370 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
34380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
343b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
343c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
343d0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
343e0 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46 61  cessDbProviderFa
343f0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
34400 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
34410 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
34420 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
34430 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ntName,..       
34440 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
34450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
34460 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
34470 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
34480 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
34490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
344a0 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
344b0 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
344c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
344d0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
344e0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
344f0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
34500 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
34510 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
34520 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
34530 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68           bool th
34540 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20  rowOnMissing,.. 
34550 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34560 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
34570 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
34580 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
34590 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
345a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
345b0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
345c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
345d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
345e0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
345f0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
34600 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
34610 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
34620 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
34630 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
34640 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
34650 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34660 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34670 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
34680 72 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61  rk config callba
34690 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
346a0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
346b0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
346c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
346d0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
346e0 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
346f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34700 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
34710 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
34720 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
34730 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
34740 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , invariantName,
34750 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
34760 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
34770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34780 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d    ref error) &&.
34790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
347a0 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61   AddDbProviderFa
347b0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
347c0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
347d0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e  Name, invariantN
347e0 61 6d 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ame, name, descr
347f0 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
34800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
34810 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e         assemblyN
34820 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
34830 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c  bose, ref saved,
34840 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
34850 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
34860 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
34870 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34890 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f  turn RemoveDbPro
348a0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
348b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
348c0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
348d0 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77 68 61 74  ariantName, what
348e0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
348f0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
34910 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
34920 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
34930 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
34940 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
34950 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
34960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34990 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
349a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73       #region Ass
349b0 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61  embly Folders Ha
349c0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
349d0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
349e0 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
349f0 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
34a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34a10 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
34a20 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
34a30 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
34a40 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
34a50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
34a60 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
34a70 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70            bool p
34a80 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20  erUser,..       
34a90 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d       bool wow64.
34aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
34ab0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
34ac0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
34ad0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
34ae0 54 68 69 73 20 72 65 67 69 73 74 72 79 20 6b 65  This registry ke
34af0 79 20 61 70 70 65 61 72 73 20 74 6f 20 61 6c 77  y appears to alw
34b00 61 79 73 20 62 65 20 33 32 2d 62 69 74 20 6f 6e  ays be 32-bit on
34b10 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
34b20 2f 2f 20 20 20 20 20 20 20 28 69 2e 65 2e 20 70  //       (i.e. p
34b30 72 6f 62 61 62 6c 79 20 62 65 63 61 75 73 65 20  robably because 
34b40 69 74 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  it is only used 
34b50 62 79 20 56 69 73 75 61 6c 0d 0a 20 20 20 20 20  by Visual..     
34b60 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
34b70 53 74 75 64 69 6f 2c 20 77 68 69 63 68 20 69 73  Studio, which is
34b80 20 63 75 72 72 65 6e 74 6c 79 20 61 6c 77 61 79   currently alway
34b90 73 20 33 32 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d  s 32-bit only)..
34ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
34bb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
34bc0 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74  ing format = !St
34bd0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
34be0 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ty(platformName)
34bf0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
34c00 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73      "{0}\\Micros
34c10 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c  oft\\{1}\\v{2}\\
34c20 7b 33 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {3}\\AssemblyFol
34c30 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20  dersEx" :..     
34c40 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 5c             "{0}\
34c50 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c  \Microsoft\\{1}\
34c60 5c 76 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46  \v{2}\\AssemblyF
34c70 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20  oldersEx";....  
34c80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
34c90 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66   String.Format(f
34ca0 6f 72 6d 61 74 2c 20 47 65 74 52 6f 6f 74 4b 65  ormat, GetRootKe
34cb0 79 4e 61 6d 65 28 70 65 72 55 73 65 72 2c 20 77  yName(perUser, w
34cc0 6f 77 36 34 29 2c 0d 0a 20 20 20 20 20 20 20 20  ow64),..        
34cd0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
34ce0 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
34cf0 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
34d00 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  mName);..       
34d10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
34d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
34d70 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
34d80 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62  bool AddToAssemb
34d90 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
34da0 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
34db0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
34dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
34dd0 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
34de0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
34df0 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
34e00 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
34e10 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
34e20 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
34e30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34e40 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
34e50 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34e60 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
34e70 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
34e80 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
34e90 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d      bool wow64,.
34ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
34eb0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
34ec0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
34ed0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
34ee0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
34ef0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
34f00 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
34f10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34f20 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73   keyName = GetAs
34f30 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
34f40 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
34f50 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
34f60 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
34f70 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
34f80 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a  Name, perUser,..
34f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fa0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
34fb0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
34fc0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
34fd0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
34fe0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
34ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35000 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
35010 4e 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74  Name, true, what
35020 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
35030 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35050 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35080 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
35090 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
350a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
350b0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
350c0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
350d0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
350e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
350f0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
35100 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
35110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35120 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
35130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35140 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
35150 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
35160 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
35170 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
35180 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
35190 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
351b0 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
351c0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
351d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
351e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
351f0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
35200 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
35210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35230 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35240 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
35250 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35270 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
35280 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
35290 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
352a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352b0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62          key, sub
352c0 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  KeyName);....   
352d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
352f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
35300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
35310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35320 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35330 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c     subKey, null,
35360 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74   directory, what
35370 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
35380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
35390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
353a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
353b0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
353c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
353d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
353e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
353f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35410 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
35420 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
35430 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46  tic bool RemoveF
35440 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
35450 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
35460 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
35470 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
35480 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
35490 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
354a0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
354b0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
354c0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
354d0 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
354e0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
354f0 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
35500 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
35510 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
35520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
35530 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
35540 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
35550 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
35560 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
35570 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
35580 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
35590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
355a0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
355b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
355c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
355d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
355e0 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62  Name = GetAssemb
355f0 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
35600 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35610 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
35620 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
35630 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
35640 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
35650 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
35660 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
35670 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
35680 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
35690 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
356a0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
356b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356c0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
356d0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
356e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
356f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
35700 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
35710 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
35720 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
35730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35740 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
35750 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
35760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35770 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
35780 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
35790 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
357a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357b0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
357c0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
357d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
357e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35810 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35820 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d  r.DeleteSubKey(.
35830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35840 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79       key, subKey
35850 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  Name, throwOnMis
35860 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 20 76 65  sing, whatIf, ve
35870 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
35880 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
35890 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
358a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
358b0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
358c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
358f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35900 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
35910 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
35920 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46  ProcessAssemblyF
35930 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
35940 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
35950 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
35960 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
35970 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  g frameworkName,
35980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
35990 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
359a0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
359b0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
359c0 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
359d0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
359e0 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
359f0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
35a00 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
35a10 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
35a20 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
35a30 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
35a40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
35a50 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a  hrowOnMissing,..
35a60 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
35a70 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
35a80 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
35a90 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
35aa0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
35ab0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
35ac0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
35ad0 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
35ae0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
35af0 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
35b00 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
35b10 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
35b20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
35b30 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
35b40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35b50 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
35b60 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
35b70 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63 6b 20  mework callback 
35b80 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20  data";..        
35b90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
35ba0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
35bb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
35bc0 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d      if (pair.Y).
35bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35bf0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f  return RemoveFro
35c00 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  mAssemblyFolders
35c10 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
35c20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
35c30 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
35c40 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
35c50 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a   platformName,..
35c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c70 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a 65 63      LegacyProjec
35c80 74 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20  tName, perUser, 
35c90 77 6f 77 36 34 2c 20 66 61 6c 73 65 2c 20 77 68  wow64, false, wh
35ca0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
35cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cc0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 20 26      ref error) &
35cd0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
35ce0 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79     AddToAssembly
35cf0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
35d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
35d10 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
35d20 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
35d30 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
35d40 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
35d50 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
35d60 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20  ctName, pair.X, 
35d70 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
35d80 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
35d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35da0 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
35db0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
35dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
35dd0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
35de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35df0 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
35e00 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64  FromAssemblyFold
35e10 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
35e20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
35e30 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
35e40 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
35e50 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
35e60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
35e70 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61         ProjectNa
35e80 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  me, perUser, wow
35e90 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  64, throwOnMissi
35ea0 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ng, whatIf,..   
35eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ec0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
35ed0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
35ee0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
35ef0 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
35f00 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
35f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f50 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
35f60 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
35f70 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67   Studio Handling
35f80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
35f90 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
35fa0 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65  GetVsRootKeyName
35fb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  (..            b
35fc0 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
35fd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
35fe0 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20  ow64..          
35ff0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
36000 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36010 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
36020 28 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74  ("{0}\\Microsoft
36030 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 22 2c  \\VisualStudio",
36040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36050 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
36060 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
36070 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
36080 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
36090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
360d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
360e0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
360f0 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d  g GetVsKeyName(.
36100 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
36110 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
36120 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
36130 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
36140 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65           bool pe
36150 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
36160 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a      bool wow64..
36170 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
36180 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36190 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
361a0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
361b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
361c0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
361d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
361e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
361f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36200 20 22 7b 30 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20   "{0}\\{1}{2}", 
36210 47 65 74 56 73 52 6f 6f 74 4b 65 79 4e 61 6d 65  GetVsRootKeyName
36220 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
36230 2c 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  , vsVersion,..  
36240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
36250 66 66 69 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffix);..        
36260 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
36270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
362b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
362c0 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
362d0 74 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63  tudio Data Sourc
362e0 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  e Handling..    
362f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
36300 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74  ic bool AddVsDat
36310 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
36320 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
36330 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
36340 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
36350 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
36360 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
36370 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20  ng suffix,..    
36380 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
36390 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
363a0 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
363b0 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
363c0 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20   bool wow64,..  
363d0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
363e0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
363f0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
36400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
36410 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
36420 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
36430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36440 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
36450 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
36460 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
36480 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
36490 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
364a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
364b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
364c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
364d0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
364e0 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
364f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
36510 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
36520 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
36530 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
36540 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
36550 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
36560 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
36570 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
36580 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
36590 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73 65  , suffix, perUse
365a0 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20  r, wow64);....  
365b0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
365c0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
365d0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
365e0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
365f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
36600 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
36610 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
36620 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
36630 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36650 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
36660 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
36670 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36680 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
36690 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
366a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
366b0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
366c0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
366d0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
366e0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
366f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
36700 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
36710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
36720 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
36730 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
36740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36750 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
36760 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
36770 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
36780 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
36790 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
367a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
367b0 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
367c0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
367d0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
367e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
367f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36800 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
36810 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
36820 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36840 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
36850 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
36860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36870 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
36880 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
36890 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
368a0 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
368d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
368e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
368f0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
36900 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36920 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
36930 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
36940 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20  aSourceKey =..  
36950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36960 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
36970 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
36980 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
36990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369a0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
369b0 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
369c0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
369d0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
369e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
369f0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
36a00 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
36a10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
36a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a30 20 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75       if (dataSou
36a40 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  rceKey == null).
36a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36a60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
36a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a80 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
36a90 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
36aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ac0 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
36ad0 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
36ae0 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
36af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b10 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
36b20 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
36b30 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
36b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
36b60 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ba0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
36bb0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bd0 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
36be0 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
36bf0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
36c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c10 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61         "{0} Data
36c20 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a  base File", Proj
36c30 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  ectName), whatIf
36c40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
36c60 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
36c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
36c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ca0 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 76 61  // NOTE: This va
36cb0 6c 75 65 20 69 73 20 6e 65 77 20 61 73 20 6f 66  lue is new as of
36cc0 20 31 2e 30 2e 38 33 2e 30 2e 0d 0a 20 20 20 20   1.0.83.0...    
36cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ce0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
36cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d00 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
36d10 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
36d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d30 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
36d40 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 50 72 6f  Key, "DefaultPro
36d50 76 69 64 65 72 22 2c 0d 0a 20 20 20 20 20 20 20  vider",..       
36d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36d70 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74       package.Dat
36d80 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74  aProviderId.ToSt
36d90 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
36da0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
36db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
36dc0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
36dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36de0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
36df0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
36e00 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72  eSubKey(dataSour
36e10 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ceKey,..        
36e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e30 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
36e40 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f  t("SupportingPro
36e50 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20  viders\\{0}",.. 
36e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e70 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
36e80 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
36e90 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
36ea0 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20  ormat)),..      
36eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ec0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
36ed0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
36ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f00 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
36f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
36f20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
36f30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
36f40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
36f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
36f90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
36fa0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
36fb0 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
36fc0 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
36fd0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
36fe0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
36ff0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
37000 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
37010 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c 0d   string suffix,.
37020 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
37030 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
37040 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
37050 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
37060 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
37070 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37080 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
37090 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
370a0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
370b0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
370c0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
370d0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
370e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
370f0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
37100 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
37110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
37120 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
37130 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
37140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37150 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
37160 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
37170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
37180 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
37190 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
371a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
371b0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
371c0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
371d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
371e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
371f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
37200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
37210 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
37220 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
37230 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
37240 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 3b 0d  erUser, wow64);.
37250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
37260 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
37270 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
37280 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
37290 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
372a0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
372b0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
372c0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
372d0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
372e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
372f0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
37300 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37310 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
37320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37330 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
37340 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
37350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37360 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
37370 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
37380 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
37390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
373a0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
373b0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
373c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
373d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
373e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
373f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37400 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
37410 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
37420 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
37430 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
37440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37450 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
37460 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
37470 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
37480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37490 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
374a0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
374b0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
374c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
374d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
374e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
374f0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
37500 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
37510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37520 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
37530 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
37540 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
37550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
37570 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
37580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37590 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
375a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
375c0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
375d0 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
375e0 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
375f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37600 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
37610 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
37620 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
37630 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20  ormat),..       
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
37660 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
37670 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
37680 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37690 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
376a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
376b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
376c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
376f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
37700 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
37710 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
37720 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75 72 63  ocessVsDataSourc
37730 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
37740 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
37750 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
37760 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
37770 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
37780 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
37790 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
377a0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
377b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
377c0 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
377d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
377e0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
377f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37800 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
37810 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
37820 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
37830 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
37840 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
37850 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
37860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
37870 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
37880 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
37890 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
378a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
378b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
378c0 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
378d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
378e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
378f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
37900 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
37910 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
37920 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
37930 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
37940 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
37950 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
37960 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
37970 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
37980 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
37990 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
379a0 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
379b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
379c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
379d0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
379e0 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
379f0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
37a00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
37a10 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
37a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
37a30 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
37a40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
37a50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37a60 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
37a70 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
37a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
37a90 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
37aa0 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61  n, suffix, packa
37ab0 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ge, perUser, wow
37ac0 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64,..           
37ad0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
37ae0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
37af0 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
37b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37b10 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
37b20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
37b40 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
37b50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
37b60 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
37b70 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69  vsVersion, suffi
37b80 78 2c 20 70 61 63 6b 61 67 65 2c 20 70 65 72 55  x, package, perU
37b90 73 65 72 2c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  ser, wow64,..   
37ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37bb0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
37bc0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
37bd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
37be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
37bf0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
37c00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
37c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
37c50 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
37c60 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
37c70 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 61  Data Provider Ha
37c80 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
37c90 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
37ca0 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f  ool AddVsDataPro
37cb0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
37cc0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
37cd0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
37ce0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
37cf0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
37d00 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
37d10 20 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20   suffix,..      
37d20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
37d30 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
37d40 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
37d50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
37d60 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
37d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
37d80 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
37d90 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
37da0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
37db0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
37dc0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
37dd0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
37de0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
37df0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37e00 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
37e10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
37e20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37e30 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
37e40 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
37e50 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
37e60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37e70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
37e80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37e90 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
37ea0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
37eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
37ec0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
37ed0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
37ee0 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
37ef0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
37f00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
37f10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
37f20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
37f30 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
37f40 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
37f50 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
37f60 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
37f70 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
37f80 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
37f90 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
37fa0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fc0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
37fd0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
37fe0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
37ff0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
38010 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
38020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
38040 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
38050 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 22 63 6f 75 6c 64 20 6e 6f         "could no
38080 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
38090 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
380a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
380b0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
380c0 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
380f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38100 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
38110 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
38120 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
38130 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
38140 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
38150 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
38160 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
38170 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  "DataProviders",
38180 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
38190 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
381a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
381b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381c0 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
381d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
381e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
381f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38200 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
38210 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
38240 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
38250 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61  y key: {0}\\Data
38260 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20  Providers",..   
38270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38280 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
38290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
382a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
382b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
382c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
382d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
382e0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
382f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
38300 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d 0a  aProviderKey =..
38310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38320 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
38330 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
38340 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d  eSubKey(subKey,.
38350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38360 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
38370 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
38380 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
38390 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
383a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383b0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
383c0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
383d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
383e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
383f0 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74           if (dat
38400 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20  aProviderKey == 
38410 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
38420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
38430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
38450 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
38460 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
38470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38480 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
38490 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
384a0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
384b0 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
384c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384d0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
384e0 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
384f0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
38500 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t));....        
38510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38520 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
38530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
38540 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
38580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
385a0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 6e  taProviderKey, n
385b0 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f 6e  ull, Description
385c0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
385d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
385e0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
385f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38600 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
38610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38620 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
38630 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e   This value is n
38640 65 77 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e  ew as of 1.0.83.
38650 30 2e 20 20 48 6f 77 65 76 65 72 2c 0d 0a 20 20  0.  However,..  
38660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38670 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
38680 74 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65  t should only be
38690 20 73 65 74 20 69 66 20 74 68 65 20 70 61 63 6b   set if the pack
386a0 61 67 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  age assembly..  
386b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386c0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
386d0 6e 64 20 61 6c 6c 20 74 68 65 20 61 73 73 65 6d  nd all the assem
386e0 62 6c 69 65 73 20 69 74 20 72 65 66 65 72 73 20  blies it refers 
386f0 74 6f 20 61 72 65 20 62 65 69 6e 67 0d 0a 20 20  to are being..  
38700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38710 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70        //       p
38720 6c 61 63 65 64 20 69 6e 74 6f 20 74 68 65 20 67  laced into the g
38730 6c 6f 62 61 6c 20 61 73 73 65 6d 62 6c 79 20 63  lobal assembly c
38740 61 63 68 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  ache...         
38750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
38760 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
38770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
38780 61 63 6b 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73  ackage.GlobalAss
38790 65 6d 62 6c 79 43 61 63 68 65 29 0d 0a 20 20 20  emblyCache)..   
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
387c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387d0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
387e0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
387f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
38810 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
38820 41 73 73 65 6d 62 6c 79 22 2c 0d 0a 20 20 20 20  Assembly",..    
38830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3884