System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 93af3dff961801c35f52fdc3ab2711ecba7e120a:


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 46 6c 61 67 73 0d 0a 20 20 20 20  rmal Flags..    
0d40: 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d      None = 0x0,.
0d50: 0a 20 20 20 20 20 20 20 20 47 6c 6f 62 61 6c 41  .        GlobalA
0d60: 73 73 65 6d 62 6c 79 43 61 63 68 65 20 3d 20 30  ssemblyCache = 0
0d70: 78 31 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73  x1,..        Ass
0d80: 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30  emblyFolders = 0
0d90: 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50  x2,..        DbP
0da0: 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d  roviderFactory =
0db0: 20 30 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56   0x4,..        V
0dc0: 73 50 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d  sPackage = 0x8,.
0dd0: 0a 20 20 20 20 20 20 20 20 56 73 50 61 63 6b 61  .        VsPacka
0de0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0df0: 43 61 63 68 65 20 3d 20 30 78 31 30 2c 0d 0a 20  Cache = 0x10,.. 
0e00: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0e10: 72 63 65 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  rce = 0x20,..   
0e20: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0e30: 64 65 72 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20  der = 0x40,..   
0e40: 20 20 20 20 20 56 73 44 65 76 45 6e 76 53 65 74       VsDevEnvSet
0e50: 75 70 20 3d 20 30 78 38 30 2c 0d 0a 20 20 20 20  up = 0x80,..    
0e60: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
0e70: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
0e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
0ed0: 67 69 6f 6e 20 43 6f 6d 70 6f 73 69 74 65 20 46  gion Composite F
0ee0: 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 46 72  lags..        Fr
0ef0: 61 6d 65 77 6f 72 6b 20 3d 20 47 6c 6f 62 61 6c  amework = Global
0f00: 41 73 73 65 6d 62 6c 79 43 61 63 68 65 20 7c 20  AssemblyCache | 
0f10: 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20  AssemblyFolders 
0f20: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
0f30: 20 20 20 20 20 20 20 44 62 50 72 6f 76 69 64 65         DbProvide
0f40: 72 46 61 63 74 6f 72 79 2c 0d 0a 0d 0a 20 20 20  rFactory,....   
0f50: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
0fa0: 20 20 20 20 20 20 20 20 56 73 20 3d 20 56 73 50          Vs = VsP
0fb0: 61 63 6b 61 67 65 20 7c 20 56 73 50 61 63 6b 61  ackage | VsPacka
0fc0: 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79  geGlobalAssembly
0fd0: 43 61 63 68 65 20 7c 20 56 73 44 61 74 61 53 6f  Cache | VsDataSo
0fe0: 75 72 63 65 20 7c 0d 0a 20 20 20 20 20 20 20 20  urce |..        
0ff0: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
1000: 64 65 72 20 7c 20 56 73 44 65 76 45 6e 76 53 65  der | VsDevEnvSe
1010: 74 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tup,....        
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1060: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1070: 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d 65 77 6f     All = Framewo
1080: 72 6b 20 7c 20 56 73 2c 0d 0a 0d 0a 20 20 20 20  rk | Vs,....    
1090: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
10e0: 20 20 20 20 20 20 20 41 6c 6c 45 78 63 65 70 74         AllExcept
10f0: 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61  GlobalAssemblyCa
1100: 63 68 65 20 3d 20 41 6c 6c 20 26 20 7e 28 47 6c  che = All & ~(Gl
1110: 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
1120: 65 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e |..           
1130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1140: 20 20 20 20 20 20 20 20 20 20 20 20 56 73 50 61              VsPa
1150: 63 6b 61 67 65 47 6c 6f 62 61 6c 41 73 73 65 6d  ckageGlobalAssem
1160: 62 6c 79 43 61 63 68 65 29 2c 0d 0a 20 20 20 20  blyCache),..    
1170: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1180: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 65 66  /....        Def
11e0: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
11f0: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
1200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
1250: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
1260: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
1270: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
1280: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
1290: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
12a0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
12b0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
12c0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
12d0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
12e0: 6d 4c 6f 77 20 3d 20 30 78 38 2c 0d 0a 20 20 20  mLow = 0x8,..   
12f0: 20 20 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78       Medium = 0x
1300: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64  10,..        Med
1310: 69 75 6d 48 69 67 68 20 3d 20 30 78 32 30 2c 0d  iumHigh = 0x20,.
1320: 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d 20  .        High = 
1330: 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20 20 48  0x40,..        H
1340: 69 67 68 65 72 20 3d 20 30 78 38 30 2c 0d 0a 20  igher = 0x80,.. 
1350: 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20 3d         Highest =
1360: 20 30 78 31 30 30 2c 0d 0a 20 20 20 20 20 20 20   0x100,..       
1370: 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75   Default = Mediu
1380: 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  m..    }..    #e
1390: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
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 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13f0: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
1400: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 23 69 66 20  ller Class..#if 
1410: 4e 45 54 5f 34 30 20 7c 7c 20 4e 45 54 5f 34 35  NET_40 || NET_45
1420: 20 7c 7c 20 4e 45 54 5f 34 35 31 0d 0a 20 20 20   || NET_451..   
1430: 20 5b 53 65 63 75 72 69 74 79 43 72 69 74 69 63   [SecurityCritic
1440: 61 6c 28 29 5d 0d 0a 23 65 6c 73 65 0d 0a 20 20  al()]..#else..  
1450: 20 20 5b 53 65 63 75 72 69 74 79 50 65 72 6d 69    [SecurityPermi
1460: 73 73 69 6f 6e 28 53 65 63 75 72 69 74 79 41 63  ssion(SecurityAc
1470: 74 69 6f 6e 2e 4c 69 6e 6b 44 65 6d 61 6e 64 2c  tion.LinkDemand,
1480: 20 55 6e 6d 61 6e 61 67 65 64 43 6f 64 65 20 3d   UnmanagedCode =
1490: 20 74 72 75 65 29 5d 0d 0a 23 65 6e 64 69 66 0d   true)]..#endif.
14a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
14b0: 61 74 69 63 20 63 6c 61 73 73 20 49 6e 73 74 61  atic class Insta
14c0: 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ller..    {..   
14d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 55 6e 73       #region Uns
14e0: 61 66 65 20 4e 61 74 69 76 65 20 4d 65 74 68 6f  afe Native Metho
14f0: 64 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ds Class..      
1500: 20 20 5b 53 75 70 70 72 65 73 73 55 6e 6d 61 6e    [SuppressUnman
1510: 61 67 65 64 43 6f 64 65 53 65 63 75 72 69 74 79  agedCodeSecurity
1520: 28 29 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ()]..        pri
1530: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
1540: 73 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  s UnsafeNativeMe
1550: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 7b  thods..        {
1560: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
1570: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1580: 6f 6e 20 4e 61 74 69 76 65 20 57 69 6e 33 32 20  on Native Win32 
1590: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..     
15a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
15b0: 6f 6e 73 74 20 69 6e 74 20 4d 41 58 5f 50 41 54  onst int MAX_PAT
15c0: 48 20 3d 20 32 36 30 3b 0d 0a 0d 0a 20 20 20 20  H = 260;....    
15d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1620: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1630: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 43 53 49  te const int CSI
1640: 44 4c 5f 53 59 53 54 45 4d 58 38 36 20 3d 20 30  DL_SYSTEMX86 = 0
1650: 78 30 30 32 39 3b 0d 0a 0d 0a 20 20 20 20 20 20  x0029;....      
1660: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16b0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
16c0: 20 63 6f 6e 73 74 20 69 6e 74 20 53 48 47 46 50   const int SHGFP
16d0: 5f 54 59 50 45 5f 43 55 52 52 45 4e 54 20 3d 20  _TYPE_CURRENT = 
16e0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
16f0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1740: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
1750: 73 74 20 69 6e 74 20 53 5f 4f 4b 20 3d 20 30 3b  st int S_OK = 0;
1760: 20 2f 2a 20 48 52 45 53 55 4c 54 20 2a 2f 0d 0a   /* HRESULT */..
1770: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1780: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17e0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17f0: 20 4e 61 74 69 76 65 20 57 69 6e 64 6f 77 73 20   Native Windows 
1800: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
1810: 20 20 20 20 20 5b 44 6c 6c 49 6d 70 6f 72 74 28       [DllImport(
1820: 22 73 68 66 6f 6c 64 65 72 2e 64 6c 6c 22 2c 0d  "shfolder.dll",.
1830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1840: 20 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69   CallingConventi
1850: 6f 6e 20 3d 20 43 61 6c 6c 69 6e 67 43 6f 6e 76  on = CallingConv
1860: 65 6e 74 69 6f 6e 2e 57 69 6e 61 70 69 2c 0d 0a  ention.Winapi,..
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 43 68 61 72 53 65 74 20 3d 20 43 68 61 72 53 65  CharSet = CharSe
1890: 74 2e 41 75 74 6f 2c 20 42 65 73 74 46 69 74 4d  t.Auto, BestFitM
18a0: 61 70 70 69 6e 67 20 3d 20 66 61 6c 73 65 2c 0d  apping = false,.
18b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18c0: 20 54 68 72 6f 77 4f 6e 55 6e 6d 61 70 70 61 62   ThrowOnUnmappab
18d0: 6c 65 43 68 61 72 20 3d 20 74 72 75 65 2c 20 53  leChar = true, S
18e0: 65 74 4c 61 73 74 45 72 72 6f 72 20 3d 20 74 72  etLastError = tr
18f0: 75 65 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ue)]..          
1900: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1910: 20 65 78 74 65 72 6e 20 69 6e 74 20 53 48 47 65   extern int SHGe
1920: 74 46 6f 6c 64 65 72 50 61 74 68 28 0d 0a 20 20  tFolderPath(..  
1930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
1940: 74 50 74 72 20 68 57 6e 64 4f 77 6e 65 72 2c 20  tPtr hWndOwner, 
1950: 69 6e 74 20 6e 46 6f 6c 64 65 72 2c 20 49 6e 74  int nFolder, Int
1960: 50 74 72 20 68 54 6f 6b 65 6e 2c 20 75 69 6e 74  Ptr hToken, uint
1970: 20 66 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20   flags,..       
1980: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
1990: 62 75 66 66 65 72 20 2f 2a 20 3e 3d 20 4d 41 58  buffer /* >= MAX
19a0: 5f 50 41 54 48 20 2a 2f 29 3b 0d 0a 20 20 20 20  _PATH */);..    
19b0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
19c0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
19d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1a30: 6c 69 63 20 57 72 61 70 70 65 72 20 4d 65 74 68  lic Wrapper Meth
1a40: 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1a50: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1a60: 74 72 69 6e 67 20 47 65 74 53 79 73 74 65 6d 44  tring GetSystemD
1a70: 69 72 65 63 74 6f 72 79 28 29 0d 0a 20 20 20 20  irectory()..    
1a80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
1aa0: 72 20 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74  r buffer = IntPt
1ab0: 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20  r.Zero;....     
1ac0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1af0: 20 20 20 20 20 20 20 62 75 66 66 65 72 20 3d 20         buffer = 
1b00: 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 43 6f 54  Marshal.AllocCoT
1b10: 61 73 6b 4d 65 6d 28 0d 0a 20 20 20 20 20 20 20  askMem(..       
1b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b30: 20 73 69 7a 65 6f 66 28 63 68 61 72 29 20 2a 20   sizeof(char) * 
1b40: 28 4d 41 58 5f 50 41 54 48 20 2b 20 31 29 29 3b  (MAX_PATH + 1));
1b50: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b60: 20 20 20 20 20 20 20 20 69 66 20 28 62 75 66 66          if (buff
1b70: 65 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  er != IntPtr.Zer
1b80: 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
1b90: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb0: 20 20 20 69 66 20 28 53 48 47 65 74 46 6f 6c 64     if (SHGetFold
1bc0: 65 72 50 61 74 68 28 49 6e 74 50 74 72 2e 5a 65  erPath(IntPtr.Ze
1bd0: 72 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro,..           
1be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf0: 20 20 20 20 20 43 53 49 44 4c 5f 53 59 53 54 45       CSIDL_SYSTE
1c00: 4d 58 38 36 2c 20 49 6e 74 50 74 72 2e 5a 65 72  MX86, IntPtr.Zer
1c10: 6f 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o,..            
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 20 20 20 20 53 48 47 46 50 5f 54 59 50 45 5f 43      SHGFP_TYPE_C
1c40: 55 52 52 45 4e 54 2c 20 62 75 66 66 65 72 29 20  URRENT, buffer) 
1c50: 3d 3d 20 53 5f 4f 4b 29 0d 0a 20 20 20 20 20 20  == S_OK)..      
1c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c90: 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c 2e   return Marshal.
1ca0: 50 74 72 54 6f 53 74 72 69 6e 67 41 75 74 6f 28  PtrToStringAuto(
1cb0: 62 75 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20  buffer);..      
1cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d10: 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
1d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d60: 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 49 73 20 74     // TODO: Is t
1d70: 68 69 73 20 74 68 65 20 72 69 67 68 74 20 65 72  his the right er
1d80: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 20 73 6f 6c  ror handling sol
1d90: 75 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ution..         
1da0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1db0: 20 20 20 20 74 6f 20 75 73 65 20 61 74 20 74 68      to use at th
1dc0: 69 73 20 70 6f 69 6e 74 3f 0d 0a 20 20 20 20 20  is point?..     
1dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1de0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1df0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1e00: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1e10: 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1e20: 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20  umHigh,..       
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1e50: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1e60: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 22 43 6f 75 6c 64 20 6e 6f         "Could no
1e90: 74 20 67 65 74 20 73 79 73 74 65 6d 20 64 69 72  t get system dir
1ea0: 65 63 74 6f 72 79 3a 20 7b 30 7d 22 2c 20 65 29  ectory: {0}", e)
1eb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ec0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
1ed0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 20 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20    throw;..      
1f00: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
1f20: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
1f30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f50: 28 62 75 66 66 65 72 20 21 3d 20 49 6e 74 50 74  (buffer != IntPt
1f60: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f90: 20 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e          Marshal.
1fa0: 46 72 65 65 43 6f 54 61 73 6b 4d 65 6d 28 62 75  FreeCoTaskMem(bu
1fb0: 66 66 65 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  ffer);..        
1fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd0: 62 75 66 66 65 72 20 3d 20 49 6e 74 50 74 72 2e  buffer = IntPtr.
1fe0: 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
1ff0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2020: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2040: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2050: 72 65 67 69 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a  region..#endif..
2060: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2070: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
2080: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
2090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
20e0: 69 6f 6e 20 50 72 69 76 61 74 65 20 48 65 6c 70  ion Private Help
20f0: 65 72 20 43 6c 61 73 73 65 73 0d 0a 20 20 20 20  er Classes..    
2100: 20 20 20 20 23 72 65 67 69 6f 6e 20 41 6e 79 50      #region AnyP
2110: 61 69 72 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  air Class..     
2120: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
2130: 64 20 63 6c 61 73 73 20 41 6e 79 50 61 69 72 3c  d class AnyPair<
2140: 54 31 2c 20 54 32 3e 0d 0a 20 20 20 20 20 20 20  T1, T2>..       
2150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2160: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
2170: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
2180: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2190: 20 20 20 20 20 20 20 20 20 2f 2f 20 57 41 52 4e           // WARN
21a0: 49 4e 47 3a 20 54 68 69 73 20 63 6f 6e 73 74 72  ING: This constr
21b0: 75 63 74 6f 72 20 70 72 6f 64 75 63 65 73 20 61  uctor produces a
21c0: 6e 20 69 6d 6d 75 74 61 62 6c 65 20 22 65 6d 70  n immutable "emp
21d0: 74 79 22 20 70 61 69 72 0d 0a 20 20 20 20 20 20  ty" pair..      
21e0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
21f0: 20 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 20    object...     
2200: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2210: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e         public An
2220: 79 50 61 69 72 28 29 0d 0a 20 20 20 20 20 20 20  yPair()..       
2230: 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28           : base(
2240: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2260: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2280: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22d0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22e0: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
22f0: 28 54 31 20 78 29 0d 0a 20 20 20 20 20 20 20 20  (T1 x)..        
2300: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 29          : this()
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2330: 20 74 68 69 73 2e 78 20 3d 20 78 3b 0d 0a 20 20   this.x = x;..  
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2350: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
23b0: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
23c0: 78 2c 20 54 32 20 79 29 0d 0a 20 20 20 20 20 20  x, T2 y)..      
23d0: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
23e0: 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (x)..           
23f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2400: 20 20 20 20 74 68 69 73 2e 79 20 3d 20 79 3b 0d      this.y = y;.
2410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2420: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
2430: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
2440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2490: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
24a0: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
24b0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
24c0: 70 72 69 76 61 74 65 20 54 31 20 78 3b 0d 0a 20  private T1 x;.. 
24d0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24e0: 63 20 54 31 20 58 0d 0a 20 20 20 20 20 20 20 20  c T1 X..        
24f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2500: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
2510: 75 72 6e 20 78 3b 20 7d 0d 0a 20 20 20 20 20 20  urn x; }..      
2520: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2530: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2580: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
2590: 65 20 54 32 20 79 3b 0d 0a 20 20 20 20 20 20 20  e T2 y;..       
25a0: 20 20 20 20 20 70 75 62 6c 69 63 20 54 32 20 59       public T2 Y
25b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
25c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 79 3b   get { return y;
25e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
2600: 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
2610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
2620: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2630: 20 20 20 20 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 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2680: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
2690: 72 61 63 65 4f 70 73 20 43 6c 61 73 73 0d 0a 20  raceOps Class.. 
26a0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26b0: 74 61 74 69 63 20 63 6c 61 73 73 20 54 72 61 63  tatic class Trac
26c0: 65 4f 70 73 0d 0a 20 20 20 20 20 20 20 20 7b 0d  eOps..        {.
26d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
26e0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
26f0: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..        
2700: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
2710: 74 20 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74  t string Default
2720: 44 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 22 23  DebugFormat = "#
2730: 7b 30 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b  {0:000} @ {1}: {
2740: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
2750: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
2760: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
2770: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
2780: 3a 30 30 30 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d  :000} @ {1}: {2}
2790: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
27a0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
27b0: 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31 44 61  string Iso8601Da
27c0: 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f 72 6d  teTimeOutputForm
27d0: 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  at =..          
27e0: 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d 2e 64        "yyyy.MM.d
27f0: 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66 66 66  dTHH:mm:ss.fffff
2800: 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ff";..          
2810: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2830: 2f 2f 2f 2f 2f 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 0d  ///////////////.
2870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2880: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
2890: 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20 20  tatic Data..    
28a0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
28b0: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
28c0: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
28d0: 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ect();..        
28e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
28f0: 69 63 20 6c 6f 6e 67 20 6e 65 78 74 44 65 62 75  ic long nextDebu
2900: 67 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gId;..          
2910: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
2920: 20 6c 6f 6e 67 20 6e 65 78 74 54 72 61 63 65 49   long nextTraceI
2930: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2940: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 49  private static I
2950: 4c 69 73 74 3c 54 72 61 63 65 4c 69 73 74 65 6e  List<TraceListen
2960: 65 72 3e 20 64 65 62 75 67 4c 69 73 74 65 6e 65  er> debugListene
2970: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
2980: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
2990: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 64 65  TracePriority de
29a0: 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20 54 72  bugPriority = Tr
29b0: 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61  acePriority.Defa
29c0: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
29d0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
29e0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
29f0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 54  racePriority = T
2a00: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65 66  racePriority.Def
2a10: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  ault;..         
2a20: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2a30: 63 20 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f  c string debugFo
2a40: 72 6d 61 74 20 3d 20 44 65 66 61 75 6c 74 44 65  rmat = DefaultDe
2a50: 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20  bugFormat;..    
2a60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
2a70: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
2a80: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
2a90: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
2aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2ab0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
2b10: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b20: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
2b30: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
2b40: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
2b50: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
2b60: 69 74 79 20 44 65 62 75 67 50 72 69 6f 72 69 74  ity DebugPriorit
2b70: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
2b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b90: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
2ba0: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2bb0: 20 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 20   debugPriority; 
2bc0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
2bd0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
2be0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62  (syncRoot) { deb
2bf0: 75 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  ugPriority = val
2c00: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
2c10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c20: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2c70: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
2c80: 73 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f  static TracePrio
2c90: 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
2ca0: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
2cb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cc0: 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73     get { lock (s
2cd0: 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72  yncRoot) { retur
2ce0: 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  n tracePriority;
2cf0: 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20   } }..          
2d00: 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b        set { lock
2d10: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72   (syncRoot) { tr
2d20: 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61  acePriority = va
2d30: 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20  lue; } }..      
2d40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2d50: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2da0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2db0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
2dc0: 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
2dd0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2de0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
2df0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
2e00: 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75 67 46   { return debugF
2e10: 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20  ormat; } }..    
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
2e30: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
2e40: 29 20 7b 20 64 65 62 75 67 46 6f 72 6d 61 74 20  ) { debugFormat 
2e50: 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20  = value; } }..  
2e60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
2ed0: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2ee0: 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a  ng TraceFormat..
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
2f10: 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52  et { lock (syncR
2f20: 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e 20 74 72  oot) { return tr
2f30: 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20 7d 0d 0a  aceFormat; } }..
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63  set { lock (sync
2f60: 52 6f 6f 74 29 20 7b 20 74 72 61 63 65 46 6f 72  Root) { traceFor
2f70: 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d  mat = value; } }
2f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2fa0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
3000: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
3010: 6e 20 49 6e 74 65 72 61 63 74 69 76 65 20 53 75  n Interactive Su
3020: 70 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20  pport Methods.. 
3030: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
3040: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3050: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3060: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3070: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3080: 20 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 53 68   DialogResult Sh
3090: 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
30b0: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
30c0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
30d0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
30e0: 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c  allback debugCal
30f0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
3100: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3110: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3120: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3130: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
3140: 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
3150: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3160: 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
3170: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
3180: 67 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20  g category,..   
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
31a0: 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62  sageBoxButtons b
31b0: 75 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20  uttons,..       
31c0: 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
31d0: 42 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20  BoxIcon icon..  
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
31f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3210: 44 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73  DialogResult res
3220: 75 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75  ult = DialogResu
3230: 6c 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20  lt.OK;....      
3240: 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 41            DebugA
3250: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3260: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
3270: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3280: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3290: 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73 73 61 67  Callback, messag
32a0: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  e, category);...
32b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32c0: 20 69 66 20 28 53 79 73 74 65 6d 49 6e 66 6f 72   if (SystemInfor
32d0: 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e 74 65 72  mation.UserInter
32e0: 61 63 74 69 76 65 29 0d 0a 20 20 20 20 20 20 20  active)..       
32f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3310: 73 74 72 69 6e 67 20 74 69 74 6c 65 20 3d 20 47  string title = G
3320: 65 74 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 28  etAssemblyTitle(
3330: 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d 0a 20 20  assembly);....  
3340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3350: 20 20 69 66 20 28 74 69 74 6c 65 20 3d 3d 20 6e    if (title == n
3360: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
3380: 74 6c 65 20 3d 20 41 70 70 6c 69 63 61 74 69 6f  tle = Applicatio
3390: 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65 3b 0d 0a  n.ProductName;..
33a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33b0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 4d        result = M
33c0: 65 73 73 61 67 65 42 6f 78 2e 53 68 6f 77 28 6d  essageBox.Show(m
33d0: 65 73 73 61 67 65 2c 20 74 69 74 6c 65 2c 20 62  essage, title, b
33e0: 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29 3b 0d 0a  uttons, icon);..
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3400: 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54 72        DebugAndTr
3410: 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69 74  ace(tracePriorit
3420: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3430: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
3440: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
3450: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
3460: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
3470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3480: 20 20 22 55 73 65 72 20 63 68 6f 69 63 65 20 6f    "User choice o
3490: 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69 73 70  f {0}.", ForDisp
34a0: 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d 0a 20  lay(result)),.. 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
34d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
34e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
34f0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20  result;..       
3500: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65                De
3520: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
3530: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
3540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3550: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
3560: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
3570: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63    "Default choic
35a0: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
35b0: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
35c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35d0: 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b        category);
35e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35f0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
3600: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
3610: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
3620: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
3630: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
3680: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
3690: 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70  ion Tracing Supp
36a0: 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  ort Methods..   
36b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
36c0: 73 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 75  static void Setu
36d0: 70 44 65 62 75 67 4c 69 73 74 65 6e 65 72 73 28  pDebugListeners(
36e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3700: 20 20 69 66 20 28 64 65 62 75 67 4c 69 73 74 65    if (debugListe
3710: 6e 65 72 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ners == null).. 
3720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3730: 20 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72     debugListener
3740: 73 20 3d 20 6e 65 77 20 4c 69 73 74 3c 54 72 61  s = new List<Tra
3750: 63 65 4c 69 73 74 65 6e 65 72 3e 28 29 3b 0d 0a  ceListener>();..
3760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3770: 20 20 64 65 62 75 67 4c 69 73 74 65 6e 65 72 73    debugListeners
3780: 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65  .Add(new Console
3790: 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29  TraceListener())
37a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
37b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3810: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
3820: 20 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49   long NextDebugI
3830: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
3840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3850: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
3860: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
3870: 28 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64  (ref nextDebugId
3880: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3890: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
38a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
38f0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3900: 63 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65  c long NextTrace
3910: 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  Id()..          
3920: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3930: 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65       return Inte
3940: 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e  rlocked.Incremen
3950: 74 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49  t(ref nextTraceI
3960: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d);..           
3970: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3980: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
39d0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
39e0: 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74  ic string TimeSt
39f0: 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74  amp(DateTime dat
3a00: 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20  eTime)..        
3a10: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
3a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61         return da
3a30: 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28  teTime.ToString(
3a40: 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f  Iso8601DateTimeO
3a50: 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20  utputFormat);.. 
3a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3ac0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  ...            [
3ad0: 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f  MethodImpl(Metho
3ae0: 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49  dImplOptions.NoI
3af0: 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20  nlining)]..     
3b00: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
3b10: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
3b20: 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20  MethodName(..   
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
3b40: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
3b50: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
3b60: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a       int level..
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b80: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ba0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
3bb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3be0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
3bf0: 66 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20  f a valid stack 
3c00: 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75  trace was not su
3c10: 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20  pplied by the.. 
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c     //       call
3c40: 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e  er, create one n
3c50: 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20  ow based on the 
3c60: 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20  current..       
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
3c80: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20        execution 
3c90: 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20  stack...        
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cc0: 20 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61      if (stackTra
3cd0: 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ce == null)..   
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
3d30: 20 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e   Grab the curren
3d40: 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63  t execution stac
3d50: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d80: 20 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61          stackTra
3d90: 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72  ce = new StackTr
3da0: 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ace();....      
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3de0: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b   NOTE: Always sk
3df0: 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61  ip this call fra
3e00: 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75  me when we captu
3e10: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
3e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3e30: 20 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74       the stack t
3e40: 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  race...         
3e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3e60: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3e70: 20 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c             level
3e80: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
3e90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3eb0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
3ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
3ed0: 45 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69  E: Get the speci
3ee0: 66 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65  fied stack frame
3ef0: 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65   (always add one
3f00: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
3f10: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
3f20: 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68    skip this meth
3f30: 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  od)...          
3f40: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f60: 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61    StackFrame sta
3f70: 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54  ckFrame = stackT
3f80: 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65  race.GetFrame(le
3f90: 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  vel);....       
3fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
3fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3fc0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
3fd0: 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72  t the method for
3fe0: 20 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65   the stack frame
3ff0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4000: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
4020: 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64  ethodBase method
4030: 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d  Base = stackFram
4040: 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a  e.GetMethod();..
4050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4060: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4080: 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74   NOTE: Get the t
4090: 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68  ype for the meth
40a0: 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  od...           
40b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40d0: 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74   Type type = met
40e0: 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e  hodBase.Declarin
40f0: 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  gType;....      
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4120: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
4130: 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  et the name of t
4140: 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  he method...    
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4170: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
4180: 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65  ame = methodBase
4190: 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  .Name;....      
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
41b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
41c0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52        // NOTE: R
41d0: 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72  eturn the proper
41e0: 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73  ly formatted res
41f0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ult...          
4200: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4220: 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
4230: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4250: 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79   "{0}{1}{2}", ty
4260: 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65  pe.Name, Type.De
4270: 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d  limiter, name);.
4280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4290: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
42a0: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
42b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
42e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
42f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4300: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4310: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
4320: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4330: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4370: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4380: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
4390: 69 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72  ic void DebugCor
43a0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
43b0: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
43c0: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
43d0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
43e0: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
43f0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4400: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4410: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79          lock (sy
4420: 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20  ncRoot)..       
4430: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 69 66 20 28 64 65 62 75 67 4c 69 73 74 65 6e 65  if (debugListene
4460: 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4490: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
44a0: 61 63 68 20 28 54 72 61 63 65 4c 69 73 74 65 6e  ach (TraceListen
44b0: 65 72 20 6c 69 73 74 65 6e 65 72 20 69 6e 20 64  er listener in d
44c0: 65 62 75 67 4c 69 73 74 65 6e 65 72 73 29 0d 0a  ebugListeners)..
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
44e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4500: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 2e         listener.
4510: 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61 67  WriteLine(messag
4520: 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  e, category);.. 
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 20 20 20 20 20 20 6c 69 73 74 65             liste
4550: 6e 65 72 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20  ner.Flush();..  
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
45b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
45c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4610: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4620: 20 76 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28   void TraceCore(
4630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4640: 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65    string message
4650: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4660: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
4670: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
4680: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
4690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
46a0: 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63        lock (sync
46b0: 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
46c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
46d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
46e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
46f0: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
4700: 72 69 74 65 20 74 68 65 20 6d 65 73 73 61 67 65  rite the message
4710: 20 74 6f 20 61 6c 6c 20 74 68 65 20 61 63 74 69   to all the acti
4720: 76 65 20 74 72 61 63 65 0d 0a 20 20 20 20 20 20  ve trace..      
4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4740: 20 20 20 20 20 20 20 6c 69 73 74 65 6e 65 72 73         listeners
4750: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4760: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
4780: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
4790: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
47a0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
47b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 46 6c          Trace.Fl
47c0: 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ush();..        
47d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
47e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
47f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
4840: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
4850: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
4860: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
4870: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
4880: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
4890: 20 73 74 72 69 6e 67 20 44 65 62 75 67 41 6e 64   string DebugAnd
48a0: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
48b0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
48c0: 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72  ority tracePrior
48d0: 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ity,..          
48e0: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
48f0: 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62 61 63  ack debugCallbac
4900: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
4910: 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63      TraceCallbac
4920: 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  k traceCallback,
4930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4940: 20 20 45 78 63 65 70 74 69 6f 6e 20 65 78 63 65    Exception exce
4950: 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
4960: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
4970: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
4980: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4990: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
49a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
49b0: 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  xception != null
49c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
49d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 65         return De
49e0: 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61 63  bugAndTrace(trac
49f0: 65 50 72 69 6f 72 69 74 79 2c 20 64 65 62 75 67  ePriority, debug
4a00: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a20: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
4a30: 2c 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65  , new StackTrace
4a40: 28 65 78 63 65 70 74 69 6f 6e 2c 20 74 72 75 65  (exception, true
4a50: 29 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  ), 0,..         
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
4a70: 78 63 65 70 74 69 6f 6e 2e 54 6f 53 74 72 69 6e  xception.ToStrin
4a80: 67 28 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  g(), category);.
4a90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4aa0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4b20: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
4b30: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
4b40: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
4b50: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b60: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44 65  static string De
4b70: 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
4b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
4b90: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
4ba0: 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20  ePriority,..    
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
4bc0: 65 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43  eCallback debugC
4bd0: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
4be0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
4bf0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
4c00: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
4c10: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
4c20: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
4c30: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4c40: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
4c50: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
4c60: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4c70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4c80: 72 6e 20 44 65 62 75 67 41 6e 64 54 72 61 63 65  rn DebugAndTrace
4c90: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4ca0: 20 20 20 20 20 20 20 74 72 61 63 65 50 72 69 6f         tracePrio
4cb0: 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c 62  rity, debugCallb
4cc0: 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
4cd0: 63 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20  ck, null, 1,..  
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4cf0: 20 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65 67    message, categ
4d00: 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
4d10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4d20: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d60: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4d70: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
4d80: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
4d90: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
4da0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
4db0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
4dc0: 72 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61  ring DebugAndTra
4dd0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
4de0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
4df0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
4e00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4e10: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
4e20: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
4e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4e40: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
4e50: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
4e70: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
4e80: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
4e90: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
4ea0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
4eb0: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
4ec0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4ed0: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
4ee0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
4ef0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4f10: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
4f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
4f30: 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20  TE: Always skip 
4f40: 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20  this call frame 
4f50: 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  if the stack tra
4f60: 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  ce is..         
4f70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
4f80: 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74  going to be capt
4f90: 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f  ured by GetMetho
4fa0: 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20  dName...        
4fb0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4fd0: 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75  stackTrace == nu
4fe0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4ff0: 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b           level++
5000: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5010: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
5020: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5030: 3a 20 46 6f 72 6d 61 74 20 74 68 65 20 6d 65 73  : Format the mes
5040: 73 61 67 65 20 66 6f 72 20 64 69 73 70 6c 61 79  sage for display
5050: 20 28 6f 6e 63 65 29 2e 0d 0a 20 20 20 20 20 20   (once)...      
5060: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
5080: 72 69 6e 67 20 66 6f 72 6d 61 74 74 65 64 20 3d  ring formatted =
5090: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
50a0: 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}: {1}",..    
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50c0: 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74  GetMethodName(st
50d0: 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29  ackTrace, level)
50e0: 2c 20 6d 65 73 73 61 67 65 29 3b 0d 0a 0d 0a 20  , message);.... 
50f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5100: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5110: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
5120: 68 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  he debug callbac
5130: 6b 20 69 73 20 69 6e 76 61 6c 69 64 20 6f 72 20  k is invalid or 
5140: 74 68 65 20 74 72 61 63 65 20 70 72 69 6f 72 69  the trace priori
5150: 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
5160: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 66 20      //       of 
5170: 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20  this message is 
5180: 6c 65 73 73 20 74 68 61 6e 20 77 68 61 74 20 77  less than what w
5190: 65 20 63 75 72 72 65 6e 74 6c 79 20 77 61 6e 74  e currently want
51a0: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
51b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64 65       //       de
51c0: 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20  bug, skip it... 
51d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
51e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
51f0: 20 20 20 69 66 20 28 28 64 65 62 75 67 43 61 6c     if ((debugCal
5200: 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 20 26  lback != null) &
5210: 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
5220: 20 20 20 20 20 20 20 28 74 72 61 63 65 50 72 69         (tracePri
5230: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
5240: 69 6f 72 69 74 79 29 29 0d 0a 20 20 20 20 20 20  iority))..      
5250: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5270: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
5280: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
5290: 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20 64 65 62  : Invoke the deb
52a0: 75 67 20 63 61 6c 6c 62 61 63 6b 20 77 69 74 68  ug callback with
52b0: 20 74 68 65 20 66 6f 72 6d 61 74 74 65 64 0d 0a   the formatted..
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 73      //       mes
52e0: 73 61 67 65 20 61 6e 64 20 74 68 65 20 63 61 74  sage and the cat
52f0: 65 67 6f 72 79 20 73 70 65 63 69 66 69 65 64 20  egory specified 
5300: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  by the..        
5310: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
5320: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20       caller...  
5330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5340: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
5350: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
5360: 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61 74 74 65  allback(formatte
5370: 64 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20  d, category);.. 
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5390: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
53b0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
53c0: 20 49 66 20 74 68 65 20 74 72 61 63 65 20 63 61   If the trace ca
53d0: 6c 6c 62 61 63 6b 20 69 73 20 69 6e 76 61 6c 69  llback is invali
53e0: 64 20 6f 72 20 74 68 65 20 74 72 61 63 65 20 70  d or the trace p
53f0: 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20  riority..       
5400: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5410: 20 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67    of this messag
5420: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
5430: 68 61 74 20 77 65 20 63 75 72 72 65 6e 74 6c 79  hat we currently
5440: 20 77 61 6e 74 20 74 6f 0d 0a 20 20 20 20 20 20   want to..      
5450: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5460: 20 20 20 74 72 61 63 65 2c 20 73 6b 69 70 20 69     trace, skip i
5470: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
5480: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5490: 20 20 20 20 20 20 20 20 69 66 20 28 28 74 72 61          if ((tra
54a0: 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75  ceCallback != nu
54b0: 6c 6c 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ll) &&..        
54c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 72 61              (tra
54d0: 63 65 50 72 69 6f 72 69 74 79 20 3e 3d 20 54 72  cePriority >= Tr
54e0: 61 63 65 50 72 69 6f 72 69 74 79 29 29 0d 0a 20  acePriority)).. 
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
5500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5510: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5530: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
5540: 65 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b  e trace callback
5550: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
5560: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
5570: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
5580: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
5590: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
55a0: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55c0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
55d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
55e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
5600: 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72  raceCallback(for
5610: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
5620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
5630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5640: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5650: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
5660: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5670: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5680: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
5690: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
56a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
5700: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
5710: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
5720: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
5730: 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74  class MockRegist
5740: 72 79 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65  ry : IDisposable
5750: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
5760: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
5770: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
5780: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
5790: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
57a0: 69 73 74 72 79 28 29 0d 0a 20 20 20 20 20 20 20  istry()..       
57b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
57c0: 20 20 20 20 20 20 20 20 77 68 61 74 49 66 20 3d          whatIf =
57d0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
57e0: 20 20 20 20 20 20 20 20 72 65 61 64 4f 6e 6c 79          readOnly
57f0: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
5800: 20 20 20 20 20 20 20 20 20 20 73 61 66 65 20 3d            safe =
5810: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
5820: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5830: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5870: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5880: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5890: 6f 63 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ockRegistry(..  
58a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
58b0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
58c0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
58d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
58e0: 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20  this()..        
58f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5900: 20 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74         this.what
5910: 49 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20  If = whatIf;..  
5920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5930: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5990: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
59a0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
59b0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
59c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
59d0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
59e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
59f0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
5a00: 20 20 20 20 3a 20 74 68 69 73 28 77 68 61 74 49      : this(whatI
5a10: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
5a20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5a30: 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79     this.readOnly
5a40: 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20   = readOnly;..  
5a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5a60: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5ab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5ac0: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5ad0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5ae0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
5af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b00: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
5b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5b20: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5b50: 3a 20 74 68 69 73 28 77 68 61 74 49 66 2c 20 72  : this(whatIf, r
5b60: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
5b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5b80: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 61           this.sa
5b90: 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20  fe = safe;..    
5ba0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
5bb0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
5bc0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
5bd0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5c20: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
5c30: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
5c40: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5c50: 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d  te bool whatIf;.
5c60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5c70: 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d  lic bool WhatIf.
5c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ca0: 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
5cb0: 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77 68  sed(); return wh
5cc0: 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
5cd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43           set { C
5ce0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5cf0: 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
5d00: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5d70: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5d80: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
5d90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5da0: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol ReadOnly..   
5db0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
5dd0: 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
5de0: 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e  ); return readOn
5df0: 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ly; }..         
5e00: 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
5e10: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5e20: 61 64 4f 6e 6c 79 20 3d 20 76 61 6c 75 65 3b 20  adOnly = value; 
5e30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5e40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5ea0: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
5eb0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
5ec0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
5ed0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
5ee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5ef0: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
5f00: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
5f10: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
5f20: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
5f30: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5f40: 3b 20 73 61 66 65 20 3d 20 76 61 6c 75 65 3b 20  ; safe = value; 
5f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
5f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fb0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5fc0: 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52     private MockR
5fd0: 65 67 69 73 74 72 79 4b 65 79 20 63 6c 61 73 73  egistryKey class
5fe0: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
5ff0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
6000: 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61 73  RegistryKey Clas
6010: 73 65 73 52 6f 6f 74 0d 0a 20 20 20 20 20 20 20  sesRoot..       
6020: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6030: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
6070: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
6080: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6090: 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 3d 20 6e  classesRoot == n
60a0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c                cl
60c0: 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e 65 77 20  assesRoot = new 
60d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
60e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6100: 67 69 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f  gistry.ClassesRo
6110: 6f 74 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ot, whatIf, read
6120: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a  Only, safe);....
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6140: 20 20 20 20 72 65 74 75 72 6e 20 63 6c 61 73 73      return class
6150: 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20 20 20  esRoot;..       
6160: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6170: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6180: 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
61c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
61d0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
61e0: 61 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  ate MockRegistry
61f0: 4b 65 79 20 63 75 72 72 65 6e 74 43 6f 6e 66 69  Key currentConfi
6200: 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
6210: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6220: 74 72 79 4b 65 79 20 43 75 72 72 65 6e 74 43 6f  tryKey CurrentCo
6230: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..          
6240: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6250: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6260: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6280: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
62a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75 72           if (cur
62b0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 3d 20 6e 75  rentConfig == nu
62c0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72               cur
62e0: 72 65 6e 74 43 6f 6e 66 69 67 20 3d 20 6e 65 77  rentConfig = new
62f0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6300: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
6320: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
6330: 6f 6e 66 69 67 2c 20 77 68 61 74 49 66 2c 20 72  onfig, whatIf, r
6340: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6350: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6360: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 75         return cu
6370: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
63a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
63b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
63f0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6400: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
6410: 69 73 74 72 79 4b 65 79 20 63 75 72 72 65 6e 74  istryKey current
6420: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
6430: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
6440: 67 69 73 74 72 79 4b 65 79 20 43 75 72 72 65 6e  gistryKey Curren
6450: 74 55 73 65 72 0d 0a 20 20 20 20 20 20 20 20 20  tUser..         
6460: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6470: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
6480: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64a0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
64b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
64c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 75            if (cu
64d0: 72 72 65 6e 74 55 73 65 72 20 3d 3d 20 6e 75 6c  rrentUser == nul
64e0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 63 75 72 72              curr
6500: 65 6e 74 55 73 65 72 20 3d 20 6e 65 77 20 4d 6f  entUser = new Mo
6510: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
6520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6530: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
6540: 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
6550: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
6560: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20  ly, safe);....  
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6580: 20 20 72 65 74 75 72 6e 20 63 75 72 72 65 6e 74    return current
6590: 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
65a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
65b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
65c0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6610: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6620: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6630: 79 20 64 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y dynData;..    
6640: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
6650: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 44  ockRegistryKey D
6660: 79 6e 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ynData..        
6670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6680: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6690: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
66a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66b0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
66c0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
66d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
66e0: 79 6e 44 61 74 61 20 3d 3d 20 6e 75 6c 6c 29 0d  ynData == null).
66f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6700: 20 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61           dynData
6710: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6720: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6740: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 44 79       Registry.Dy
6750: 6e 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 72  nData, whatIf, r
6760: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
6770: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 79         return dy
6790: 6e 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  nData;..        
67a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
67b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
67c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6810: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6820: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6830: 65 79 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ey localMachine;
6840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6850: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6860: 79 4b 65 79 20 4c 6f 63 61 6c 4d 61 63 68 69 6e  yKey LocalMachin
6870: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
6880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6890: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 20    get..         
68a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
68b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
68c0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
68d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
68e0: 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c 4d        if (localM
68f0: 61 63 68 69 6e 65 20 3d 3d 20 6e 75 6c 6c 29 0d  achine == null).
6900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6910: 20 20 20 20 20 20 20 20 20 6c 6f 63 61 6c 4d 61           localMa
6920: 63 68 69 6e 65 20 3d 20 6e 65 77 20 4d 6f 63 6b  chine = new Mock
6930: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
6960: 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 2c  ry.LocalMachine,
6970: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
6980: 79 2c 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20  y, safe);....   
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69a0: 20 72 65 74 75 72 6e 20 6c 6f 63 61 6c 4d 61 63   return localMac
69b0: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
69c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
69d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
69e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6a30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
6a40: 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  e MockRegistryKe
6a50: 79 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y performanceDat
6a60: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
6a70: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
6a80: 74 72 79 4b 65 79 20 50 65 72 66 6f 72 6d 61 6e  tryKey Performan
6a90: 63 65 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  ceData..        
6aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6ab0: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
6af0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
6b00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
6b10: 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20 3d  erformanceData =
6b20: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
6b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b40: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
6b50: 20 3d 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73   = new MockRegis
6b60: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
6b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b80: 20 20 20 20 20 52 65 67 69 73 74 72 79 2e 50 65       Registry.Pe
6b90: 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 2c 20 77  rformanceData, w
6ba0: 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c  hatIf, readOnly,
6bb0: 20 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20   safe);....     
6bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6bd0: 65 74 75 72 6e 20 70 65 72 66 6f 72 6d 61 6e 63  eturn performanc
6be0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
6bf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6c00: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6c10: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6c60: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6c70: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
6c80: 65 79 20 75 73 65 72 73 3b 0d 0a 20 20 20 20 20  ey users;..     
6c90: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
6ca0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 55 73  ckRegistryKey Us
6cb0: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
6cc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6cd0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
6ce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d00: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
6d10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d20: 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65 72          if (user
6d30: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d50: 20 20 20 20 75 73 65 72 73 20 3d 20 6e 65 77 20      users = new 
6d60: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
6d90: 67 69 73 74 72 79 2e 55 73 65 72 73 2c 20 77 68  gistry.Users, wh
6da0: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
6db0: 73 61 66 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  safe);....      
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6dd0: 74 75 72 6e 20 75 73 65 72 73 3b 0d 0a 20 20 20  turn users;..   
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6e00: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6e10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6e20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
6e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6e70: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6e80: 50 75 62 6c 69 63 20 22 52 65 67 69 73 74 72 79  Public "Registry
6e90: 22 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  " Methods..     
6ea0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62         public ob
6eb0: 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a  ject GetValue(..
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ed0: 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 2c 0d  string keyName,.
6ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6ef0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 4e 61 6d   string valueNam
6f00: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
6f10: 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75      object defau
6f20: 6c 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  ltValue..       
6f30: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
6f40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6f50: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
6f60: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
6f80: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 47  eturn Registry.G
6f90: 65 74 56 61 6c 75 65 28 6b 65 79 4e 61 6d 65 2c  etValue(keyName,
6fa0: 20 76 61 6c 75 65 4e 61 6d 65 2c 20 64 65 66 61   valueName, defa
6fb0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
6fc0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6fd0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7020: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7030: 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65  ic void SetValue
7040: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7050: 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
7060: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
7070: 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
7080: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
7090: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
70a0: 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
70b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
70c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
70d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
70e0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
70f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
7100: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7120: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7140: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7150: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7160: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  ame, value);..  
7170: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
71d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
71e0: 62 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c  blic void SetVal
71f0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
7200: 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
7210: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
7220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c        string val
7230: 75 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ueName,..       
7240: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
7250: 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20 20  value,..        
7260: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
7270: 56 61 6c 75 65 4b 69 6e 64 20 76 61 6c 75 65 4b  ValueKind valueK
7280: 69 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ind..           
7290: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
72a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
72b0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
72c0: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
72d0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
72e0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
72f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
7300: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
7320: 65 67 69 73 74 72 79 2e 53 65 74 56 61 6c 75 65  egistry.SetValue
7330: 28 6b 65 79 4e 61 6d 65 2c 20 76 61 6c 75 65 4e  (keyName, valueN
7340: 61 6d 65 2c 20 76 61 6c 75 65 2c 20 76 61 6c 75  ame, value, valu
7350: 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20 20  eKind);..       
7360: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7370: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
7380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
73e0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
73f0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
7400: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f        private vo
7410: 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79  id CheckReadOnly
7420: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
7430: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7440: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7450: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
7460: 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22 20 6d  In "read-only" m
7470: 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c 6f 77  ode, we disallow
7480: 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63 65 73   all write acces
7490: 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
74a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
74b0: 20 20 20 20 20 20 20 20 69 66 20 28 21 72 65 61          if (!rea
74c0: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
74e0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
74f0: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7500: 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
7510: 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 20  nException();.. 
7520: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7530: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7540: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
7550: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
7560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7590: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
75a0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
75b0: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
75c0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
75d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
75e0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
75f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
7600: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
7610: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
7620: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
7630: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7640: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
7650: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
7660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7670: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
7680: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7690: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
76a0: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
76c0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
76d0: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
76e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
76f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7740: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7750: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
7760: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
7770: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
7780: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
7790: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
77a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
77b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
77d0: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7800: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
7810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7820: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7840: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7860: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7880: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
7890: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
78a0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7900: 20 28 63 6c 61 73 73 65 73 52 6f 6f 74 20 21 3d   (classesRoot !=
7910: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7930: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7950: 6c 61 73 73 65 73 52 6f 6f 74 2e 43 6c 6f 73 65  lassesRoot.Close
7960: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7980: 20 63 6c 61 73 73 65 73 52 6f 6f 74 20 3d 20 6e   classesRoot = n
7990: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
79b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
79c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
79d0: 75 72 72 65 6e 74 43 6f 6e 66 69 67 20 21 3d 20  urrentConfig != 
79e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 75                cu
7a20: 72 72 65 6e 74 43 6f 6e 66 69 67 2e 43 6c 6f 73  rrentConfig.Clos
7a30: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 63 75 72 72 65 6e 74 43 6f 6e 66 69 67 20    currentConfig 
7a60: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
7aa0: 20 28 63 75 72 72 65 6e 74 55 73 65 72 20 21 3d   (currentUser !=
7ab0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ad0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7af0: 75 72 72 65 6e 74 55 73 65 72 2e 43 6c 6f 73 65  urrentUser.Close
7b00: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 63 75 72 72 65 6e 74 55 73 65 72 20 3d 20 6e   currentUser = n
7b30: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7b50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7b60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
7b70: 79 6e 44 61 74 61 20 21 3d 20 6e 75 6c 6c 29 0d  ynData != null).
7b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7b90: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 20 20 20 20 20 64 79 6e 44 61 74 61 2e          dynData.
7bc0: 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  Close();..      
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 20 20 20 20 64 79 6e 44 61 74 61 20 3d 20        dynData = 
7bf0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7c10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7c30: 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 21 3d 20  localMachine != 
7c40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f                lo
7c80: 63 61 6c 4d 61 63 68 69 6e 65 2e 43 6c 6f 73 65  calMachine.Close
7c90: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
7ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cb0: 20 6c 6f 63 61 6c 4d 61 63 68 69 6e 65 20 3d 20   localMachine = 
7cc0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7ce0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61 20  performanceData 
7d10: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d50: 20 70 65 72 66 6f 72 6d 61 6e 63 65 44 61 74 61   performanceData
7d60: 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  .Close();..     
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7d80: 20 20 20 20 20 20 20 70 65 72 66 6f 72 6d 61 6e         performan
7d90: 63 65 44 61 74 61 20 3d 20 6e 75 6c 6c 3b 0d 0a  ceData = null;..
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7dd0: 20 20 20 20 20 69 66 20 28 75 73 65 72 73 20 21       if (users !
7de0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
7df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e20: 75 73 65 72 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a  users.Close();..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 72              user
7e50: 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  s = null;..     
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7e80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ea0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
7eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7ee0: 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61 6e 61  / release unmana
7ef0: 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65  ged resources he
7f00: 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20  re.....         
7f10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
7f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f40: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7f50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73 20 6f   // NOTE: This o
7f80: 62 6a 65 63 74 20 69 73 20 6e 6f 77 20 64 69 73  bject is now dis
7f90: 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  posed...        
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74      disposed = t
7fd0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
7fe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
7ff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
8000: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
8010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8060: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8070: 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
8080: 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a 20 20  able Members..  
8090: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
80a0: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d   void Dispose().
80b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80d0: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e 61 6c  GC.SuppressFinal
8100: 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20 20 20  ize(this);..    
8110: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8120: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
8130: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
8140: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8180: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8190: 20 20 20 20 23 72 65 67 69 6f 6e 20 44 65 73 74      #region Dest
81a0: 72 75 63 74 6f 72 0d 0a 20 20 20 20 20 20 20 20  ructor..        
81b0: 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69 73 74 72      ~MockRegistr
81c0: 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y()..           
81d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
81e0: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
81f0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8200: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
8210: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
8220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
8230: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
8240: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
8250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8290: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
82a0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
82b0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 69  Class..        i
82c0: 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64 20 63  nternal sealed c
82d0: 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73 74 72  lass MockRegistr
82e0: 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73 61 62  yKey : IDisposab
82f0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  le..        {.. 
8300: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
8310: 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
8320: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
8330: 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
8340: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a  kRegistryKey()..
8350: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
8370: 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d 0a 20  hatIf = true;.. 
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8390: 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65 3b 0d  eadOnly = true;.
83a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
83b0: 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d 0a 20   safe = true;.. 
83c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
83d0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
83e0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
83f0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8430: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8440: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
8450: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
8460: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
8470: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
8480: 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  tryKey(..       
8490: 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
84a0: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
84b0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74               : t
84d0: 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20  his()..         
84e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
84f0: 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79 20 3d        this.key =
8500: 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20   key;..         
8510: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8520: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8560: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8570: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8580: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
85b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85c0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
85d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
85e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
85f0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
8600: 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey)..           
8610: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8620: 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65 79 4e      this.subKeyN
8630: 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61 6d 65  ame = subKeyName
8640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8650: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
86a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
86b0: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
86c0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
86e0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
8700: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8720: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8750: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
8760: 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20 20 20  bKeyName)..     
8770: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8780: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 77            this.w
8790: 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b 0d  hatIf = whatIf;.
87a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
87b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
87c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
87f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
8810: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
8820: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8830: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
8840: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
8850: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8860: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8880: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
88a0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20  ol readOnly..   
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88d0: 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b  : this(key, subK
88e0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 29 0d  eyName, whatIf).
88f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8910: 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20 3d 20  this.readOnly = 
8920: 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20  readOnly;..     
8930: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8940: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
8950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
8990: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
89a0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
89b0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
89c0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
89d0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
89e0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
89f0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
8a00: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
8a10: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
8a20: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61          bool rea
8a30: 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  dOnly,..        
8a40: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66          bool saf
8a50: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8a60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
8a70: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
8a80: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
8a90: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d  atIf, readOnly).
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ac0: 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61 66 65  this.safe = safe
8ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
8ae0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b30: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8b40: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
8b50: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
8b60: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
8b70: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8b90: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
8ba0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8bc0: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8bd0: 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
8be0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8bf0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8c00: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8c10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
8c20: 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
8c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
8c70: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
8c80: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ca0: 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79   RegistryKey key
8cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8cc0: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ce0: 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a   bool readOnly..
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8d10: 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e     : this(key, n
8d20: 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ull, whatIf, rea
8d30: 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20  dOnly)..        
8d40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8d50: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8d60: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
8d70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8d80: 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8dd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
8de0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
8df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e00: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
8e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e20: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
8e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e40: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a  bool readOnly,..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20  bool safe..     
8e70: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
8e90: 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20  this(key, null, 
8ea0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
8eb0: 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  , safe)..       
8ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8ed0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8ee0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
8ef0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
8f00: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
8f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8f60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8f70: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d  #region Public M
8f80: 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20  ethods..        
8f90: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
8fa0: 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20  Close()..       
8fb0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8fc0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
8fe0: 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73 65 64  OTE: No disposed
8ff0: 20 63 68 65 63 6b 20 68 65 72 65 20 62 65 63 61   check here beca
9000: 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68 69 73  use calling this
9010: 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20 20 20   method..       
9020: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
9030: 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75 73 74    should be just
9040: 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20 44 69   like calling Di
9050: 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  spose...        
9060: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
9070: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
9080: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
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 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
9120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9130: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
9140: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
9150: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9160: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9170: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
9180: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
9190: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
91a0: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
91c0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
91d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91e0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
91f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9200: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9230: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9250: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
9260: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
9270: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
9280: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  If this..       
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92a0: 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77 65 20        fails, we 
92b0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
92c0: 72 6e 20 74 68 65 20 77 72 61 70 70 65 64 20 72  rn the wrapped r
92d0: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
92f0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e        itself sin
9300: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
9310: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 22 77 68 61   allowed in "wha
9320: 74 2d 69 66 22 0d 0a 20 20 20 20 20 20 20 20 20  t-if"..         
9330: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
9340: 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e      mode anyhow.
9350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9360: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9380: 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
9390: 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65   = key.OpenSubKe
93a0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73 75        return (su
93d0: 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d  bKey != null) ?.
93e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
93f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
9400: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
9430: 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20 72  ubKey, whatIf, r
9440: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20 3a  eadOnly, safe) :
9450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9460: 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f            new Mo
9470: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94a0: 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
94b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
94c0: 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20  y, safe);..     
94d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
94f0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9500: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9510: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9520: 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74  n new MockRegist
9530: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
9540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9550: 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79  key.CreateSubKey
9560: 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 77 68  (subKeyName), wh
9570: 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20  atIf, readOnly, 
9580: 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  safe);..        
9590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
95a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
95b0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
95c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
95f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9600: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9610: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
9620: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
9630: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
9640: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
9650: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 74            bool t
9660: 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 0d 0a 20  hrowOnMissing.. 
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
96a0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
96b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
96c0: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
96d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
96e0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
96f0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9700: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9710: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9720: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
9730: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
9740: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
9750: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
9760: 79 4e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  yName, throwOnMi
9770: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9780: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9790: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
97e0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
97f0: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
9800: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
9810: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9820: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9830: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9840: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9850: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9860: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
9880: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
9890: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
98a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
98b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
98c0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
98d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98e0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
98f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9900: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
9910: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
9920: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
9930: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9940: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9990: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
99a0: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
99b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
99c0: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
99d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
99e0: 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73   bool throwOnMis
99f0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  sing..          
9a00: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
9a10: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9a20: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
9a30: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
9a40: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
9a50: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9a70: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a90: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9ab0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
9ae0: 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d 69  (name, throwOnMi
9af0: 73 73 69 6e 67 29 3b 0d 0a 20 20 20 20 20 20 20  ssing);..       
9b00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
9b10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b60: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9b70: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
9b80: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
9b90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9ba0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
9bb0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9bd0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
9c00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c10: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
9c20: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
9c30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9c40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
9ca0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
9cb0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9cc0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
9cd0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
9ce0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
9cf0: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
9d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9d50: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
9d60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9d80: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
9d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
9da0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
9db0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
9dc0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
9dd0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
9de0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
9df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e20: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9e30: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
9e40: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
9e50: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
9e60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
9e70: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
9e80: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
9e90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
9eb0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
9ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ed0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
9ee0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
9ef0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
9f00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9f10: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9f60: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
9f70: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
9f80: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9fa0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
9fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9fc0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a000: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a010: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a020: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
a030: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
a040: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
a050: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
a060: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a070: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
a080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a090: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
a0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a0b0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
a0c0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
a0d0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
a0f0: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
a100: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
a110: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
a120: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
a130: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
a140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a150: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
a160: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
a170: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
a180: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
a190: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
a1a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a1b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
a200: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
a210: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
a220: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
a230: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
a240: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
a250: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
a260: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
a270: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a280: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
a290: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
a2a0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
a2b0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
a2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a2d0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2f0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a310: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
a320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a330: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
a340: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
a350: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
a360: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a370: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a380: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a3d0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
a3e0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
a400: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
a410: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a430: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
a440: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a450: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
a460: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a480: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
a490: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
a4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
a4b0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4d0: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
a4e0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
a4f0: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
a500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a510: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
a520: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
a530: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
a540: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
a550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a560: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
a570: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a580: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a590: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a5f0: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
a600: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
a610: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
a620: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
a630: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a640: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a650: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
a660: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
a670: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
a680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a690: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
a6f0: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
a700: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
a710: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
a720: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
a730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a750: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
a760: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
a770: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
a780: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a790: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a7f0: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
a800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a810: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
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 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
a850: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
a860: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
a870: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
a880: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a8d0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a8e0: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a900: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
a910: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
a920: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
a930: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
a940: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
a950: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
a960: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
a970: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
a980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
a9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
a9d0: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
a9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
a9f0: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
aa00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
aa20: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
aa30: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
aa40: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
aa50: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
aa60: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
aa70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
aa80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aaa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
aad0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
aae0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
aaf0: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
ab00: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ab30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
ab40: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
ab50: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
ab60: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
ab70: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
aba0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
abb0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
abc0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
abd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
abe0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
abf0: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
ac00: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
ac10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ac20: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ac70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ac80: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
ac90: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
aca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
acb0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
acc0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
acd0: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
ace0: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
acf0: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
ad00: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
ad10: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
ad20: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
ad30: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
ad40: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ad60: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
ad80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
ad90: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ada0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
adb0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
add0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ade0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
adf0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ae00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae30: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ae40: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
ae50: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
ae60: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
ae70: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
ae80: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
ae90: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
aea0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
aeb0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
aec0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
aed0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aee0: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
aef0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
af00: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
af10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
af20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
af30: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
af70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
af80: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
af90: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
afa0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
afb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
afc0: 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20 20  UG: Remove me?  
afd0: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 73  This should be s
afe0: 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20 22  afe because in "
aff0: 77 68 61 74 2d 69 66 22 0d 0a 20 20 20 20 20 20  what-if"..      
b000: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
b010: 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20 61   mode all keys a
b020: 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d 6f  re opened read-o
b030: 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nly...          
b040: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b050: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
b060: 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74 6f  implicit operato
b070: 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  r RegistryKey(..
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b090: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
b0a0: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
b0b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
b0c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
b0e0: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b 65  ey != null) ? ke
b0f0: 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  y.Key : null;.. 
b100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b110: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b120: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b130: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b180: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b190: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
b1a0: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
b1b0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b1c0: 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64 3b  e bool disposed;
b1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b1e0: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
b1f0: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
b200: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  row */..        
b210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b220: 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73 70         if (!disp
b230: 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
b240: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b250: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
b260: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
b270: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
b280: 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b2a0: 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72  peof(MockRegistr
b2b0: 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20  yKey).Name);..  
b2c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b330: 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74  ivate /* protect
b340: 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f  ed virtual */ vo
b350: 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20  id Dispose(..   
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
b370: 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20  l disposing..   
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
b390: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b3b0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3e0: 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73        if (dispos
b3f0: 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ing)..          
b400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20  /////////..     
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
b470: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
b480: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
b490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4a0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4e0: 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c   if (key != null
b4f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b500: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b520: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c            key.Cl
b530: 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ose();..        
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b550: 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d      key = null;.
b560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b5a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5e0: 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20       // release 
b5f0: 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  unmanaged resour
b600: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b640: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b660: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b670: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b680: 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e  This object is n
b690: 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20  ow disposed...  
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b6c0: 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73            dispos
b6d0: 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b6f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b700: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
b710: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
b720: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
b730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b760: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
b770: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49         #region I
b780: 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65  Disposable Membe
b790: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b7a0: 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70  public void Disp
b7b0: 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ose()..         
b7c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b7d0: 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72        Dispose(tr
b7e0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
b7f0: 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73        GC.Suppres
b800: 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b  sFinalize(this);
b810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b830: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b840: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b890: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b8a0: 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20  n Destructor..  
b8b0: 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52            ~MockR
b8c0: 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20  egistryKey()..  
b8d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73               Dis
b8f0: 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20  pose(false);..  
b900: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b910: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b920: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b930: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b940: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b9a0: 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72   #region Registr
b9b0: 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20  yHelper Class.. 
b9c0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
b9d0: 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69  tatic class Regi
b9e0: 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20  stryHelper..    
b9f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ba00: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
ba10: 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74  c Static Propert
ba20: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
ba30: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
ba40: 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74  int subKeysCreat
ba50: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
ba60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
ba70: 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65  nt SubKeysCreate
ba80: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
ba90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
baa0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
bab0: 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d  ubKeysCreated; }
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bad0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
bae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
baf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb20: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bb30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bb40: 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65   int subKeysDele
bb50: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
bb60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
bb70: 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74  int SubKeysDelet
bb80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bb90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bba0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bbb0: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20  subKeysDeleted; 
bbc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
bbd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bc20: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
bc30: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
bc40: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53  c int keyValuesS
bc50: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  et;..           
bc60: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
bc70: 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d  nt KeyValuesSet.
bc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
bcb0: 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20  ValuesSet; }..  
bcc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bcd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 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 0d 0a  //////////////..
bd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
bd30: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
bd40: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
bd50: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
bd60: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
bd70: 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t KeyValuesDelet
bd80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
bd90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
bda0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
bdb0: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
bdc0: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
bdd0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
bde0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
bdf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
be00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
be30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
be40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
be50: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
be60: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
be70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
be80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
be90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
bea0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
beb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
bec0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
bed0: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
bee0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
bef0: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
bf00: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
bf10: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
bf20: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
bf30: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
bf40: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
bf50: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
bf60: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
bf70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
bf80: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
bf90: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bfa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bfb0: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
bfc0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfe0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
bff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c000: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
c030: 67 41 6e 64 54 72 61 63 65 28 77 72 69 74 61 62  gAndTrace(writab
c040: 6c 65 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  le ?..          
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c060: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
c070: 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f 72  est : TracePrior
c080: 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c0b0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c0c0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c0d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c0e0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c0f0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c100: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
c110: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20  table = {2}",.. 
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c140: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c150: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c160: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
c180: 44 69 73 70 6c 61 79 28 77 72 69 74 61 62 6c 65  Display(writable
c190: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
c1a0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c1b0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c1c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
c1d0: 43 4b 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69  CK: Always forbi
c1e0: 64 20 77 72 69 74 61 62 6c 65 20 61 63 63 65 73  d writable acces
c1f0: 73 20 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67  s when operating
c200: 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
c210: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77       //       "w
c220: 68 61 74 2d 69 66 22 20 6d 6f 64 65 2e 0d 0a 20  hat-if" mode... 
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c240: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c250: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
c260: 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79  ey key = rootKey
c270: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c290: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
c2a0: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
c2b0: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
c2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c2d0: 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c  urn (key != null
c2e0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
c2f0: 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63           new Moc
c300: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
c310: 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c  , whatIf, false,
c320: 20 66 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d   false) : null;.
c330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c390: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
c3a0: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
c3b0: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
c3c0: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
c3d0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
c3e0: 73 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73  static MockRegis
c3f0: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
c400: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
c410: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
c420: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
c450: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c460: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c480: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
c4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4c0: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
c4d0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c4f0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
c500: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c510: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c530: 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
c540: 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
c550: 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c570: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
c580: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
c590: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
c5a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
c5b0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
c5c0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
c5d0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20  yName = {1}",.. 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c600: 79 28 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44  y(rootKey), ForD
c610: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
c620: 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c640: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c660: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
c670: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6a0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c       // HACK: Al
c6b0: 77 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c  ways open a key,
c6c0: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65   rather than cre
c6d0: 61 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a  ating one when..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65      //       ope
c700: 72 61 74 69 6e 67 20 69 6e 20 22 77 68 61 74 2d  rating in "what-
c710: 69 66 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20  if" mode...     
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c730: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c740: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
c750: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
c760: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c780: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7a0: 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20  / HACK: Attempt 
c7b0: 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63  to open the spec
c7c0: 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20  ified sub-key.  
c7d0: 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  If..            
c7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
c7f0: 20 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c       this fails,
c800: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
c810: 72 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 0d  return the root.
c820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c830: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c840: 20 20 6b 65 79 20 69 74 73 65 6c 66 20 73 69 6e    key itself sin
c850: 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65  ce no writes are
c860: 20 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20   allowed in..   
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c880: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 77       //       "w
c890: 68 61 74 2d 69 66 22 20 6d 6f 64 65 20 61 6e 79  hat-if" mode any
c8a0: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c8d0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
c8e0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
c8f0: 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b  rootKey.OpenSubK
c900: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  ey(subKeyName);.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c920: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
c930: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
c940: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
c960: 65 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67  ey : new MockReg
c970: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
c9a0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
c9b0: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
c9c0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
ca30: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
ca40: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74 65 53   rootKey.CreateS
ca70: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
ca80: 29 2c 20 77 68 61 74 49 66 2c 20 66 61 6c 73 65  ), whatIf, false
ca90: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
cab0: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
cac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
cae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
caf0: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
cb00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb20: 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64    subKeysCreated
cb30: 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++;..           
cb40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
cb50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cba0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cbb0: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cbc0: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cbd0: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cbe0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cbf0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cc00: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
cc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc20: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
cc30: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
cc50: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
cc80: 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
cc90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
cca0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
ccb0: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
ccc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ccd0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
cce0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ccf0: 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
cd00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
cd20: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
cd30: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
cd40: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
cd50: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
cd60: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
cd70: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
cd80: 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cda0: 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
cdb0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
cdc0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
cdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cde0: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
cdf0: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
ce00: 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  me = {1}",..    
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72      ForDisplay(r
ce30: 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70  ootKey), ForDisp
ce40: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
ce50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ce60: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
ce70: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ce90: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ceb0: 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75  rootKey.DeleteSu
cec0: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c  bKey(subKeyName,
ced0: 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 29   throwOnMissing)
cee0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cef0: 20 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65       subKeysDele
cf00: 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20  ted++;..        
cf10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cf20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cf70: 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49          [MethodI
cf80: 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70  mpl(MethodImplOp
cf90: 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67  tions.NoInlining
cfa0: 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )]..            
cfb0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
cfc0: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
cfd0: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
cfe0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
cff0: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
d020: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
d030: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
d040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d050: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
d080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d090: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
d0a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
d0c0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
d0d0: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
d0e0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
d0f0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
d100: 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
d110: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
d120: 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  ghest,..        
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74  debugCallback, t
d150: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
d160: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d        "rootKey =
d190: 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65   {0}, subKeyName
d1a0: 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f    ForDisplay(roo
d1d0: 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61  tKey), ForDispla
d1e0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d  y(subKeyName)),.
d1f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d200: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
d210: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
d220: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d230: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
d250: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
d260: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
d270: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
d280: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
d290: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
d2a0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
d2b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
d2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
d300: 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f            [Metho
d310: 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c  dImpl(MethodImpl
d320: 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69  Options.NoInlini
d330: 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ng)]..          
d340: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
d350: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
d360: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
d370: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
d380: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
d3c0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
d3e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d400: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
d430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d440: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
d450: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d460: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
d470: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
d480: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c  cePriority.High,
d490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4a0: 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
d4b0: 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
d4c0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
d4d0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  "key = {0}", For
d500: 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74  Display(key)), t
d510: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d530: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d540: 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a  SubKeyNames();..
d550: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
d560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
d570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d5c0: 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
d5d0: 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
d5e0: 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
d5f0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
d600: 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47 65 74  tatic object Get
d610: 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
d620: 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69          MockRegi
d630: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
d650: 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
d660: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
d670: 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75 65 2c  ct defaultValue,
d680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d690: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
d6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
d700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
d720: 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
d730: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
d740: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
d750: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
d760: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
d770: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
d780: 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
d790: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
d7a0: 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
d7b0: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d7c0: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61    "key = {0}, na
d7f0: 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75 6c  me = {1}, defaul
d800: 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a  tValue = {2}",..
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
d830: 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73 70  ay(key), ForDisp
d840: 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20 20  lay(name),..    
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
d870: 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20 74  efaultValue)), t
d880: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
d890: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d8a0: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
d8b0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
d8c0: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
d8d0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
d8e0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
d930: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
d940: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
d950: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
d960: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
d970: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
d980: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d9a0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
d9b0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
d9c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
d9d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
d9e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
d9f0: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
da00: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
da10: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
da20: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
da30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da40: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
da50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
da60: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
da70: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
da80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
da90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
daa0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
dab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dac0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
dad0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
dae0: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
daf0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
db10: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
db20: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
db30: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
db60: 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65  ame = {1}, value
db70: 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20   = {2}",..      
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79    ForDisplay(key
dba0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61  ), ForDisplay(na
dbb0: 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me), ForDisplay(
dbc0: 76 61 6c 75 65 29 29 2c 0d 0a 20 20 20 20 20 20  value)),..      
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
dbf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc00: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
dc10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
dc20: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
dc30: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
dc40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dc50: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 53 65       keyValuesSe
dc60: 74 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  t++;..          
dc70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
dc80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
dc90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
dcc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
dcd0: 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70        [MethodImp
dce0: 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69  l(MethodImplOpti
dcf0: 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d  ons.NoInlining)]
dd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
dd10: 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64  blic static void
dd20: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
dd40: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
dd50: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
dd60: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
dd70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dd80: 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
dd90: 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
dda0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
ddb0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
ddc0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
ddd0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
dde0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ddf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
de00: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
de10: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
de30: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
de40: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
de50: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
de60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
de70: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
de80: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
de90: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
dec0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
ded0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30         "key = {0
df00: 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20  }, name = {1}", 
df10: 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c  ForDisplay(key),
df20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
df30: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
df40: 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72 61  play(name)), tra
df50: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
df80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df90: 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75    key.DeleteValu
dfa0: 65 28 6e 61 6d 65 2c 20 74 68 72 6f 77 4f 6e 4d  e(name, throwOnM
dfb0: 69 73 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20  issing);....    
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 56              keyV
dfd0: 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d  aluesDeleted++;.
dfe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
e000: 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  region..        
e010: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e020: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e030: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e070: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e080: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69      #region Stri
e090: 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20  ngList Class..  
e0a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
e0b0: 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e  aled class Strin
e0c0: 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74 72  gList : List<str
e0d0: 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ing>..        {.
e0e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
e0f0: 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 29  lic StringList()
e100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e110: 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20 20    : base()..    
e120: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e130: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
e140: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
e150: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
e160: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
e170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e1a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
e1b0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e1c0: 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45 6e  c StringList(IEn
e1d0: 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e  umerable<string>
e1e0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20   collection)..  
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
e200: 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29  base(collection)
e210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
e220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e230: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
e240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e250: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e260: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
e270: 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
e280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e2c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
e2d0: 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69 6f  ion StringDictio
e2e0: 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  nary Class..    
e2f0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e300: 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 44  ed class StringD
e310: 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63 74  ictionary : Dict
e320: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 73  ionary<string, s
e330: 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20  tring>..        
e340: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
e350: 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63 74  ublic StringDict
e360: 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20 20  ionary()..      
e370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e380: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
e390: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
e3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
e3b0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
e3c0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
e3d0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e410: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
e420: 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73      #region Vers
e430: 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ionList Class.. 
e440: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
e450: 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73  ealed class Vers
e460: 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56  ionList : List<V
e470: 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20  ersion>..       
e480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e490: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
e4a0: 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  st()..          
e4b0: 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a        : base()..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e4e0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
e4f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
e510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
e550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
e560: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
e570: 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65  t(IEnumerable<Ve
e580: 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f  rsion> collectio
e590: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
e5a0: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
e5b0: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
e5c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e5d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
e5e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
e5f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e600: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
e610: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
e620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e660: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
e670: 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f    #region Versio
e680: 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  nMap Class..    
e690: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
e6a0: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
e6b0: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
e6c0: 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e  <string, Version
e6d0: 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b  List>..        {
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e6f0: 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 28  blic VersionMap(
e700: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
e730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e740: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
e750: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
e760: 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
e790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e7b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
e7c0: 67 69 6f 6e 20 50 61 63 6b 61 67 65 20 43 6c 61  gion Package Cla
e7d0: 73 73 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 65  ss..        inte
e7e0: 72 6e 61 6c 20 73 65 61 6c 65 64 20 63 6c 61 73  rnal sealed clas
e7f0: 73 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  s Package..     
e800: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e810: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
e820: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
e830: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
e840: 63 20 50 61 63 6b 61 67 65 28 29 0d 0a 20 20 20  c Package()..   
e850: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
e870: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
e880: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
e890: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
e8a0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
e8b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
e8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
e8f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
e900: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
e910: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
e920: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
e930: 74 65 20 73 74 72 69 6e 67 20 70 72 6f 76 69 64  te string provid
e940: 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b  erInvariantName;
e950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
e960: 62 6c 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76  blic string Prov
e970: 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
e980: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
e990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e9a0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70    get { return p
e9b0: 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
e9c0: 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  Name; }..       
e9d0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
e9e0: 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e 74  roviderInvariant
e9f0: 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
ea00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
ea10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
ea20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ea60: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ea70: 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
ea80: 66 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b  factoryTypeName;
ea90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
eaa0: 62 6c 69 63 20 73 74 72 69 6e 67 20 46 61 63 74  blic string Fact
eab0: 6f 72 79 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20  oryTypeName..   
eac0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
eae0: 7b 20 72 65 74 75 72 6e 20 66 61 63 74 6f 72 79  { return factory
eaf0: 54 79 70 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  TypeName; }..   
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
eb10: 20 7b 20 66 61 63 74 6f 72 79 54 79 70 65 4e 61   { factoryTypeNa
eb20: 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
eb30: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
eb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
eb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
eb90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
eba0: 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e  rivate AssemblyN
ebb0: 61 6d 65 20 70 72 6f 76 69 64 65 72 41 73 73 65  ame providerAsse
ebc0: 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  mblyName;..     
ebd0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73         public As
ebe0: 73 65 6d 62 6c 79 4e 61 6d 65 20 50 72 6f 76 69  semblyName Provi
ebf0: 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d  derAssemblyName.
ec00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 72 6f  get { return pro
ec30: 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d  viderAssemblyNam
ec40: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
ec50: 20 20 20 20 20 20 73 65 74 20 7b 20 70 72 6f 76        set { prov
ec60: 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
ec70: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
ec80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
ec90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
eca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ecd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
ece0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
ecf0: 76 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d  vate AssemblyNam
ed00: 65 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62  e designerAssemb
ed10: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
ed20: 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65       public Asse
ed30: 6d 62 6c 79 4e 61 6d 65 20 44 65 73 69 67 6e 65  mblyName Designe
ed40: 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 0d 0a 20  rAssemblyName.. 
ed50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
ed70: 74 20 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67  t { return desig
ed80: 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b  nerAssemblyName;
ed90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
eda0: 20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e      set { design
edb0: 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  erAssemblyName =
edc0: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
edd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ede0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
edf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ee20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
ee30: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
ee40: 74 65 20 62 6f 6f 6c 20 67 6c 6f 62 61 6c 41 73  te bool globalAs
ee50: 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a 20 20  semblyCache;..  
ee60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
ee70: 20 62 6f 6f 6c 20 47 6c 6f 62 61 6c 41 73 73 65   bool GlobalAsse
ee80: 6d 62 6c 79 43 61 63 68 65 0d 0a 20 20 20 20 20  mblyCache..     
ee90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
eea0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
eeb0: 72 65 74 75 72 6e 20 67 6c 6f 62 61 6c 41 73 73  return globalAss
eec0: 65 6d 62 6c 79 43 61 63 68 65 3b 20 7d 0d 0a 20  emblyCache; }.. 
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
eee0: 65 74 20 7b 20 67 6c 6f 62 61 6c 41 73 73 65 6d  et { globalAssem
eef0: 62 6c 79 43 61 63 68 65 20 3d 20 76 61 6c 75 65  blyCache = value
ef00: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
ef10: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ef20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
ef30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ef60: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ef70: 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69       private Gui
ef80: 64 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20  d packageId;..  
ef90: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
efa0: 20 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d   Guid PackageId.
efb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efd0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63  get { return pac
efe0: 6b 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20  kageId; }..     
eff0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
f000: 20 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c   packageId = val
f010: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f020: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f030: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f070: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f080: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f090: 75 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a  uid serviceId;..
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
f0b0: 69 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49  ic Guid ServiceI
f0c0: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
f0d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f0e0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
f0f0: 65 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20  erviceId; }..   
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
f110: 20 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76   { serviceId = v
f120: 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
f130: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f140: 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f190: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
f1a0: 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
f1b0: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f1c0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
f1d0: 61 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  aSourceId..     
f1e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f1f0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f200: 72 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63  return dataSourc
f210: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
f220: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61          set { da
f230: 74 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c  taSourceId = val
f240: 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
f250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f260: 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
f2b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47         private G
f2c0: 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
f2d0: 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id;..           
f2e0: 20 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74   public Guid Dat
f2f0: 61 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20  aProviderId..   
f300: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f310: 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
f320: 7b 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f  { return dataPro
f330: 76 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20  viderId; }..    
f340: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
f350: 7b 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  { dataProviderId
f360: 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
f370: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f380: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
f390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f3e0: 76 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74  vate Guid adoNet
f3f0: 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20  TechnologyId;.. 
f400: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
f410: 63 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63  c Guid AdoNetTec
f420: 68 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20  hnologyId..     
f430: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f440: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
f450: 72 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63  return adoNetTec
f460: 68 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20  hnologyId; }..  
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
f480: 74 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f  t { adoNetTechno
f490: 6c 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20  logyId = value; 
f4a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
f4b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
f4c0: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
f4d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
f4e0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
f4f0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
f540: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
f550: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
f560: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
f570: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
f580: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
f590: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f5a0: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
f5b0: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
f5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f5d0: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
f5e0: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
f5f0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
f600: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
f610: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
f620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f630: 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f680: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f690: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
f6a0: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
f6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f6c0: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
f6d0: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
f6e0: 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  };....          
f6f0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f730: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
f740: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
f750: 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72 69  st string Invari
f760: 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65  antName = "Syste
f770: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d  m.Data.SQLite";.
f780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
f790: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
f7a0: 67 20 45 66 36 49 6e 76 61 72 69 61 6e 74 4e 61  g Ef6InvariantNa
f7b0: 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
f7c0: 61 2e 53 51 4c 69 74 65 2e 45 46 36 22 3b 0d 0a  a.SQLite.EF6";..
f7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f820: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f830: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
f840: 74 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70  tring FactoryTyp
f850: 65 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20  eName =..       
f860: 20 20 20 20 20 20 20 20 20 22 53 79 73 74 65 6d           "System
f870: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
f880: 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a 0d 0a  iteFactory";....
f890: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
f8a0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
f8b0: 20 45 66 36 46 61 63 74 6f 72 79 54 79 70 65 4e   Ef6FactoryTypeN
f8c0: 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
f8d0: 20 20 20 20 20 20 20 22 53 79 73 74 65 6d 2e 44         "System.D
f8e0: 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 53  ata.SQLite.EF6.S
f8f0: 51 4c 69 74 65 50 72 6f 76 69 64 65 72 46 61 63  QLiteProviderFac
f900: 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  tory";..        
f910: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
f920: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f970: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
f980: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
f990: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
f9a0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
f9b0: 65 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c  e static Assembl
f9c0: 79 20 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d  y systemEf6Assem
f9d0: 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  bly;..          
f9e0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
fa40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
fa50: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 44  region Private D
fa60: 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ata..           
fa70: 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
fa80: 79 4e 61 6d 65 20 63 6f 72 65 41 73 73 65 6d 62  yName coreAssemb
fa90: 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  lyName;..       
faa0: 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73 73       private Ass
fab0: 65 6d 62 6c 79 4e 61 6d 65 20 6c 69 6e 71 41 73  emblyName linqAs
fac0: 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20  semblyName;..   
fad0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
fae0: 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 65 66   AssemblyName ef
faf0: 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  6AssemblyName;..
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
fb10: 61 74 65 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65  ate AssemblyName
fb20: 20 64 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c   designerAssembl
fb30: 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
fb40: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
fb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
fb60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fba0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
fbb0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
fbc0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
fbd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
fbe0: 74 65 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te Configuration
fbf0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
fc00: 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
fc10: 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  mbly,..         
fc20: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
fc30: 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  gFileName,..    
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
fc50: 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
fc70: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
fc80: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
fc90: 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71       string linq
fca0: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
fcb0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
fcc0: 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g ef6FileName,..
fcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fce0: 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
fcf0: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
fd00: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
fd10: 20 72 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   registryVersion
fd20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fd30: 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 66 69 67     string config
fd40: 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
fd50: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
fd60: 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69 78   vsVersionSuffix
fd70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fd80: 20 20 20 73 74 72 69 6e 67 20 64 65 62 75 67 46     string debugF
fd90: 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
fda0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
fdb0: 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  raceFormat,..   
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
fdd0: 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c  tallFlags instal
fde0: 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20  lFlags,..       
fdf0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
fe00: 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69 6f  iority debugPrio
fe10: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
fe20: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
fe30: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
fe40: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
fe50: 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
fe60: 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
fe70: 20 20 20 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c      bool install
fe80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fe90: 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65  bool noRuntimeVe
fec0: 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
fed0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44          bool noD
fee0: 65 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20  esktop,..       
fef0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
ff00: 43 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20  Compact,..      
ff10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
ff20: 6f 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20 20 20  oNetFx20,..     
ff30: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
ff40: 6e 6f 4e 65 74 46 78 33 35 2c 0d 0a 20 20 20 20  noNetFx35,..    
ff50: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
ff60: 20 6e 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20   noNetFx40,..   
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ff80: 6c 20 6e 6f 4e 65 74 46 78 34 35 2c 0d 0a 20 20  l noNetFx45,..  
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ffa0: 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 31 2c 0d 0a  ol noNetFx451,..
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffc0: 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 35 2c 0d 0a  bool noVs2005,..
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffe0: 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c 0d 0a  bool noVs2008,..
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a  bool noVs2010,..
10010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10020 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 2c 0d 0a  bool noVs2012,..
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 2c 0d 0a  bool noVs2013,..
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20  bool noTrace,.. 
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10080 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a  ool noConsole,..
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20  bool noLog,..   
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
100c0 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  l throwOnMissing
100d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
100e0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
100f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10100 20 62 6f 6f 6c 20 64 65 62 75 67 2c 0d 0a 20 20   bool debug,..  
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
10120 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
10140 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20  l confirm..     
10150 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
10160 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10180 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73  s.assembly = ass
10190 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  embly;..        
101a0 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67          this.log
101b0 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69  FileName = logFi
101c0 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
101d0 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69           this.di
101e0 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74  rectory = direct
101f0 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
10200 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46        this.coreF
10210 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69  ileName = coreFi
10220 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
10230 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69           this.li
10240 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e  nqFileName = lin
10250 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
10260 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
10270 2e 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 65  .ef6FileName = e
10280 66 36 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  f6FileName;..   
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
102a0 73 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  s.designerFileNa
102b0 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c  me = designerFil
102c0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
102d0 20 20 20 20 20 20 20 20 74 68 69 73 2e 72 65 67          this.reg
102e0 69 73 74 72 79 56 65 72 73 69 6f 6e 20 3d 20 72  istryVersion = r
102f0 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 0d  egistryVersion;.
10300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10310 20 74 68 69 73 2e 63 6f 6e 66 69 67 56 65 72 73   this.configVers
10320 69 6f 6e 20 3d 20 63 6f 6e 66 69 67 56 65 72 73  ion = configVers
10330 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
10340 20 20 20 20 20 20 74 68 69 73 2e 76 73 56 65 72        this.vsVer
10350 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 73 56  sionSuffix = vsV
10360 65 72 73 69 6f 6e 53 75 66 66 69 78 3b 0d 0a 20  ersionSuffix;.. 
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10380 68 69 73 2e 64 65 62 75 67 46 6f 72 6d 61 74 20  his.debugFormat 
10390 3d 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  = debugFormat;..
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103b0 74 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61 74  this.traceFormat
103c0 20 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d   = traceFormat;.
103d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103e0 20 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61   this.installFla
103f0 67 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67  gs = installFlag
10400 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
10410 20 20 20 20 74 68 69 73 2e 64 65 62 75 67 50 72      this.debugPr
10420 69 6f 72 69 74 79 20 3d 20 64 65 62 75 67 50 72  iority = debugPr
10430 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20  iority;..       
10440 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72           this.tr
10450 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72  acePriority = tr
10460 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10480 69 73 2e 70 65 72 55 73 65 72 20 3d 20 70 65 72  is.perUser = per
10490 55 73 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20  User;..         
104a0 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
104b0 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d 0a  all = install;..
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 74 68 69 73 2e 77 6f 77 36 34 20 3d 20 77 6f 77  this.wow64 = wow
104e0 36 34 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64;..           
104f0 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74       this.noRunt
10500 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52  imeVersion = noR
10510 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d  this.noDesktop =
10540 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20   noDesktop;..   
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10560 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f  s.noCompact = no
10570 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20  Compact;..      
10580 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
10590 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74  oNetFx20 = noNet
105a0 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
105b0 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
105c0 74 46 78 33 35 20 3d 20 6e 6f 4e 65 74 46 78 33  tFx35 = noNetFx3
105d0 35 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  5;..            
105e0 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78      this.noNetFx
105f0 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34 30 3b 0d  40 = noNetFx40;.
10600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10610 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 35 20   this.noNetFx45 
10620 3d 20 6e 6f 4e 65 74 46 78 34 35 3b 0d 0a 20 20  = noNetFx45;..  
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
10640 69 73 2e 6e 6f 4e 65 74 46 78 34 35 31 20 3d 20  is.noNetFx451 = 
10650 6e 6f 4e 65 74 46 78 34 35 31 3b 0d 0a 20 20 20  noNetFx451;..   
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10670 73 2e 6e 6f 56 73 32 30 30 35 20 3d 20 6e 6f 56  s.noVs2005 = noV
10680 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20  s2005;..        
10690 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
106a0 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30 30 38  s2008 = noVs2008
106b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
106c0 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 31 30     this.noVs2010
106d0 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20   = noVs2010;..  
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
106f0 69 73 2e 6e 6f 56 73 32 30 31 32 20 3d 20 6e 6f  is.noVs2012 = no
10700 56 73 32 30 31 32 3b 0d 0a 20 20 20 20 20 20 20  Vs2012;..       
10710 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
10720 56 73 32 30 31 33 20 3d 20 6e 6f 56 73 32 30 31  Vs2013 = noVs201
10730 33 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  3;..            
10740 20 20 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65      this.noTrace
10750 20 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20   = noTrace;..   
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10770 73 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f  s.noConsole = no
10780 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20  Console;..      
10790 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
107a0 6f 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20  oLog = noLog;.. 
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
107c0 68 69 73 2e 74 68 72 6f 77 4f 6e 4d 69 73 73 69  his.throwOnMissi
107d0 6e 67 20 3d 20 74 68 72 6f 77 4f 6e 4d 69 73 73  ng = throwOnMiss
107e0 69 6e 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ing;..          
107f0 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
10800 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
10820 73 2e 64 65 62 75 67 20 3d 20 64 65 62 75 67 3b  s.debug = debug;
10830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10840 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65 20 3d    this.verbose =
10850 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
10860 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
10870 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69 72  confirm = confir
10880 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
10890 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
108a0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
108b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
108c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
108f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
10900 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
10910 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
10920 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
10930 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
10940 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 44  static void GetD
10950 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
10960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10970 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 69 72    ref string dir
10980 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
10990 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
109a0 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
109b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
109c0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 6c 69     ref string li
109d0 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
109f0 20 73 74 72 69 6e 67 20 65 66 36 46 69 6c 65 4e   string ef6FileN
10a00 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
10a10 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
10a20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
10a30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
10a40 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
10a50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10a60 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73 73       if (thisAss
10a70 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  embly == null)..
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a90 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
10ab0 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e  irectory = Path.
10ac0 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d 65  GetDirectoryName
10ad0 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f  (thisAssembly.Lo
10ae0 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  cation);....    
10af0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10b00 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
10b10 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
10b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10b30 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
10b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b50 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
10b60 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
10b70 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
10b90 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
10ba0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
10bb0 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c           linqFil
10bc0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
10bd0 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d  bine(directory,.
10be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10bf0 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 4c       Installer.L
10c00 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
10c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50   ef6FileName = P
10c30 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
10c40 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
10c50 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
10c60 61 6c 6c 65 72 2e 45 66 36 46 69 6c 65 4e 61 6d  aller.Ef6FileNam
10c70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
10c80 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46         designerF
10c90 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
10ca0 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
10cb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10cc0 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
10cd0 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
10ce0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
10cf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10d00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
10d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10d40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
10d50 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
10d60 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 4f 70  tic bool CheckOp
10d70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
10d80 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
10d90 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20 20 20  g arg..         
10da0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
10db0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10dc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
10dd0 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d  result = arg;...
10de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10df0 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
10e00 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c  ullOrEmpty(resul
10e10 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
10e20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10e30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e50 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d      // NOTE: Rem
10e60 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e 67 20  ove all leading 
10e70 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d 0a 20  switch chars... 
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
10ea0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
10eb0 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69 6d 53  t = result.TrimS
10ec0 74 61 72 74 28 53 77 69 74 63 68 43 68 61 72 73  tart(SwitchChars
10ed0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10ee0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77 20 6d    // NOTE: How m
10f10 61 6e 79 20 63 68 61 72 73 20 77 65 72 65 20 72  any chars were r
10f20 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20 20 20  emoved?..       
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
10f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10f50 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 20 3d       int count =
10f60 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20 72 65   arg.Length - re
10f70 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  sult.Length;....
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
10fb0 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65 20 61  OTE: Was there a
10fc0 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a 20 20  t least one?..  
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fe0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
10ff0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
11000 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  unt > 0)..      
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11030 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11050 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b       // NOTE: Ok
11060 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69 72 20  , replace their 
11070 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20 20  original..      
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11090 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67 75 6d    //       argum
110a0 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ent...          
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
110c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
110d0 20 20 20 20 20 20 20 20 20 20 61 72 67 20 3d 20            arg = 
110e0 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20  result;....     
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11120 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69  / NOTE: Yes, thi
11130 73 20 69 73 20 61 20 73 77 69 74 63 68 2e 0d 0a  s is a switch...
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
11180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11190 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
111a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
111c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
111d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
111e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
111f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11230 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
11240 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
11250 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d 0a 20   MatchOption(.. 
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11270 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20 20 20  tring arg,..    
11280 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
11290 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20  ng option..     
112a0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
112b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
112d0 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ((arg == null) |
112e0 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c  | (option == nul
112f0 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
11300 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11310 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
11320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11330 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28   String.Compare(
11340 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c 20  arg, 0, option, 
11350 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0,..            
11360 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65 6e 67          arg.Leng
11370 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72  th, StringCompar
11380 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  ison.OrdinalIgno
11390 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20  reCase) == 0;.. 
113a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
113b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
113c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
113f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11400 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11410 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
11420 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  ol? ParseBoolean
11430 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11440 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d 0a     string text..
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
11470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11480 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
11490 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74  NullOrEmpty(text
114a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
114b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
114c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
114d0 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
114f0 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65 28   (bool.TryParse(
11500 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75 65 29  text, out value)
11510 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11520 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11530 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  n value;..      
11540 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11560 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
11570 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11580 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
11590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
115c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
115d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
115e0 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a 65  vate static obje
115f0 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20  ct ParseEnum(.. 
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11610 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d 0a 20  ype enumType,.. 
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
11630 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20 20 20  tring text,..   
11640 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
11650 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20 20 20  l noCase..      
11660 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
11670 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11680 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11690 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e 75 6c  (enumType == nul
116a0 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70 65 2e  l) || !enumType.
116b0 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20 20 20  IsEnum)..       
116c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
116d0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
116f0 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
11700 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11730 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
11740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11760 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11770 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e 75 6d   Enum.Parse(enum
11780 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f 43 61  Type, text, noCa
11790 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
117a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
117d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
11800 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
11810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11830 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11840 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
11850 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
11860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
11870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
118a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
118b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
118c0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
118d0 62 6f 6f 6c 20 49 73 53 79 73 74 65 6d 45 66 36  bool IsSystemEf6
118e0 41 73 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c  AssemblyAvailabl
118f0 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
11900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11910 20 20 20 20 69 66 20 28 73 79 73 74 65 6d 45 66      if (systemEf
11920 36 41 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  6Assembly != nul
11930 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
11940 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11950 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
11960 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 20 20 20 73 79 73 74 65 6d 45 66 36 41 73 73      systemEf6Ass
119a0 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79  embly = Assembly
119b0 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c  .ReflectionOnlyL
119c0 6f 61 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  oad(..          
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
119e0 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e  stemEf6AssemblyN
119f0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11a10 28 73 79 73 74 65 6d 45 66 36 41 73 73 65 6d 62  (systemEf6Assemb
11a20 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly != null)..   
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11a50 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
11a60 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
11a70 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
11a80 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
11ab0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
11ac0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
11ad0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 22 45 6e 74 69 74 79 20 46 72 61 6d 65 77 6f   "Entity Framewo
11b00 72 6b 20 36 20 61 73 73 65 6d 62 6c 79 20 77 61  rk 6 assembly wa
11b10 73 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 7b 30  s resolved to {0
11b20 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73 79 73    ForDisplay(sys
11b50 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 2e 4c  temEf6Assembly.L
11b60 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  ocation)),..    
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
11b90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
11bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11bd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11be0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11bf0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
11c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
11c20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
11c30 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
11c40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11c60 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
11c70 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
11c80 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
11cb0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11cd0 20 20 20 20 22 45 6e 74 69 74 79 20 46 72 61 6d      "Entity Fram
11ce0 65 77 6f 72 6b 20 36 20 61 73 73 65 6d 62 6c 79  ework 6 assembly
11cf0 20 77 61 73 20 6e 6f 74 20 72 65 73 6f 6c 76 65   was not resolve
11d00 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  d.",..          
11d10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
11d20 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11d40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
11d50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
11d60 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
11d70 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
11d80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11dc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
11dd0 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
11de0 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
11df0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
11e00 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
11e10 64 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67  d BreakIntoDebug
11e20 67 65 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ger()..         
11e30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11e40 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
11e50 69 74 65 4c 69 6e 65 28 0d 0a 20 20 20 20 20 20  iteLine(..      
11e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
11e70 74 74 61 63 68 20 61 20 64 65 62 75 67 67 65 72  ttach a debugger
11e80 20 74 6f 20 70 72 6f 63 65 73 73 20 7b 30 7d 20   to process {0} 
11e90 61 6e 64 20 70 72 65 73 73 20 61 6e 79 20 6b 65  and press any ke
11ea0 79 20 74 6f 20 22 20 2b 0d 0a 20 20 20 20 20 20  y to " +..      
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
11ec0 6f 6e 74 69 6e 75 65 2e 22 2c 20 28 74 68 69 73  ontinue.", (this
11ed0 50 72 6f 63 65 73 73 20 21 3d 20 6e 75 6c 6c 29  Process != null)
11ee0 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
11ef0 20 20 20 20 20 20 20 20 74 68 69 73 50 72 6f 63          thisProc
11f00 65 73 73 2e 49 64 2e 54 6f 53 74 72 69 6e 67 28  ess.Id.ToString(
11f10 29 20 3a 20 22 3c 75 6e 6b 6e 6f 77 6e 3e 22 29  ) : "<unknown>")
11f20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11f30 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
11f40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
11f70 28 74 72 75 65 29 3b 20 2f 2a 20 74 68 72 6f 77  (true); /* throw
11f80 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
11f90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11fa0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
11fb0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
11fc0 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
11fd0 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12000 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
12010 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
12020 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12030 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67 67            Debugg
12040 65 72 2e 42 72 65 61 6b 28 29 3b 0d 0a 20 20 20  er.Break();..   
12050 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
12060 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
12070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
120a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
120b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
120c0 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e 66 69  lic static Confi
120d0 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74 65 44  guration CreateD
120e0 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20 20 20  efault()..      
120f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12100 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
12110 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c  directory = null
12120 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12130 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
12140 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
12170 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ame = null;..   
12180 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
12190 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65 20  ing ef6FileName 
121a0 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
121b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
121c0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
121d0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
121e0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44              GetD
121f0 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
12200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12210 20 20 20 20 20 20 72 65 66 20 64 69 72 65 63 74        ref direct
12220 6f 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c  ory, ref coreFil
12230 65 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46  eName, ref linqF
12240 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12260 66 20 65 66 36 46 69 6c 65 4e 61 6d 65 2c 20 72  f ef6FileName, r
12270 65 66 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ef designerFileN
12280 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
12290 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
122a0 6e 65 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  new Configuratio
122b0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
122c0 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65          thisAsse
122d0 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65  mbly, null, dire
122e0 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c 65 4e  ctory, coreFileN
122f0 61 6d 65 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ame, linqFileNam
12300 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
12310 20 20 20 20 20 20 20 20 65 66 36 46 69 6c 65 4e          ef6FileN
12320 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46 69 6c  ame, designerFil
12330 65 4e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6e 75 6c  eName, null, nul
12340 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  l, null,..      
12350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12360 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
12370 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61  at, TraceOps.Tra
12380 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
123a0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61  nstallFlags.Defa
123b0 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69  ult, TracePriori
123c0 74 79 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20  ty.Default,..   
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44   TracePriority.D
123f0 65 66 61 75 6c 74 2c 20 66 61 6c 73 65 2c 20 74  efault, false, t
12400 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
12410 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20  e, false,..     
12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
12430 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c  alse, false, fal
12440 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
12450 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
12460 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  false,..        
12470 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
12480 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
12490 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
124a0 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65  alse, true, true
124b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
124c0 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61         false, fa
124d0 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  lse, false);..  
124e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
124f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
12500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
12540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
12550 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
12560 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
12570 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
12580 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
12590 74 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67  tic bool FromArg
125a0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
125b0 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
125c0 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
125d0 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
125e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
125f0 20 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74    ref Configurat
12600 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
12610 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
12620 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
12630 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
12640 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
12650 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12660 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20      if (args == 
126a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
126b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
126c0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
126f0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tion == null).. 
12700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12710 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
12720 74 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61  tion = Configura
12730 74 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75  tion.CreateDefau
12740 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lt();....       
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
12760 20 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c   length = args.L
12770 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
12790 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
127a0 3b 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68  ; index < length
127b0 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
127e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
127f0 67 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64  g arg = args[ind
12800 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ex];....        
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
12830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
12840 4f 54 45 3a 20 53 6b 69 70 20 61 6e 79 20 61 72  OTE: Skip any ar
12850 67 75 6d 65 6e 74 20 74 68 61 74 20 69 73 20 6e  gument that is n
12860 75 6c 6c 20 28 3f 29 20 6f 72 20 61 6e 20 65 6d  ull (?) or an em
12870 70 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  pty..           
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12890 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20        string... 
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
128c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128d0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
128e0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67 29  NullOrEmpty(arg)
128f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12910 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 2f 2f 20 4e 4f 54 45 3a 20 57 65 20 61 72 65 20  // NOTE: We are 
12960 67 6f 69 6e 67 20 74 6f 20 6d 6f 64 69 66 79 20  going to modify 
12970 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 61 72 67  the original arg
12980 75 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20  ument..         
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
129a0 2f 20 20 20 20 20 20 20 62 79 20 72 65 6d 6f 76  /       by remov
129b0 69 6e 67 20 61 6e 79 20 6c 65 61 64 69 6e 67 20  ing any leading 
129c0 6f 70 74 69 6f 6e 20 63 68 61 72 61 63 74 65 72  option character
129d0 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s;..            
129e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
129f0 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore, 
12a00 77 65 20 75 73 65 20 61 20 6e 65 77 20 73 74 72  we use a new str
12a10 69 6e 67 20 74 6f 20 68 6f 6c 64 20 74 68 65 0d  ing to hold the.
12a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12a40 20 20 6d 6f 64 69 66 69 65 64 20 61 72 67 75 6d    modified argum
12a50 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ent...          
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12a80 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
12a90 20 6e 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a   newArg = arg;..
12aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ab0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ad0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
12ae0 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ll the supported
12af0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70   command line op
12b00 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20  tions must..    
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 65 67      //       beg
12b30 69 6e 20 77 69 74 68 20 61 6e 20 6f 70 74 69 6f  in with an optio
12b40 6e 20 63 68 61 72 61 63 74 65 72 20 28 65 2e 67  n character (e.g
12b50 2e 20 61 20 6d 69 6e 75 73 0d 0a 20 20 20 20 20  . a minus..     
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 72 20 66     //       or f
12b80 6f 72 77 61 72 64 20 73 6c 61 73 68 29 3b 20 61  orward slash); a
12b90 74 74 65 6d 70 74 20 74 6f 20 76 61 6c 69 64 61  ttempt to valida
12ba0 74 65 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20  te that..       
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 2f 2f 20 20 20 20 20 20 20 6e 6f 77 2e 20 20   //       now.  
12bd0 49 66 20 77 65 20 66 61 69 6c 20 69 6e 20 73 74  If we fail in st
12be0 72 69 63 74 20 6d 6f 64 65 2c 20 77 65 20 61 72  rict mode, we ar
12bf0 65 20 64 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 20  e done;..       
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c10 20 2f 2f 20 20 20 20 20 20 20 6f 74 68 65 72 77   //       otherw
12c20 69 73 65 2c 20 6a 75 73 74 20 73 6b 69 70 20 74  ise, just skip t
12c30 68 69 73 20 61 72 67 75 6d 65 6e 74 20 61 6e 64  his argument and
12c40 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20 20 20   advance..      
12c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c60 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 74 68    //       to th
12c70 65 20 6e 65 78 74 20 6f 6e 65 2e 0d 0a 20 20 20  e next one...   
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 69 66 20 28 21 43 68 65 63 6b 4f 70 74 69 6f   if (!CheckOptio
12cc0 6e 28 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a  n(ref newArg))..
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
12d10 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
12d20 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12d50 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
12d60 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
12d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12d90 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
12da0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 6e               "Un
12dd0 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
12de0 64 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 3a  d line argument:
12df0 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
12e20 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43  ay(arg)), traceC
12e30 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
12e60 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12e90 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12eb0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ef0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12f10 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20  / NOTE: All the 
12f20 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
12f30 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d  d line options m
12f40 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12f60 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61 6c        have a val
12f70 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61  ue; therefore, a
12f80 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63  ttempt to advanc
12f90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
12fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12fb0 20 20 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20      to it now.  
12fc0 49 66 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61  If we fail, we a
12fd0 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  re done...      
12fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ff0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
13010 64 65 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20  dex++;....      
13020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13030 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c    if (index >= l
13040 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20  ength)..        
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13080 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13090 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
130d0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
130e0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13110 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13120 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13140 20 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61       "Missing va
13150 6c 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20  lue for option: 
13160 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
13170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13180 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
13190 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61  y(arg)), traceCa
131a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
131d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131f0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13200 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20    break;..      
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13260 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13270 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
13280 54 45 3a 20 47 72 61 62 20 74 68 65 20 74 65 78  TE: Grab the tex
13290 74 75 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  tual value of th
132a0 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  is command line.
132b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132c0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
132d0 20 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20    option...     
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
13310 74 72 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67  tring text = arg
13320 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65   // NOTE: Figure
13370 20 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61   out which comma
13380 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74  nd line option t
13390 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20  his is..        
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65 64 20  //       (based 
133c0 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d  on a partial nam
133d0 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65  e match) and the
133e0 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20  n try..         
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13400 2f 20 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72  /       to inter
13410 70 72 65 74 20 74 68 65 20 74 65 78 74 75 61 6c  pret the textual
13420 20 76 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f   value as the co
13430 72 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20  rrect..         
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13450 2f 20 20 20 20 20 20 20 74 79 70 65 2e 0d 0a 20  /       type... 
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69     if (MatchOpti
134a0 6f 6e 28 6e 65 77 41 72 67 2c 20 22 62 72 65 61  on(newArg, "brea
134b0 6b 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  k"))..          
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
134d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
134f0 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
13500 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
13510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
13530 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
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 20 20 20 20 7b 0d                {.
13560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13580 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
13590 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
135a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135c0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
135d0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
135e0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13620 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13630 20 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 20 20 20 20 20 20 20                  
13650 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
13660 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
13670 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
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 20 20 46 6f 72 44 69 73            ForDis
136a0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
136b0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
136f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
13720 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
13750 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
13780 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
137a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
137b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137c0 69 66 20 28 28 62 6f 6f 6c 29 76 61 6c 75 65 29  if ((bool)value)
137d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67    BreakIntoDebug
13800 67 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ger();..        
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13830 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13840 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
13850 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 67 56  newArg, "configV
13860 65 72 73 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20  ersion"))..     
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
138b0 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20  configVersion = 
138c0 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
138e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
138f0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
13900 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
13910 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22  ewArg, "confirm"
13920 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
13930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
13960 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
13970 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
139a0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
139b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
139d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
139f0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13a00 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
13a40 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
13a50 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13a80 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
13a90 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
13aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
13ad0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13ae0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13b10 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13b20 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b50 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13b60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
13b90 0a 20 20 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 20                  
13bb0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
13bc0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13bf0 0a 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 20 20 20 20 7d 0d 0a               }..
13c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13c30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66  nfiguration.conf
13c40 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  irm = (bool)valu
13c50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
13c60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
13c90 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
13ca0 72 67 2c 20 22 63 6f 72 65 46 69 6c 65 4e 61 6d  rg, "coreFileNam
13cb0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
13cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
13cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
13cf0 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46  figuration.coreF
13d00 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
13d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d40 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
13d50 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
13d60 20 22 64 65 62 75 67 22 29 29 0d 0a 20 20 20 20   "debug"))..    
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
13db0 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
13dc0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
13df0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
13e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
13e40 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
13e50 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
13e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
13e80 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
13e90 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
13ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ec0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13ed0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13ee0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
13f10 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
13f20 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f50 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
13f60 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
13f70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13fa0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13fd0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 20 20 20 20 20 20 72 65 74               ret
14000 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14030 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14080 69 6f 6e 2e 64 65 62 75 67 20 3d 20 28 62 6f 6f  ion.debug = (boo
14090 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
140c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
140d0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
140e0 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
140f0 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20  Format"))..     
14100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14110 20 20 20 7b 0d 0a 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 20 20                  
14130 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
14140 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 74 65  debugFormat = te
14150 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46   TraceOps.DebugF
14180 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
14190 61 74 69 6f 6e 2e 64 65 62 75 67 46 6f 72 6d 61  ation.debugForma
141a0 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
141b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
141c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141d0 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
141e0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
141f0 72 67 2c 20 22 64 65 62 75 67 50 72 69 6f 72 69  rg, "debugPriori
14200 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ty"))..         
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
14220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
14240 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
14250 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
14280 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20  TracePriority), 
14290 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
142c0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
142d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
142f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14310 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
14320 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14350 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
14360 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
14370 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
143a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
143b0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61   "Invalid {0} va
143f0 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20 20                  
14420 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
14430 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
14440 29 29 2c 0d 0a 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 20 20 20 20 74 72 61 63 65 43 61           traceCa
14470 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14490 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
144a0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
144b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
144d0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14500 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14520 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14540 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14550 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74  ion.debugPriorit
14560 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69  y = (TracePriori
14570 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ty)value;..     
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 54 72 61 63 65 4f 70 73 2e         TraceOps.
145a0 44 65 62 75 67 50 72 69 6f 72 69 74 79 20 3d 20  DebugPriority = 
145b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65  configuration.de
145c0 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  bugPriority;..  
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14600 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
14610 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64  ption(newArg, "d
14620 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22  esignerFileName"
14630 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14660 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
14670 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65  guration.designe
14680 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74  rFileName = text
14690 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
146a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
146d0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
146e0 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22 29 29  g, "directory"))
146f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14700 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14720 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14730 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
14740 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20   = text;....    
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 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 2f 2f 20 4e 4f 54 45 3a          // NOTE:
14790 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73 74 20   *SPECIAL* Must 
147a0 72 65 66 72 65 73 68 20 74 68 65 20 66 69 6c 65  refresh the file
147b0 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20   names..        
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72      //       her
147e0 65 20 62 65 63 61 75 73 65 20 74 68 65 20 75 6e  e because the un
147f0 64 65 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f  derlying directo
14800 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68 61  //       has cha
14830 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  nged...         
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14870 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
14880 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
14890 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
148a0 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
148d0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
148e0 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
148f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
14910 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  reFileName = Pat
14920 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f  h.GetFileName(co
14930 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14960 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
14970 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  mpty(coreFileNam
14980 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149a0 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d       coreFileNam
149b0 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f  e = Installer.Co
149c0 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  reFileName;.... 
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
149f0 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
14a00 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
14a10 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
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 63 6f 6e 66 69 67 75 72 61         configura
14a40 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20  tion.directory, 
14a50 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
14a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
14a80 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
14a90 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
14aa0 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  n.linqFileName;.
14ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14ad0 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
14ae0 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
14af0 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
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 6c 69 6e 71 46 69 6c           linqFil
14b20 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74  eName = Path.Get
14b30 46 69 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c  FileName(linqFil
14b40 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
14b70 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
14b80 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  linqFileName))..
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bb0 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49  linqFileName = I
14bc0 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
14bd0 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bf0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
14c00 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
14c10 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
14c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
14c50 64 69 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46  directory, linqF
14c60 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
14c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c80 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
14c90 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f  ef6FileName = co
14ca0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 65 66 36 46  nfiguration.ef6F
14cb0 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
14ce0 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
14cf0 79 28 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 0d  y(ef6FileName)).
14d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 20 65 66 36 46 69 6c 65 4e 61 6d 65 20 3d 20 50   ef6FileName = P
14d30 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28  ath.GetFileName(
14d40 65 66 36 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ef6FileName);...
14d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
14d70 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
14d80 45 6d 70 74 79 28 65 66 36 46 69 6c 65 4e 61 6d  Empty(ef6FileNam
14d90 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 65 66 36 46 69 6c 65 4e 61 6d 65       ef6FileName
14dc0 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 45 66 36   = Installer.Ef6
14dd0 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
14e00 72 61 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61  ration.ef6FileNa
14e10 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
14e20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
14e50 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 65 66 36  n.directory, ef6
14e60 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e80 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
14e90 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
14ea0 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
14eb0 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
14ec0 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
14ef0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
14f00 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
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 20 20 20                  
14f30 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
14f40 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65  e = Path.GetFile
14f50 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69 6c  Name(designerFil
14f60 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
14f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f80 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
14f90 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
14fa0 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
14fb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
14fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fd0 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
14fe0 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
14ff0 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
15000 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15030 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
15040 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
15050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
15080 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69 67  directory, desig
15090 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20  nerFileName);.. 
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
150e0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
150f0 65 66 36 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  ef6FileName"))..
15100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15110 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15140 74 69 6f 6e 2e 65 66 36 46 69 6c 65 4e 61 6d 65  tion.ef6FileName
15150 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
15180 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
15190 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
151a0 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61  n(newArg, "insta
151b0 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ll"))..         
151c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
151d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
151e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
151f0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
15200 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
15210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
15230 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
15240 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
15260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15280 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
15290 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
152a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
152d0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
152e0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15310 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
15320 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
15330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
15360 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
15370 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
15380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15390 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
153a0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
153b0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153e0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
153f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
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 69 66 20 28 73 74 72 69 63         if (stric
15420 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
15430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15440 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
15450 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
15480 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69   configuration.i
154d0 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76  nstall = (bool)v
154e0 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15510 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15520 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15530 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46  ewArg, "installF
15540 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20  lags"))..       
15550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15580 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50  object value = P
15590 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
155a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155b0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
155c0 66 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c  f(InstallFlags),
155d0 20 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d   text, true);...
155e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15600 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15610 0a 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 20 20 20 20 7b 0d 0a               {..
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15650 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15660 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15690 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
156a0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
156b0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
156c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
156e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
156f0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15720 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73 74 61    "Invalid insta
15730 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20  ll flags value: 
15740 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
15750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15760 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
15770 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72  splay(text)), tr
15780 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
157a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157b0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
157c0 20 20 20 20 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 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
157f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15810 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
15820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15830 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15850 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
15860 67 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c  guration.install
15870 46 6c 61 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c  Flags = (Install
15880 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20  Flags)value;..  
15890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
158d0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c  ption(newArg, "l
158e0 69 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  inqFileName"))..
158f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15900 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
15930 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
15940 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  e = text;..     
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
15980 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
15990 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46  on(newArg, "logF
159a0 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
159b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159e0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
159f0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74  .logFileName = t
15a00 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
15a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a30 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
15a40 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
15a50 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74  wArg, "noCompact
15a60 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
15aa0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
15ab0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
15ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
15ae0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
15af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
15b40 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
15b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
15b80 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
15b90 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
15ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15bc0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
15bd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c00 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
15c10 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
15c20 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
15c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c40 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
15c50 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
15c60 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
15c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15ca0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cc0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
15cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
15d00 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
15d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
15d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
15d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
15d70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
15d80 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29 76  ompact = (bool)v
15d90 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15dc0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
15dd0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
15de0 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c  ewArg, "noConsol
15df0 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
15e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15e10 0a 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 62 6f 6f               boo
15e30 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
15e40 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
15e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15e70 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
15e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
15ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ec0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
15ed0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
15ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f00 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
15f10 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
15f20 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f50 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
15f60 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
15f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
15fa0 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
15fb0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fd0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
15fe0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
15ff0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16020 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
16030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16050 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
16060 29 0d 0a 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 20 20 20 20                  
16080 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
16090 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160b0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
160c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
160e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
160f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16100 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
16110 43 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29  Console = (bool)
16120 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
16130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16140 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16150 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
16160 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
16170 6e 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74  newArg, "noDeskt
16180 6f 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  op"))..         
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
161a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
161c0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
161d0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
161e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16200 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
16210 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
16260 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
16270 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
162a0 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
162b0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
162f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
16300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
16330 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
16340 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
16350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16360 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
16370 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
16380 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
16390 20 20 20 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 20 20 20 20 20                  
163b0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
163c0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
163f0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
16420 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
16450 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16470 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16490 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
164a0 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c  oDesktop = (bool
164b0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
164c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
164e0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
164f0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
16500 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22  (newArg, "noLog"
16510 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
16520 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
16550 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
16560 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
16570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16590 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
165c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
165e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
165f0 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16620 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
16630 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
16640 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16670 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
16680 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20 20 20                  
166b0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
166c0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
166d0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
166e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166f0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
16700 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
16710 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
16750 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16770 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
16780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
167b0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
167e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
167f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
16820 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
16830 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  g = (bool)value;
16840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16850 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16870 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
16880 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
16890 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d  , "noNetFx20")).
168a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
168c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
168d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
168e0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
168f0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
16900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16910 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
16920 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
16930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16940 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16960 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
16970 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
16980 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169b0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
169c0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
169d0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
16a00 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
16a10 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
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 20 22 49                "I
16a40 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
16a50 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
16a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a80 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
16a90 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
16aa0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16ad0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
16ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b00 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 20 20 20 20 20 20 20 20 20                  
16b30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
16b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b60 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
16b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ba0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
16bb0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78  guration.noNetFx
16bc0 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  20 = (bool)value
16bd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16be0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c00 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
16c10 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
16c20 67 2c 20 22 6e 6f 4e 65 74 46 78 33 35 22 29 29  g, "noNetFx35"))
16c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
16c70 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
16c80 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
16cb0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
16d00 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
16d10 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d40 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
16d50 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
16d60 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16d90 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
16da0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
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 20 22                 "
16dd0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
16de0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
16df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e10 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
16e20 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
16e30 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
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 20 20 20 20 20 20 20 20 74                 t
16e60 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
16e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e90 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20 20 20 20 20 20 20                  
16ec0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
16ed0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f30 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
16f40 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
16f50 78 33 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x35 = (bool)valu
16f60 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
16f70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
16fa0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
16fb0 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 30 22 29  rg, "noNetFx40")
16fc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16fd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ff0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
17000 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
17010 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
17020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17030 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
17040 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
17050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17060 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
17090 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
170a0 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
170e0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
170f0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
17100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17120 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
17130 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
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 20 20 20 20 20                  
17160 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
17170 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
17180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
171b0 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
171c0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
17200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
17260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
172b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
172d0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
172e0 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  Fx40 = (bool)val
172f0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17320 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
17330 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
17340 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35 22  Arg, "noNetFx45"
17350 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17360 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17380 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
17390 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
173a0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
173d0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
17400 20 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 65                 e
17420 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
17430 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17460 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
17470 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
17480 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
174b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
174c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
17500 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
17510 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
17520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17530 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
17540 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
17550 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175b0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
175c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
175f0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
17640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
17660 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
17670 74 46 78 34 35 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx45 = (bool)va
17680 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
17690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
176a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
176b0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
176c0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
176d0 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78 34 35  wArg, "noNetFx45
176e0 31 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  1"))..          
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
17720 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
17730 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
17740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17760 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
17770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
177c0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
177d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
17800 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
17810 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
17850 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17880 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
17890 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
178a0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
178b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178c0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
178d0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
178e0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
178f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17920 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17940 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
17950 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
17980 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
179b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
179d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
17a00 4e 65 74 46 78 34 35 31 20 3d 20 28 62 6f 6f 6c  NetFx451 = (bool
17a10 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
17a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17a40 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
17a50 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
17a60 28 6e 65 77 41 72 67 2c 20 22 6e 6f 52 75 6e 74  (newArg, "noRunt
17a70 69 6d 65 56 65 72 73 69 6f 6e 22 29 29 0d 0a 20  imeVersion")).. 
17a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
17ac0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
17ad0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
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 69 66 20 28 76 61 6c 75 65         if (value
17b00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 65 72 72 6f 72 20            error 
17b50 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
17b60 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
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 20 54                 T
17b90 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
17ba0 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
17bb0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
17bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17be0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
17bf0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
17c20 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
17c30 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
17c70 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
17c80 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
17cb0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17ce0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
17d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d80 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
17d90 72 61 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65  ration.noRuntime
17da0 56 65 72 73 69 6f 6e 20 3d 20 28 62 6f 6f 6c 29  Version = (bool)
17db0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17de0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
17df0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
17e00 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65  newArg, "noTrace
17e10 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 62 6f 6f 6c              bool
17e50 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
17e60 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
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 69 66 20               if 
17e90 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
17ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ee0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
17ef0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
17f00 0a 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 20                  
17f20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
17f30 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
17f40 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17f70 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
17f80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
17f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
17fc0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
17fd0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
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 46 6f 72 44 69 73 70           ForDisp
18000 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
18010 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
18020 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
18050 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18070 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
18080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
180b0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
180e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
18100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18120 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
18130 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  race = (bool)val
18140 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18150 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18180 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
18190 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 35 22 29  Arg, "noVs2005")
181a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
181b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 62 6f 6f 6c 3f 20            bool? 
181e0 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
181f0 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18210 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
18220 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18240 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
18270 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44  ror = TraceOps.D
18280 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
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 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
182c0 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61  .Lowest, debugCa
182d0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18300 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
18310 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
18350 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
18360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
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 46 6f 72 44 69 73 70 6c 61         ForDispla
18390 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
183a0 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
183e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18400 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
18410 20 20 20 20 20 20 20 20 20 20 20 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 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
18440 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
184b0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32  figuration.noVs2
184c0 30 30 35 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  005 = (bool)valu
184d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
184e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
184f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18500 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
18510 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
18520 72 67 2c 20 22 6e 6f 56 73 32 30 30 38 22 29 29  rg, "noVs2008"))
18530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18540 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
18570 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
18580 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
185b0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
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 65 72 72               err
18600 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
18610 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
18620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18640 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
18650 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
18660 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
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 74 72 61 63              trac
18690 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
186a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
186d0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
186e0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
186f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18710 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
18720 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
18730 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18760 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
18770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18790 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20 20 20 20 20 20 20 20                  
187c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
187d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187f0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18830 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
18840 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
18850 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  08 = (bool)value
18860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18890 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
188a0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
188b0 67 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d  g, "noVs2010")).
188c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
188d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
188e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
18900 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
18910 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
18920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18930 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
18940 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
18990 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
189a0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
189e0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
189f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a10 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
18a20 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
18a30 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
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 20 20 22 49                "I
18a60 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
18a70 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
18a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
18ab0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
18ac0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
18af0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
18b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
18b60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
18bd0 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31  guration.noVs201
18be0 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  0 = (bool)value;
18bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
18c30 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
18c40 2c 20 22 6e 6f 56 73 32 30 31 32 22 29 29 0d 0a  , "noVs2012"))..
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
18c90 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
18ca0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
18cd0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18d00 20 20 20 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 65 72 72 6f 72             error
18d20 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
18d30 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
18d70 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
18d80 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
18d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18da0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
18db0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
18dc0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
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 20 20 20 22 49 6e               "In
18df0 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
18e00 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
18e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e30 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
18e40 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
18e50 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
18e80 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ee0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
18ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f10 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
18f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
18f60 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 32  uration.noVs2012
18f70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
18f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
18fc0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
18fd0 20 22 6e 6f 56 73 32 30 31 33 22 29 29 0d 0a 20   "noVs2013")).. 
18fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ff0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
19020 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
19030 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19050 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
19060 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19090 20 20 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 65 72 72 6f 72 20            error 
190b0 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67  = TraceOps.Debug
190c0 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AndTrace(..     
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
190f0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
19100 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61  est, debugCallba
19110 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
19120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19130 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
19140 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
19150 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 20 20 20 22 49 6e 76              "Inv
19180 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
19190 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
191a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
191d0 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
191e0 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
191f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19200 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
19210 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19240 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
19250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19270 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
19280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192e0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
192f0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20  ration.noVs2013 
19300 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
19310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19320 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19340 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
19350 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
19360 22 70 65 72 55 73 65 72 22 29 29 0d 0a 20 20 20  "perUser"))..   
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193a0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
193b0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
193c0 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
193f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19410 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
19440 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
19450 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19480 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
19490 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
194a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
194d0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
194e0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
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 20 20 22 49 6e 76 61 6c            "Inval
19510 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
19520 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19550 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
19560 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
19570 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
195a0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
195d0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19600 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
19610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19630 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19670 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
19680 74 69 6f 6e 2e 70 65 72 55 73 65 72 20 3d 20 28  tion.perUser = (
19690 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196d0 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
196e0 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 72 65  tion(newArg, "re
196f0 67 69 73 74 72 79 56 65 72 73 69 6f 6e 22 29 29  gistryVersion"))
19700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19710 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19730 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
19740 72 61 74 69 6f 6e 2e 72 65 67 69 73 74 72 79 56  ration.registryV
19750 65 72 73 69 6f 6e 20 3d 20 74 65 78 74 3b 0d 0a  ersion = text;..
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
197a0 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
197b0 22 73 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20  "strict"))..    
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
19800 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
19810 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
19840 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
19890 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
198a0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
198d0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
198e0 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
198f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19910 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
19920 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
19930 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
19960 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
19970 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
19980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
199b0 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
199c0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
199f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19a20 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
19a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
19a50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
19a80 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41        // NOTE: A
19af0 6c 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64  llow the command
19b00 20 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20   line arguments 
19b10 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
19b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b30 2f 2f 20 20 20 20 20 20 20 6f 76 65 72 72 69 64  //       overrid
19b40 65 20 74 68 65 20 22 73 74 72 69 63 74 6e 65 73  e the "strictnes
19b50 73 22 20 73 65 74 74 69 6e 67 0d 0a 20 20 20 20  s" setting..    
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19b80 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
19b90 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...      
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 20 20 20 73 74 72 69 63 74 20 3d 20 28        strict = (
19be0 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
19c30 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 68  tion(newArg, "th
19c40 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 22 29 29 0d  rowOnMissing")).
19c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 62 6f 6f 6c 3f 20 76 61          bool? va
19c90 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
19ca0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cc0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
19cd0 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19d20 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
19d30 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
19d70 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
19d80 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
19d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19da0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
19db0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
19dc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
19dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
19df0 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
19e00 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
19e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19e40 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
19e50 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
19e80 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
19e90 0a 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 20 20                  
19eb0 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19ef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
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 20 20 7d 0d 0a 0d 0a 20            }.... 
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
19f60 67 75 72 61 74 69 6f 6e 2e 74 68 72 6f 77 4f 6e  guration.throwOn
19f70 4d 69 73 73 69 6e 67 20 3d 20 28 62 6f 6f 6c 29  Missing = (bool)
19f80 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19fb0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
19fc0 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
19fd0 6e 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f  newArg, "traceFo
19fe0 72 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rmat"))..       
19ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a000 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
1a030 61 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74  aceFormat = text
1a040 3b 0d 0a 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 20 54                 T
1a060 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
1a070 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
1a080 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b  ion.traceFormat;
1a090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
1a0d0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
1a0e0 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69 74 79  , "tracePriority
1a0f0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1a110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a120 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
1a130 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  ct value = Parse
1a140 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  Enum(..         
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72         typeof(Tr
1a170 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65  acePriority), te
1a180 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20  xt, true);....  
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1a1b0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1a200 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1a210 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a240 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1a250 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1a260 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a280 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a290 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1a2a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a2d0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61 6c 75  Invalid {0} valu
1a2e0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
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 20 20 20 46 6f                Fo
1a310 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
1a320 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
1a330 2c 0d 0a 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 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a360 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
1a390 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a3c0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1a3f0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a410 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a430 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
1a440 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79 20  n.tracePriority 
1a450 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  = (TracePriority
1a460 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1a470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a480 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1a490 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63 6f  acePriority = co
1a4a0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
1a4b0 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1a4f0 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1a500 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72  ion(newArg, "ver
1a510 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20  bose"))..       
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a550 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
1a560 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
1a570 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a590 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
1a5a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5e0 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
1a5f0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
1a600 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a620 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1a630 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
1a640 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
1a680 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1a690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6b0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
1a6c0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
1a6d0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1a700 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
1a710 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
1a720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1a750 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
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 69 66 20 28 73 74 72           if (str
1a780 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
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 72 65 74 75 72 6e            return
1a7b0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
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 63 6f 6e 74 69             conti
1a7e0 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a800 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a820 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1a830 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c  .verbose = (bool
1a840 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a870 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1a880 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
1a890 28 6e 65 77 41 72 67 2c 20 22 76 73 56 65 72 73  (newArg, "vsVers
1a8a0 69 6f 6e 53 75 66 66 69 78 22 29 29 0d 0a 20 20  ionSuffix"))..  
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1a8f0 6f 6e 2e 76 73 56 65 72 73 69 6f 6e 53 75 66 66  on.vsVersionSuff
1a900 69 78 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  ix = text;..    
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1a940 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
1a950 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61  ion(newArg, "wha
1a960 74 49 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20  tIf"))..        
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
1a9a0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
1a9b0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
1a9c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9e0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1a9f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa30 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
1aa40 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1aa50 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa70 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1aa80 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
1aa90 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1aad0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1aae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab00 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
1ab10 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
1ab20 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1ab50 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
1ab60 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
1ab70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1aba0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
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 69 66 20 28 73 74 72 69          if (stri
1abd0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abf0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ac00 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1ac10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1ac30 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac50 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1ac80 77 68 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29 76  whatIf = (bool)v
1ac90 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1acb0 0d 0a 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 65 6c 73 65 20 69            else i
1acd0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
1ace0 65 77 41 72 67 2c 20 22 77 6f 77 36 34 22 29 29  ewArg, "wow64"))
1acf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
1ad30 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
1ad40 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
1ad70 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1adc0 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65  or = TraceOps.De
1add0 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20  bugAndTrace(..  
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1ae10 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c  Lowest, debugCal
1ae20 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1ae50 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1ae60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ae90 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
1aea0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
1aeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1aee0 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
1aef0 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1af20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1af30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af50 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
1af60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af80 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1af90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1afa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afb0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1afe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1b000 69 67 75 72 61 74 69 6f 6e 2e 77 6f 77 36 34 20  iguration.wow64 
1b010 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
1b020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b030 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1b060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
1b0a0 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
1b0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1b0e0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
1b0f0 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
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 74 72 61 63 65 43 61 6c 6c         traceCall
1b120 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1b130 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b150 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74        "Unsupport
1b160 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
1b170 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20  option: {0}",.. 
1b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1b1a0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c  orDisplay(arg)),
1b1b0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1b1c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1e0 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1b210 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b230 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1b240 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b260 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1b270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b280 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1b290 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
1b2a0 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
1b2b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1b2e0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1b2f0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b310 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1b320 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1b330 62 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61  back, e, traceCa
1b340 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1b350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b360 65 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20  error = "Failed 
1b370 74 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67  to modify config
1b380 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20  uration.";..    
1b390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b3b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1b3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b430 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
1b440 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
1b450 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
1b460 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1b470 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
1b480 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss(..           
1b490 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72       string[] ar
1b4a0 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
1b4b0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
1b4c0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
1b4d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b4e0 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d     bool strict,.
1b4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b500 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1b510 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
1b520 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
1b530 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b540 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
1b550 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b570 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
1b580 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1b5c0 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e  r = "Invalid con
1b5d0 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20  figuration.";.. 
1b5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1b600 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1b610 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
1b640 6d 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61  mbly = configura
1b650 74 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a  tion.assembly;..
1b660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b670 20 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62        if (assemb
1b680 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1b6c0 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73  r = "Invalid ass
1b6d0 65 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20  embly.";..      
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b710 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b730 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
1b740 2e 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20  .noTrace)..     
1b750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1b760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b770 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1b780 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c  onfiguration.noL
1b790 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  og &&..         
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7b0 20 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c     String.IsNull
1b7c0 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72  OrEmpty(configur
1b7d0 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
1b7e0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1b840 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
1b850 61 75 6c 74 20 6c 6f 67 20 66 69 6c 65 20 6e 61  ault log file na
1b860 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b880 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8a0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
1b8b0 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47 65 74  ogFileName = Get
1b8c0 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  LogFileName(..  
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74                "t
1b8f0 72 61 63 65 22 29 3b 0d 0a 20 20 20 20 20 20 20  race");..       
1b900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b960 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
1b990 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a  ion.noConsole)..
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 7b 0d 0a 20 20 20 20 20          {..     
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9f0 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1ba00 49 6e 20 76 65 72 62 6f 73 65 20 6d 6f 64 65 2c  In verbose mode,
1ba10 20 64 65 62 75 67 20 6f 75 74 70 75 74 20 28 74   debug output (t
1ba20 68 61 74 20 6d 65 65 74 73 0d 0a 20 20 20 20 20  hat meets..     
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1ba50 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20 70  the configured p
1ba60 72 69 6f 72 69 74 79 20 63 72 69 74 65 72 69 61  riority criteria
1ba70 29 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  ) will be..     
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba90 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1baa0 64 69 73 70 6c 61 79 65 64 20 74 6f 20 74 68 65  displayed to the
1bab0 20 63 6f 6e 73 6f 6c 65 3b 20 6f 74 68 65 72 77   console; otherw
1bac0 69 73 65 2c 20 74 72 61 63 65 0d 0a 20 20 20 20  ise, trace..    
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1baf0 20 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65   output (that me
1bb00 65 74 73 20 74 68 65 20 63 6f 6e 66 69 67 75 72  ets the configur
1bb10 65 64 20 70 72 69 6f 72 69 74 79 0d 0a 20 20 20  ed priority..   
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb30 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1bb40 20 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c    criteria) will
1bb50 20 62 65 20 64 69 73 70 6c 61 79 65 64 20 74 6f   be displayed to
1bb60 20 74 68 65 20 63 6f 6e 73 6f 6c 65 2e 0d 0a 20   the console... 
1bb70 20 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 2f 2f 0d 0a 20             //.. 
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bba0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
1bbb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
1bbc0 75 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug)..           
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bbe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 20 20 20 20 2f 2f 0d 0a 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 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
1bc30 20 41 64 64 20 74 68 65 20 63 6f 6e 73 6f 6c 65   Add the console
1bc40 20 74 72 61 63 65 20 6c 69 73 74 65 6e 65 72 20   trace listener 
1bc50 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..        
1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1bc80 20 6c 69 73 74 20 6f 66 20 74 72 61 63 65 20 6c   list of trace l
1bc90 69 73 74 65 6e 65 72 73 20 6d 61 69 6e 74 61 69  isteners maintai
1bca0 6e 65 64 20 62 79 0d 0a 20 20 20 20 20 20 20 20  ned by..        
1bcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcc0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1bcd0 20 74 68 65 20 54 72 61 63 65 4f 70 73 20 63 6c   the TraceOps cl
1bce0 61 73 73 20 28 69 2e 65 2e 20 6f 6e 6c 79 20 6d  ass (i.e. only m
1bcf0 65 73 73 61 67 65 73 0d 0a 20 20 20 20 20 20 20  essages..       
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd10 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1bd20 20 20 74 68 61 74 20 6d 65 65 74 20 74 68 65 20    that meet the 
1bd30 64 65 62 75 67 20 70 72 69 6f 72 69 74 79 20 77  debug priority w
1bd40 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 20 20  ill be..        
1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1bd70 20 73 65 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e   seen on the con
1bd80 73 6f 6c 65 29 2e 0d 0a 20 20 20 20 20 20 20 20  sole)...        
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bda0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1bdb0 20 20 20 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 20 54 72 61 63              Trac
1bdd0 65 4f 70 73 2e 53 65 74 75 70 44 65 62 75 67 4c  eOps.SetupDebugL
1bde0 69 73 74 65 6e 65 72 73 28 29 3b 0d 0a 20 20 20  isteners();..   
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be00 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1be70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 2f 2f 20 4e 4f 54 45 3a 20 41 64 64 20 74 68   // NOTE: Add th
1bea0 65 20 63 6f 6e 73 6f 6c 65 20 74 72 61 63 65 20  e console trace 
1beb0 6c 69 73 74 65 6e 65 72 20 74 6f 20 74 68 65 0d  listener to the.
1bec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bee0 20 2f 2f 20 20 20 20 20 20 20 6c 69 73 74 20 6f   //       list o
1bef0 66 20 62 75 69 6c 74 2d 69 6e 20 74 72 61 63 65  f built-in trace
1bf00 20 6c 69 73 74 65 6e 65 72 73 20 28 69 2e 65 2e   listeners (i.e.
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 2f 2f 20 20 20 20 20 20 20 6f 6e 6c 79 20    //       only 
1bf40 6d 65 73 73 61 67 65 73 20 74 68 61 74 20 6d 65  messages that me
1bf50 65 74 20 74 68 65 20 74 72 61 63 65 0d 0a 20 20  et the trace..  
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bf80 20 20 20 20 20 20 20 70 72 69 6f 72 69 74 79 20         priority 
1bf90 77 69 6c 6c 20 62 65 20 73 65 65 6e 20 6f 6e 20  will be seen on 
1bfa0 74 68 65 20 63 6f 6e 73 6f 6c 65 29 2e 0d 0a 20  the console)... 
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 20 20 20 20 20 20 20 20 2f                 /
1bfd0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65     Trace.Listene
1c000 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f  rs.Add(new Conso
1c010 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28  leTraceListener(
1c020 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
1c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c040 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1c050 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1c060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c070 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1c080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c0b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c0d0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
1c0e0 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20  oLog &&..       
1c0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c100 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49 73 4e       !String.IsN
1c110 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69  ullOrEmpty(confi
1c120 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
1c130 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1c170 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41  race.Listeners.A
1c180 64 64 28 6e 65 77 20 54 65 78 74 57 72 69 74 65  dd(new TextWrite
1c190 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 0d  rTraceListener(.
1c1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
1c1d0 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 0d  ogFileName));...
1c1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c210 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1c220 4e 4f 54 45 3a 20 54 65 63 68 6e 69 63 61 6c 6c  NOTE: Technicall
1c230 79 2c 20 77 65 20 63 72 65 61 74 65 64 20 74 68  y, we created th
1c240 65 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20  e log file...   
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 43 72           filesCr
1c290 65 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  eated++;..      
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1c2c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1c2f0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1c300 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f 6e 66  E: Dump the conf
1c310 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e  iguration now in
1c320 20 63 61 73 65 20 77 65 20 6e 65 65 64 20 74 6f   case we need to
1c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c340 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
1c350 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20  roubleshoot any 
1c360 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  issues...       
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c390 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
1c3a0 72 61 74 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f  ration.debugPrio
1c3b0 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69  rity <= TracePri
1c3c0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20  ority.Medium).. 
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1c3f0 74 69 6f 6e 2e 44 75 6d 70 28 64 65 62 75 67 43  tion.Dump(debugC
1c400 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20  allback);....   
1c410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c420 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
1c430 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74 79  on.tracePriority
1c440 20 3c 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74   <= TracePriorit
1c450 79 2e 4d 65 64 69 75 6d 29 0d 0a 20 20 20 20 20  y.Medium)..     
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
1c480 2e 44 75 6d 70 28 74 72 61 63 65 43 61 6c 6c 62  .Dump(traceCallb
1c490 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ack);....       
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c4b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c4c0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68       // NOTE: Sh
1c4d0 6f 77 20 77 68 65 72 65 20 77 65 20 61 72 65 20  ow where we are 
1c4e0 72 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64  running from and
1c4f0 20 68 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20   how we were..  
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b    //       invok
1c520 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...           
1c530 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 73 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e   string location
1c560 20 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61   = assembly.Loca
1c570 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tion;....       
1c580 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c590 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1c5a0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1c5b0 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20  y.MediumLow,..  
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1c5e0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1c5f0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1c600 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1c610 20 20 20 20 20 20 20 20 20 20 20 20 22 52 75 6e              "Run
1c620 6e 69 6e 67 20 65 78 65 63 75 74 61 62 6c 65 20  ning executable 
1c630 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  is: {0}", ForDis
1c640 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e 29 29 2c  play(location)),
1c650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c660 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1c670 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1c680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c690 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1c6a0 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1c6b0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 4c 6f 77 2c  ority.MediumLow,
1c6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c6d0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
1c6e0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
1c6f0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1c700 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e  "Original comman
1c730 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c  d line is: {0}",
1c740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c750 20 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f            Enviro
1c760 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e  nment.CommandLin
1c770 65 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  e), traceCategor
1c780 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c790 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c7a0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1c7b0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c7c0 4d 65 64 69 75 6d 4c 6f 77 2c 0d 0a 20 20 20 20  MediumLow,..    
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7e0 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1c7f0 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1c800 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1c810 0d 0a 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 22 52 75 6e 6e 69            "Runni
1c830 6e 67 20 70 72 6f 63 65 73 73 20 69 73 20 7b 30  ng process is {0
1c840 7d 2e 22 2c 20 49 73 36 34 42 69 74 50 72 6f 63  }.", Is64BitProc
1c850 65 73 73 28 29 20 3f 0d 0a 20 20 20 20 20 20 20  ess() ?..       
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 20 22 36 34 2d 62 69 74 22 20 3a 20       "64-bit" : 
1c880 22 33 32 2d 62 69 74 22 29 2c 20 74 72 61 63 65  "32-bit"), trace
1c890 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8b0 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
1c8c0 74 69 6f 6e 2e 77 68 61 74 49 66 29 0d 0a 20 20  tion.whatIf)..  
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1c900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c910 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1c920 3a 20 49 66 20 74 68 65 20 64 65 62 75 67 67 65  : If the debugge
1c930 72 20 69 73 20 61 74 74 61 63 68 65 64 20 61 6e  r is attached an
1c940 64 20 22 77 68 61 74 2d 69 66 22 0d 0a 20 20 20  d "what-if"..   
1c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c960 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f       //       mo
1c970 64 65 20 69 73 20 5b 6e 6f 77 5d 20 64 69 73 61  de is [now] disa
1c980 62 6c 65 64 2c 20 69 73 73 75 65 20 61 20 77 61  bled, issue a wa
1c990 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  rning...        
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c9d0 44 65 62 75 67 67 65 72 2e 49 73 41 74 74 61 63  Debugger.IsAttac
1c9e0 68 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  hed)..          
1c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca00 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1ca10 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1ca20 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 48 69 67  iority.MediumHig
1ca30 68 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h,..            
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca50 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1ca60 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1ca70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69     "Forced to di
1caa0 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c  sable \"what-if\
1cab0 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d  " mode with " +.
1cac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 22 64 65 62 75 67 67 65 72 20 61 74 74 61 63   "debugger attac
1caf0 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65  hed.", traceCate
1cb00 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb60 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1cb70 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
1cb80 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
1cb90 69 75 6d 48 69 67 68 2c 0d 0a 20 20 20 20 20 20  iumHigh,..      
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbb0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
1cbc0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
1cbd0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1cbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbf0 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e   "No actual chan
1cc00 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65  ges will be made
1cc10 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20   to this " +..  
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
1cc40 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74  m because \"what
1cc50 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e  -if\" mode is en
1cc60 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1cc90 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
1cca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1cce0 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d  OTE: If the comm
1ccf0 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74  and line has not
1cd00 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a   been manually..
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e      //       con
1cd30 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61  firmed (i.e. via
1cd40 20 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f   the explicit co
1cd50 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29  //       option)
1cd80 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63  , then stop proc
1cd90 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20  essing now.  We 
1cda0 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20  enforce..       
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1cdc0 20 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20        this rule 
1cdd0 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64  so that simply d
1cde0 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74  ouble-clicking t
1cdf0 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
1ce00 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ce10 20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c   executable will
1ce20 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61   not result in a
1ce30 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67  ny changes being
1ce40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ce50 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d        //       m
1ce60 61 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65  ade to the syste
1ce70 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m...            
1ce80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
1ceb0 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20  on.confirm)..   
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1cef0 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74  r = "Cannot cont
1cf00 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66  inue, the \"conf
1cf10 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20  irm\" option is 
1cf20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b   "not enabled.";
1cf50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1cf70 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1cf90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cfa0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1cfb0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1cfc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cfd0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
1cfe0 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d010 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
1d020 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
1d030 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
1d040 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1d050 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1d060 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1d070 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61  Callback, e, tra
1d080 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0a0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
1d0b0 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63  led to process c
1d0c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d  onfiguration.";.
1d0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d0e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d0f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d100 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d110 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d120 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d160 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d170 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
1d180 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
1d190 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
1d1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
1d1b0 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
1d1c0 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73  CheckRuntimeVers
1d1d0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1d1e0 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
1d1f0 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
1d200 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1d210 20 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c      bool strict,
1d220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d230 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1d240 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1d250 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1d260 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d270 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
1d280 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2a0 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
1d2b0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1d2f0 6f 72 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f  or = "Invalid co
1d300 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d320 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1d330 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1d340 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d360 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1d370 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1d380 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f  OTE: What versio
1d390 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65  n of the runtime
1d3a0 20 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70   was the core (p
1d3b0 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20  rimary)..       
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d3d0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63        assembly c
1d3e0 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against 
1d3f0 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32  (e.g. "v2.0.5072
1d400 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  7" or..         
1d410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1d420 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22      "v4.0.30319"
1d430 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
1d440 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65  string coreImage
1d470 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
1d480 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
1d490 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
1d4c0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
1d4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d4e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d500 20 4e 4f 54 45 3a 20 57 65 20 61 6c 6c 6f 77 20   NOTE: We allow 
1d510 74 68 65 20 61 63 74 75 61 6c 20 69 6d 61 67 65  the actual image
1d520 20 72 75 6e 74 69 6d 65 20 63 68 65 63 6b 69 6e   runtime checkin
1d530 67 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  g to be..       
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d550 20 20 20 20 20 20 62 79 70 61 73 73 65 64 20 76        bypassed v
1d560 69 61 20 74 68 65 20 22 2d 6e 6f 52 75 6e 74 69  ia the "-noRunti
1d570 6d 65 56 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61  meVersion" comma
1d580 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1d5a0 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e 20 20 54        option.  T
1d5b0 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
1d5c0 6f 70 74 69 6f 6e 20 69 73 20 69 6e 74 65 6e 64  option is intend
1d5d0 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..        
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1d5f0 20 20 20 20 20 65 78 70 65 72 74 20 75 73 65 20       expert use 
1d600 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  only...         
1d610 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
1d640 74 69 6f 6e 2e 6e 6f 52 75 6e 74 69 6d 65 56 65  tion.noRuntimeVe
1d650 72 73 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  rsion)..        
1d660 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1d690 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
1d6a0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
1d6b0 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um,..           
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6d0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
1d6e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1d6f0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
1d720 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
1d730 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
1d740 61 6d 65 77 6f 72 6b 20 7b 30 7d 3b 20 22 20 2b  amework {0}; " +
1d750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68                "h
1d770 6f 77 65 76 65 72 2c 20 69 6e 73 74 61 6c 6c 61  owever, installa
1d780 74 69 6f 6e 20 72 65 73 74 72 69 63 74 69 6f 6e  tion restriction
1d790 73 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73 20  s based on this 
1d7a0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7c0 20 22 66 61 63 74 20 68 61 76 65 20 62 65 65 6e   "fact have been
1d7d0 20 64 69 73 61 62 6c 65 64 20 76 69 61 20 74 68   disabled via th
1d7e0 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2e 22  e command line."
1d7f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1d800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1d810 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1d820 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43 61  ersion), traceCa
1d830 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1d860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d870 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d890 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1d8a0 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a 20         // TODO: 
1d8b0 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f 6e  Restrict the con
1d8c0 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65 64  figuration based
1d8d0 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65 0d   on which image.
1d8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d8f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 75       //       ru
1d900 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20 28  ntime versions (
1d910 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65  which more-or-le
1d920 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a 20  ss correspond.. 
1d930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d940 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 2e     //       to .
1d950 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65  NET Framework ve
1d960 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70 70  rsions) are supp
1d970 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20 20  orted by the..  
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73 69    //       versi
1d9a0 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53 74  ons of Visual St
1d9b0 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69 6e  udio that are in
1d9c0 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20 20  stalled...      
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d9f0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1da00 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
1da10 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  oreImageRuntimeV
1da20 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  ersion))..      
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1da40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1da50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1da60 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20 66   "invalid core f
1da70 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
1da80 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  e version";..   
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1dab0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1dac0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1dae0 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e 45  lse if (String.E
1daf0 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20 20  quals(..        
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75 6e      coreImageRun
1db20 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
1db30 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1db40 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
1db70 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a  ison.Ordinal))..
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1dbb0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1dbc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1dbd0 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
1dbe0 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v2.0 runtime, ma
1dbf0 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
1dc00 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dc20 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
1dc30 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
1dc40 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
1dc50 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dc70 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
1dc80 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
1dc90 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 74 20  e CLR v4.0.  It 
1dca0 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
1dcb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1dcc0 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e 20 69       uncertain i
1dcd0 66 20 74 68 69 73 20 69 73 20 61 63 74 75 61 6c  f this is actual
1dce0 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d  ly a problem in.
1dcf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dd00 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1dd10 20 20 70 72 61 63 74 69 63 65 20 61 73 20 74 68    practice as th
1dd20 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c  e CLR v4.0 can l
1dd30 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a  oad and use an..
1dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd50 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1dd60 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
1dd70 65 64 20 77 69 74 68 20 74 68 65 20 43 4c 52 20  ed with the CLR 
1dd80 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a  v2.0; however,..
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dda0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1ddb0 20 73 69 6e 63 65 20 74 68 69 73 20 70 72 6f 6a   since this proj
1ddc0 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74 68 20  ect offers both 
1ddd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d  configurations,.
1dde0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ddf0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1de00 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 64    we currently d
1de10 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73  isallow this mis
1de20 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  match...        
1de30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de40 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1de50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
1de60 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
1de70 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x40 = true;..   
1de80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de90 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1dea0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 35 20 3d 20 74  on.noNetFx45 = t
1deb0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1dec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1ded0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
1dee0 74 46 78 34 35 31 20 3d 20 74 72 75 65 3b 0d 0a  tFx451 = true;..
1def0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df00 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1df10 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d  ation.noVs2010 =
1df20 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
1df50 56 73 32 30 31 32 20 3d 20 74 72 75 65 3b 0d 0a  Vs2012 = true;..
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
1df80 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 33 20 3d  ation.noVs2013 =
1df90 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfb0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
1dfc0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
1dfd0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
1dfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dff0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
1e000 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
1e010 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1e020 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1e030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e040 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
1e050 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
1e060 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
1e070 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e090 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
1e0a0 74 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46  t for the .NET F
1e0b0 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20  ramework {1} is 
1e0c0 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d  now disabled.",.
1e0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4c 52               CLR
1e0f0 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  v2ImageRuntimeVe
1e100 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d 61 67  rsion, CLRv4Imag
1e110 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1e120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e140 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e160 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1e170 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
1e180 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c  if (String.Equal
1e190 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1b0 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
1e1c0 56 65 72 73 69 6f 6e 2c 20 43 4c 52 76 34 49 6d  Version, CLRv4Im
1e1d0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
1e1e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e200 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
1e210 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20 20  .Ordinal))..    
1e220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e260 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1e270 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30  For the CLR v4.0
1e280 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73   runtime, make s
1e290 75 72 65 20 77 65 20 64 69 73 61 62 6c 65 0d 0a  ure we disable..
1e2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2b0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e2c0 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74 6f 20   any attempt to 
1e2d0 75 73 65 20 69 74 20 66 6f 72 20 74 68 69 6e 67  use it for thing
1e2e0 73 20 74 68 61 74 20 72 65 71 75 69 72 65 0d 0a  s that require..
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1e310 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d   an assembly com
1e320 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 43 4c  piled for the CL
1e330 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...       
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1e370 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74  figuration.noNet
1e380 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20  Fx20 = true;..  
1e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3a0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
1e3b0 69 6f 6e 2e 6e 6f 4e 65 74 46 78 33 35 20 3d 20  ion.noNetFx35 = 
1e3c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1e3e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56  onfiguration.noV
1e3f0 73 32 30 30 35 20 3d 20 74 72 75 65 3b 0d 0a 20  s2005 = true;.. 
1e400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e410 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
1e420 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20  tion.noVs2008 = 
1e430 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  true;....       
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e450 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1e460 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1e470 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20  ority.Medium,.. 
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1e4a0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1e4b0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1e4c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1e4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4e0 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69       "Assembly i
1e4f0 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74  s compiled for t
1e500 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
1e510 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  k {0}, " +..    
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72 74          "support
1e540 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
1e550 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e  amework {1} is n
1e560 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a  ow disabled.",..
1e570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e580 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1e590 69 73 70 6c 61 79 28 43 4c 52 76 34 49 6d 61 67  isplay(CLRv4Imag
1e5a0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
1e5b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1e5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1e5d0 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49  orDisplay(CLRv2I
1e5e0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
1e5f0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
1e600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e610 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e620 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1e630 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e650 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1e660 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e680 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
1e690 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f          "unsuppo
1e6c0 72 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69  rted core file i
1e6d0 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
1e6e0 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20  sion " +..      
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e700 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74        "{0}, must
1e710 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c   be {1} or {2}",
1e720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1e740 72 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61  rDisplay(coreIma
1e750 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
1e760 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e780 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 32  ForDisplay(CLRv2
1e790 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
1e7a0 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion),..         
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
1e7d0 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  Rv4ImageRuntimeV
1e7e0 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20  ersion));....   
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e800 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1e810 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1e820 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e840 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1e850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1e860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e870 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69    catch (Excepti
1e880 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20  on e)..         
1e890 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1e8b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
1e8c0 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
1e8d0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
1e8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e8f0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
1e900 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
1e910 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74 65 67  k, e, traceCateg
1e920 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1e940 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
1e950 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74  check image runt
1e960 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a  ime version.";..
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e990 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1e9a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1e9b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
1e9c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1e9d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
1ea30 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74 68  ion Private Meth
1ea40 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
1ea50 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
1ea60 47 65 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  GetInvariantName
1ea70 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
1ea80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ea90 20 20 20 72 65 74 75 72 6e 20 49 73 45 66 36 53     return IsEf6S
1eaa0 75 70 70 6f 72 74 65 64 28 29 20 3f 20 45 66 36  upported() ? Ef6
1eab0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3a 20  InvariantName : 
1eac0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 3b 0d 0a  InvariantName;..
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1eae0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1eaf0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1eb00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1eb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1eb50 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1eb60 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a  Public Methods..
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1eb80 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73  ic bool HasFlags
1eb90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1eba0 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20     InstallFlags 
1ebb0 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20  hasFlags,..     
1ebc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1ebd0 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  all..           
1ebe0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1ebf0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ec00 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29 0d         if (all).
1ec10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ec20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e       return ((in
1ec30 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73  stallFlags & has
1ec40 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c 61  Flags) == hasFla
1ec50 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  gs);..          
1ec60 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec80 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c  return ((install
1ec90 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73  Flags & hasFlags
1eca0 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  ) != InstallFlag
1ecb0 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20  s.None);..      
1ecc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ecd0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ece0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ecf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1ed20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1ed30 20 62 6f 6f 6c 20 49 73 4c 69 6e 71 53 75 70 70   bool IsLinqSupp
1ed40 6f 72 74 65 64 28 29 0d 0a 20 20 20 20 20 20 20  orted()..       
1ed50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ed60 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1ed80 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  OTE: Return non-
1ed90 7a 65 72 6f 20 69 66 20 74 68 65 20 53 79 73 74  zero if the Syst
1eda0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
1edb0 69 6e 71 0d 0a 20 20 20 20 20 20 20 20 20 20 20  inq..           
1edc0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73       //       as
1edd0 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65  sembly should be
1ede0 20 70 72 6f 63 65 73 73 65 64 20 64 75 72 69 6e   processed durin
1edf0 67 20 74 68 65 20 69 6e 73 74 61 6c 6c 2e 0d 0a  g the install...
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee10 2f 2f 20 20 20 20 20 20 20 49 66 20 74 68 65 20  //       If the 
1ee20 74 61 72 67 65 74 20 69 73 20 56 69 73 75 61 6c  target is Visual
1ee30 20 53 74 75 64 69 6f 20 32 30 30 35 2c 20 74 68   Studio 2005, th
1ee40 69 73 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  is must..       
1ee50 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1ee60 20 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a    return zero...
1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee80 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1ee90 20 20 20 20 72 65 74 75 72 6e 20 21 6e 6f 4e 65      return !noNe
1eea0 74 46 78 33 35 20 7c 7c 20 21 6e 6f 4e 65 74 46  tFx35 || !noNetF
1eeb0 78 34 30 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34  x40 || !noNetFx4
1eec0 35 20 7c 7c 20 21 6e 6f 4e 65 74 46 78 34 35 31  5 || !noNetFx451
1eed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1eee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1ef40 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
1ef50 73 45 66 36 53 75 70 70 6f 72 74 65 64 28 29 0d  sEf6Supported().
1ef60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef80 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1ef90 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74      // NOTE: Ret
1efa0 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20  urn non-zero if 
1efb0 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
1efc0 53 51 4c 69 74 65 2e 45 46 36 0d 0a 20 20 20 20  SQLite.EF6..    
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1efe0 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 73 68       assembly sh
1eff0 6f 75 6c 64 20 62 65 20 70 72 6f 63 65 73 73 65  ould be processe
1f000 64 20 64 75 72 69 6e 67 20 74 68 65 20 69 6e 73  d during the ins
1f010 74 61 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20  tall...         
1f020 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1f030 49 66 20 74 68 65 20 74 61 72 67 65 74 20 69 73  If the target is
1f040 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
1f050 30 30 35 20 6f 72 20 56 69 73 75 61 6c 0d 0a 20  005 or Visual.. 
1f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f070 2f 20 20 20 20 20 20 20 53 74 75 64 69 6f 20 32  /       Studio 2
1f080 30 30 38 2c 20 74 68 69 73 20 6d 75 73 74 20 72  008, this must r
1f090 65 74 75 72 6e 20 7a 65 72 6f 2e 20 20 41 6c 73  eturn zero.  Als
1f0a0 6f 2c 20 69 66 0d 0a 20 20 20 20 20 20 20 20 20  o, if..         
1f0b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1f0c0 74 68 65 20 45 46 36 20 63 6f 72 65 20 61 73 73  the EF6 core ass
1f0d0 65 6d 62 6c 79 20 69 73 20 75 6e 61 76 61 69 6c  embly is unavail
1f0e0 61 62 6c 65 2c 20 74 68 69 73 20 6d 75 73 74 0d  able, this must.
1f0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f100 20 2f 2f 20 20 20 20 20 20 20 72 65 74 75 72 6e   //       return
1f110 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 20 20   zero...        
1f120 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1f130 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f140 6e 6f 4e 65 74 46 78 34 30 20 26 26 20 6e 6f 4e  noNetFx40 && noN
1f150 65 74 46 78 34 35 20 26 26 20 6e 6f 4e 65 74 46  etFx45 && noNetF
1f160 78 34 35 31 29 0d 0a 20 20 20 20 20 20 20 20 20  x451)..         
1f170 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f180 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1f190 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f1a0 72 6e 20 49 73 53 79 73 74 65 6d 45 66 36 41 73  rn IsSystemEf6As
1f1b0 73 65 6d 62 6c 79 41 76 61 69 6c 61 62 6c 65 28  semblyAvailable(
1f1c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1f1d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f1e0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1f1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f220 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1f230 20 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d      public Assem
1f240 62 6c 79 4e 61 6d 65 20 47 65 74 43 6f 72 65 41  blyName GetCoreA
1f250 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a  ssemblyName() /*
1f260 20 52 45 51 55 49 52 45 44 20 2a 2f 0d 0a 20 20   REQUIRED */..  
1f270 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f290 28 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d  (coreAssemblyNam
1f2a0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 63 6f 72 65 41 73 73 65 6d 62 6c 79 4e     coreAssemblyN
1f2e0 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
1f2f0 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
1f300 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 72               Cor
1f320 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74  eFileName); /* t
1f330 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
1f340 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f360 74 75 72 6e 20 63 6f 72 65 41 73 73 65 6d 62 6c  turn coreAssembl
1f370 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
1f380 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f390 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3d0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f3e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
1f3f0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 4c  ssemblyName GetL
1f400 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  inqAssemblyName(
1f410 29 20 2f 2a 20 4f 50 54 49 4f 4e 41 4c 20 2a 2f  ) /* OPTIONAL */
1f420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f440 20 69 66 20 28 49 73 4c 69 6e 71 53 75 70 70 6f   if (IsLinqSuppo
1f450 72 74 65 64 28 29 20 26 26 20 28 6c 69 6e 71 41  rted() && (linqA
1f460 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d 20 6e  ssemblyName == n
1f470 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
1f480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
1f4a0 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  nqAssemblyName =
1f4b0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
1f4c0 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
1f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4e0 20 20 20 20 20 20 20 20 4c 69 6e 71 46 69 6c 65          LinqFile
1f4f0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
1f500 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1f510 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f520 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f530 6c 69 6e 71 41 73 73 65 6d 62 6c 79 4e 61 6d 65  linqAssemblyName
1f540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1f550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f5a0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1f5b0 20 20 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62     public Assemb
1f5c0 6c 79 4e 61 6d 65 20 47 65 74 45 66 36 41 73 73  lyName GetEf6Ass
1f5d0 65 6d 62 6c 79 4e 61 6d 65 28 29 20 2f 2a 20 4f  emblyName() /* O
1f5e0 50 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20  PTIONAL */..    
1f5f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f600 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49             if (I
1f610 73 45 66 36 53 75 70 70 6f 72 74 65 64 28 29 20  sEf6Supported() 
1f620 26 26 20 28 65 66 36 41 73 73 65 6d 62 6c 79 4e  && (ef6AssemblyN
1f630 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20  ame == null)).. 
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f660 20 20 20 20 20 20 65 66 36 41 73 73 65 6d 62 6c        ef6Assembl
1f670 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79  yName = Assembly
1f680 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79  Name.GetAssembly
1f690 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
1f6b0 66 36 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  f6FileName); /* 
1f6c0 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20  throw */..      
1f6d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f6f0 65 74 75 72 6e 20 65 66 36 41 73 73 65 6d 62 6c  eturn ef6Assembl
1f700 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  yName;..        
1f710 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f720 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f760 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1f770 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
1f780 73 73 65 6d 62 6c 79 4e 61 6d 65 20 47 65 74 44  ssemblyName GetD
1f790 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
1f7a0 61 6d 65 28 29 20 2f 2a 20 52 45 51 55 49 52 45  ame() /* REQUIRE
1f7b0 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  D */..          
1f7c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f7d0 20 20 20 20 20 69 66 20 28 64 65 73 69 67 6e 65       if (designe
1f7e0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 3d  rAssemblyName ==
1f7f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1f800 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1f820 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e  esignerAssemblyN
1f830 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61  ame = AssemblyNa
1f840 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61  me.GetAssemblyNa
1f850 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 73               Des
1f870 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 20  ignerFileName); 
1f880 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8b0 20 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65    return designe
1f8c0 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a  rAssemblyName;..
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1f8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f940 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 47 65  public string Ge
1f950 74 43 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74  tConfigInvariant
1f960 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20 20 20 20  Name()..        
1f970 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
1f990 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29  tInvariantName()
1f9a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1f9b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
1fa10 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
1fa20 20 47 65 74 50 72 6f 76 69 64 65 72 49 6e 76 61   GetProviderInva
1fa30 72 69 61 6e 74 4e 61 6d 65 28 29 0d 0a 20 20 20  riantName()..   
1fa40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1fa50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1fa60 72 6e 20 47 65 74 49 6e 76 61 72 69 61 6e 74 4e  rn GetInvariantN
1fa70 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame();..        
1fa80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fa90 20 20 20 20 20 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 2f 2f 2f  ////////////////
1fab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fad0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1fae0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1faf0 74 72 69 6e 67 20 47 65 74 46 61 63 74 6f 72 79  tring GetFactory
1fb00 54 79 70 65 4e 61 6d 65 28 29 0d 0a 20 20 20 20  TypeName()..    
1fb10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fb20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1fb30 6e 20 49 73 45 66 36 53 75 70 70 6f 72 74 65 64  n IsEf6Supported
1fb40 28 29 20 3f 20 45 66 36 46 61 63 74 6f 72 79 54  () ? Ef6FactoryT
1fb50 79 70 65 4e 61 6d 65 20 3a 20 46 61 63 74 6f 72  ypeName : Factor
1fb60 79 54 79 70 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  yTypeName;..    
1fb70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fb80 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1fb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1fbd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1fbe0 69 63 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20  ic AssemblyName 
1fbf0 47 65 74 50 72 6f 76 69 64 65 72 41 73 73 65 6d  GetProviderAssem
1fc00 62 6c 79 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20  blyName()..     
1fc10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fc20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1fc30 20 49 73 45 66 36 53 75 70 70 6f 72 74 65 64 28   IsEf6Supported(
1fc40 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
1fc50 20 20 20 20 20 20 20 20 20 47 65 74 45 66 36 41           GetEf6A
1fc60 73 73 65 6d 62 6c 79 4e 61 6d 65 28 29 20 3a 20  ssemblyName() : 
1fc70 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79 4e  GetCoreAssemblyN
1fc80 61 6d 65 28 29 3b 20 2f 2a 20 74 68 72 6f 77 20  ame(); /* throw 
1fc90 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
1fca0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fcb0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1fcc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fcf0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1fd00 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
1fd10 44 75 6d 70 28 0d 0a 20 20 20 20 20 20 20 20 20  Dump(..         
1fd20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
1fd30 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
1fd40 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
1fd50 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
1fd60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fd70 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43        if (traceC
1fd80 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c 29  allback != null)
1fd90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fda0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fdb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1fdc0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
1fdd0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
1fde0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe00 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46 6f    "Assembly", Fo
1fe10 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62 6c  rDisplay(assembl
1fe20 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1fe40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1fe50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1fe70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1fe80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1fe90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
1fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
1feb0 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  ogFileName", For
1fec0 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65 4e  Display(logFileN
1fed0 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ame)),..        
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fef0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ff00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ff10 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
1ff20 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
1ff30 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
1ff40 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
1ff50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff60 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f 72  "Directory", For
1ff70 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72  Display(director
1ff80 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  y)),..          
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ffa0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1ffb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffc0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
1ffd0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
1ffe0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
1fff0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
20010 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  oreFileName", Fo
20020 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69 6c  rDisplay(coreFil
20030 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20050 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20060 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20070 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20080 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
20090 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
200a0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 22    "LinqFileName"
200d0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69 6e  , ForDisplay(lin
200e0 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20100 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20110 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20120 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20130 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20140 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20150 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20170 20 20 20 20 20 20 22 45 66 36 46 69 6c 65 4e 61        "Ef6FileNa
20180 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
20190 65 66 36 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a  ef6FileName)),..
201a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
201b0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
201c0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
201d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
201e0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
201f0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20200 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
20210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20220 20 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65          "Designe
20230 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44  rFileName", ForD
20240 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46  isplay(designerF
20250 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
20280 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20290 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
202a0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
202b0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
202c0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
202d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202e0 20 20 20 20 22 52 65 67 69 73 74 72 79 56 65 72      "RegistryVer
202f0 73 69 6f 6e 22 2c 20 46 6f 72 44 69 73 70 6c 61  sion", ForDispla
20300 79 28 72 65 67 69 73 74 72 79 56 65 72 73 69 6f  y(registryVersio
20310 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
20320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20330 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
20340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20350 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
20360 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
20370 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
20380 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
203a0 6f 6e 66 69 67 56 65 72 73 69 6f 6e 22 2c 20 46  onfigVersion", F
203b0 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
203c0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
203d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203e0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
203f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20400 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20410 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
20420 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
20430 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20450 20 20 20 20 22 56 73 56 65 72 73 69 6f 6e 53 75      "VsVersionSu
20460 66 66 69 78 22 2c 20 46 6f 72 44 69 73 70 6c 61  ffix", ForDispla
20470 79 28 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  y(vsVersionSuffi
20480 78 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  x)),..          
20490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
204a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
204b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
204c0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
204d0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
204e0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
204f0 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44                "D
20510 65 62 75 67 46 6f 72 6d 61 74 22 2c 20 46 6f 72  ebugFormat", For
20520 44 69 73 70 6c 61 79 28 64 65 62 75 67 46 6f 72  Display(debugFor
20530 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
20540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20550 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20560 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20570 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20580 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20590 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
205a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205c0 22 54 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46  "TraceFormat", F
205d0 6f 72 44 69 73 70 6c 61 79 28 74 72 61 63 65 46  orDisplay(traceF
205e0 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20  ormat)),..      
205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20600 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20610 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20620 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20630 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
20640 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
20650 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22    "InstallFlags"
20680 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73  , ForDisplay(ins
20690 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20  tallFlags)),..  
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
206c0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
206d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
206e0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
206f0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20700 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20720 20 20 20 20 20 20 22 44 65 62 75 67 50 72 69 6f        "DebugPrio
20730 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  rity", ForDispla
20740 79 28 64 65 62 75 67 50 72 69 6f 72 69 74 79 29  y(debugPriority)
20750 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20790 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
207a0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
207b0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
207c0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
207d0 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61              "Tra
207e0 63 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72  cePriority", For
207f0 44 69 73 70 6c 61 79 28 74 72 61 63 65 50 72 69  Display(tracePri
20800 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20  ority)),..      
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20820 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20840 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20850 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
20860 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
20870 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 20 20 22 50 65 72 55 73 65 72 22 2c 20 46 6f 72    "PerUser", For
208a0 44 69 73 70 6c 61 79 28 70 65 72 55 73 65 72 29  Display(perUser)
208b0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
208c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
208d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208f0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20900 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20910 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20920 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20930 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
20940 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61  tall", ForDispla
20950 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20  y(install)),..  
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20980 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
209a0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
209b0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
209c0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
209d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209e0 20 20 20 20 20 20 22 57 6f 77 36 34 22 2c 20 46        "Wow64", F
209f0 6f 72 44 69 73 70 6c 61 79 28 77 6f 77 36 34 29  orDisplay(wow64)
20a00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20a10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20a20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20a50 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20a60 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20a70 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20a80 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 52              "NoR
20a90 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 22 2c 20  untimeVersion", 
20aa0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 52 75 6e  ForDisplay(noRun
20ab0 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  timeVersion)),..
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
20ae0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
20b00 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
20b10 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
20b20 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b40 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b 74          "NoDeskt
20b50 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  op", ForDisplay(
20b60 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20 20  noDesktop)),..  
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
20b90 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20bb0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
20bc0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
20bd0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bf0 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63 74        "NoCompact
20c00 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
20c10 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20 20  Compact)),..    
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
20c40 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
20c50 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
20c60 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
20c70 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
20c80 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22 2c      "NoNetFx20",
20cb0 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65   ForDisplay(noNe
20cc0 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20 20  tFx20)),..      
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ce0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
20cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20d00 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
20d10 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
20d20 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
20d30 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 20 20 22 4e 6f 4e 65 74 46 78 33 35 22 2c 20 46    "NoNetFx35", F
20d60 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46  orDisplay(noNetF
20d70 78 33 35 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  x35)),..        
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20db0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
20dc0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
20dd0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
20de0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e00 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72  "NoNetFx40", For
20e10 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34  Display(noNetFx4
20e20 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0)),..          
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20e40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
20e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20e60 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
20e70 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
20e80 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
20e90 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
20eb0 6f 4e 65 74 46 78 34 35 22 2c 20 46 6f 72 44 69  oNetFx45", ForDi
20ec0 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 29  splay(noNetFx45)
20ed0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20ef0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f10 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20f20 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20f30 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20f40 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
20f50 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e              "NoN
20f60 65 74 46 78 34 35 31 22 2c 20 46 6f 72 44 69 73  etFx451", ForDis
20f70 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 35 31 29  play(noNetFx451)
20f80 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
20f90 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
20fa0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fc0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
20fd0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
20fe0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
20ff0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
21000 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
21010 73 32 30 30 35 22 2c 20 46 6f 72 44 69 73 70 6c  s2005", ForDispl
21020 61 79 28 6e 6f 56 73 32 30 30 35 29 29 2c 0d 0a  ay(noVs2005)),..
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
21050 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
21060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21070 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
21080 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
21090 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210b0 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 30          "NoVs200
210c0 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  8", ForDisplay(n
210d0 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20 20  oVs2008)),..    
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210f0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
21100 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
21110 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
21120 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
21130 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
21140 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21160 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c 20      "NoVs2010", 
21170 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
21180 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  010)),..        
21190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
211b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
211c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
211d0 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
211e0 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
211f0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 22 4e 6f 56 73 32 30 31 32 22 2c 20 46 6f 72 44  "NoVs2012", ForD
21220 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 32 29  isplay(noVs2012)
21230 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
21240 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21250 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21270 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
21280 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
21290 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
212a0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
212b0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
212c0 73 32 30 31 33 22 2c 20 46 6f 72 44 69 73 70 6c  s2013", ForDispl
212d0 61 79 28 6e 6f 56 73 32 30 31 33 29 29 2c 0d 0a  ay(noVs2013)),..
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
21300 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
21310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21320 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
21330 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
21340 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63 65          "NoTrace
21370 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
21380 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20 20  Trace)),..      
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213a0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
213b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
213c0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
213d0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
213e0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
213f0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46    "NoConsole", F
21420 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e 73  orDisplay(noCons
21430 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ole)),..        
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21450 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21470 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
21480 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
21490 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
214a0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73 70  "NoLog", ForDisp
214d0 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20  lay(noLog)),..  
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214f0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
21500 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
21520 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
21530 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
21540 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21560 20 20 20 20 20 20 22 54 68 72 6f 77 4f 6e 4d 69        "ThrowOnMi
21570 73 73 69 6e 67 22 2c 20 46 6f 72 44 69 73 70 6c  ssing", ForDispl
21580 61 79 28 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e  ay(throwOnMissin
21590 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  g)),..          
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
215b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
215c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
215d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
215e0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
215f0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
21600 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
21610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 57                "W
21620 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70 6c  hatIf", ForDispl
21630 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20 20  ay(whatIf)),..  
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21650 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
21660 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
21680 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
21690 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
216a0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216c0 20 20 20 20 20 20 22 44 65 62 75 67 22 2c 20 46        "Debug", F
216d0 6f 72 44 69 73 70 6c 61 79 28 64 65 62 75 67 29  orDisplay(debug)
216e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
216f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21700 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
21730 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
21740 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
21750 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
21760 20 20 20 20 20 20 20 20 20 20 20 20 22 56 65 72              "Ver
21770 62 6f 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  bose", ForDispla
21780 79 28 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20  y(verbose)),..  
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
217b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
217d0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
217e0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
217f0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21810 20 20 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c        "Confirm",
21820 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
21830 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  irm)),..        
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21850 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
21860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21870 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
21880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218b0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
218c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
218d0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
218e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
218f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21910 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
21920 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
21930 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
21940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21950 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
21960 73 65 6d 62 6c 79 54 69 74 6c 65 22 2c 0d 0a 20  semblyTitle",.. 
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
21990 73 70 6c 61 79 28 47 65 74 41 73 73 65 6d 62 6c  splay(GetAssembl
219a0 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c 79 29  yTitle(assembly)
219b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
219e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
219f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21a00 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
21a10 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
21a20 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
21a50 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22  lyConfiguration"
21a60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
21a80 6f 72 44 69 73 70 6c 61 79 28 47 65 74 41 73 73  orDisplay(GetAss
21a90 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69  emblyConfigurati
21aa0 6f 6e 28 61 73 73 65 6d 62 6c 79 29 29 29 2c 0d  on(assembly))),.
21ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
21ad0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
21ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21af0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21b00 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
21b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b40 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
21b60 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
21b70 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
21b80 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ba0 20 20 20 20 20 20 20 22 49 73 4c 69 6e 71 53 75         "IsLinqSu
21bb0 70 70 6f 72 74 65 64 22 2c 20 46 6f 72 44 69 73  pported", ForDis
21bc0 70 6c 61 79 28 49 73 4c 69 6e 71 53 75 70 70 6f  play(IsLinqSuppo
21bd0 72 74 65 64 28 29 29 29 2c 0d 0a 20 20 20 20 20  rted())),..     
21be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bf0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
21c00 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21c10 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
21c20 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
21c30 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
21c40 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 20 20 20 22 49 73 45 66 36 53 75 70 70 6f 72 74     "IsEf6Support
21c70 65 64 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ed", ForDisplay(
21c80 49 73 45 66 36 53 75 70 70 6f 72 74 65 64 28 29  IsEf6Supported()
21c90 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
21cb0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cd0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21d20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
21d30 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
21d40 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
21d50 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
21d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d70 22 47 65 74 43 6f 72 65 41 73 73 65 6d 62 6c 79  "GetCoreAssembly
21d80 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
21d90 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
21da0 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 43              GetC
21db0 6f 72 65 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  oreAssemblyName(
21dc0 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
21dd0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
21de0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
21df0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
21e00 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
21e10 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e30 20 20 20 20 20 22 47 65 74 4c 69 6e 71 41 73 73       "GetLinqAss
21e40 65 6d 62 6c 79 4e 61 6d 65 22 2c 20 46 6f 72 44  emblyName", ForD
21e50 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
21e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e70 20 47 65 74 4c 69 6e 71 41 73 73 65 6d 62 6c 79   GetLinqAssembly
21e80 4e 61 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43  Name())), traceC
21e90 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21eb0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
21ec0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
21ed0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
21ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21ef0 20 20 20 20 20 20 20 20 20 20 22 47 65 74 45 66            "GetEf
21f00 36 41 73 73 65 6d 62 6c 79 4e 61 6d 65 22 2c 20  6AssemblyName", 
21f10 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f30 20 20 20 20 20 47 65 74 45 66 36 41 73 73 65 6d       GetEf6Assem
21f40 62 6c 79 4e 61 6d 65 28 29 29 29 2c 20 74 72 61  blyName())), tra
21f50 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
21f80 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
21f90 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
21fa0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
21fc0 74 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c  tDesignerAssembl
21fd0 79 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  yName", ForDispl
21fe0 61 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay(..           
21ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74               Get
22000 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  DesignerAssembly
22010 4e 61 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43  Name())), traceC
22020 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
22030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22040 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22090 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
220a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
220b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
220c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47 65               "Ge
220e0 74 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c  tInvariantName",
220f0 20 46 6f 72 44 69 73 70 6c 61 79 28 47 65 74 49   ForDisplay(GetI
22100 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28 29 29 29  nvariantName()))
22110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22120 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
22130 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22150 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
22160 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
22170 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
22180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22190 20 20 20 20 20 20 20 20 20 20 20 22 47 65 74 43             "GetC
221a0 6f 6e 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61  onfigInvariantNa
221b0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
221c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
221d0 20 20 20 20 20 20 20 20 20 20 47 65 74 43 6f 6e            GetCon
221e0 66 69 67 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65  figInvariantName
221f0 28 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  ())), traceCateg
22200 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
22220 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
22230 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
22240 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22260 20 20 20 20 20 20 22 47 65 74 50 72 6f 76 69 64        "GetProvid
22270 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22  erInvariantName"
22280 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  , ForDisplay(.. 
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222a0 20 20 20 20 20 20 20 47 65 74 50 72 6f 76 69 64         GetProvid
222b0 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 28  erInvariantName(
222c0 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
222d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
222e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
222f0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
22300 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
22310 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22330 20 20 20 20 20 22 47 65 74 46 61 63 74 6f 72 79       "GetFactory
22340 54 79 70 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  TypeName", ForDi
22350 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
22360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22370 47 65 74 46 61 63 74 6f 72 79 54 79 70 65 4e 61  GetFactoryTypeNa
22380 6d 65 28 29 29 29 2c 20 74 72 61 63 65 43 61 74  me())), traceCat
22390 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
223a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
223b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
223c0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
223d0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223f0 20 20 20 20 20 20 20 20 22 47 65 74 50 72 6f 76          "GetProv
22400 69 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65  iderAssemblyName
22410 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a  ", ForDisplay(..
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 20 20 20 20 20 20 20 20 47 65 74 50 72 6f 76 69          GetProvi
22440 64 65 72 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28  derAssemblyName(
22450 29 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ))), traceCatego
22460 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
22470 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22480 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22490 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
224a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
224b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
224f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
22500 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
22510 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
22520 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22530 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c  Assembly assembl
22540 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
22550 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20  public Assembly 
22560 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  Assembly..      
22570 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22580 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22590 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20  eturn assembly; 
225a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
225b0 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c     set { assembl
225c0 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
225d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
225e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
225f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
22630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
22640 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67  ivate string log
22650 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
22660 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
22670 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65  ring LogFileName
22680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f   get { return lo
226b0 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  gFileName; }..  
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
226d0 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20  t { logFileName 
226e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
226f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22700 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
22710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
22750 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
22760 61 74 65 20 73 74 72 69 6e 67 20 64 69 72 65 63  ate string direc
22770 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tory;..         
22780 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
22790 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   Directory..    
227a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
227b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
227c0 20 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72   return director
227d0 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
227e0 20 20 20 20 20 20 73 65 74 20 7b 20 64 69 72 65        set { dire
227f0 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ctory = value; }
22800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
22820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22860 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
22870 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
22880 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a   coreFileName;..
22890 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
228a0 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69  ic string CoreFi
228b0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
228c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
228d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
228e0 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  urn coreFileName
228f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
22900 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46       set { coreF
22910 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
22920 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22940 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22980 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22990 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
229a0 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b  ng linqFileName;
229b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
229c0 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71  blic string Linq
229d0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
229e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
229f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22a00 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61  eturn linqFileNa
22a10 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
22a20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e         set { lin
22a30 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  qFileName = valu
22a40 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22a50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22a60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22aa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22ab0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22ac0 72 69 6e 67 20 65 66 36 46 69 6c 65 4e 61 6d 65  ring ef6FileName
22ad0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22ae0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 45 66 36  ublic string Ef6
22af0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
22b00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22b10 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
22b20 65 74 75 72 6e 20 65 66 36 46 69 6c 65 4e 61 6d  eturn ef6FileNam
22b30 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22b40 20 20 20 20 20 20 73 65 74 20 7b 20 65 66 36 46        set { ef6F
22b50 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
22b60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22b70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22b80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22bc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22bd0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
22be0 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
22bf0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
22c00 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
22c10 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
22c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c40 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
22c50 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
22c60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
22c70 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
22c80 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = valu
22c90 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
22ca0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22cb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22cf0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
22d00 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22d10 72 69 6e 67 20 72 65 67 69 73 74 72 79 56 65 72  ring registryVer
22d20 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  sion;..         
22d30 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
22d40 20 52 65 67 69 73 74 72 79 56 65 72 73 69 6f 6e   RegistryVersion
22d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d70 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 65   get { return re
22d80 67 69 73 74 72 79 56 65 72 73 69 6f 6e 3b 20 7d  gistryVersion; }
22d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22da0 20 20 73 65 74 20 7b 20 72 65 67 69 73 74 72 79    set { registry
22db0 56 65 72 73 69 6f 6e 20 3d 20 76 61 6c 75 65 3b  Version = value;
22dc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22dd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22de0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
22df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e20 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22e30 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
22e40 6e 67 20 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e  ng configVersion
22e50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
22e60 75 62 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 6e  ublic string Con
22e70 66 69 67 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  figVersion..    
22e80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22e90 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
22ea0 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 67 56 65   return configVe
22eb0 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20  rsion; }..      
22ec0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
22ed0 63 6f 6e 66 69 67 56 65 72 73 69 6f 6e 20 3d 20  configVersion = 
22ee0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
22ef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
22f00 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
22f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22f50 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
22f60 65 20 73 74 72 69 6e 67 20 76 73 56 65 72 73 69  e string vsVersi
22f70 6f 6e 53 75 66 66 69 78 3b 0d 0a 20 20 20 20 20  onSuffix;..     
22f80 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
22f90 72 69 6e 67 20 56 73 56 65 72 73 69 6f 6e 53 75  ring VsVersionSu
22fa0 66 66 69 78 0d 0a 20 20 20 20 20 20 20 20 20 20  ffix..          
22fb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22fc0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
22fd0 6e 20 76 73 56 65 72 73 69 6f 6e 53 75 66 66 69  n vsVersionSuffi
22fe0 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
22ff0 20 20 20 20 20 20 73 65 74 20 7b 20 76 73 56 65        set { vsVe
23000 72 73 69 6f 6e 53 75 66 66 69 78 20 3d 20 76 61  rsionSuffix = va
23010 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23020 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23030 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23070 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23080 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23090 73 74 72 69 6e 67 20 64 65 62 75 67 46 6f 72 6d  string debugForm
230a0 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
230b0 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
230c0 65 62 75 67 46 6f 72 6d 61 74 0d 0a 20 20 20 20  ebugFormat..    
230d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
230e0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
230f0 20 72 65 74 75 72 6e 20 64 65 62 75 67 46 6f 72   return debugFor
23100 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  mat; }..        
23110 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 65          set { de
23120 62 75 67 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75  bugFormat = valu
23130 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
23140 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23150 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23190 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
231a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
231b0 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
231c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
231d0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61  ublic string Tra
231e0 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
231f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23200 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
23210 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
23220 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
23230 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
23240 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
23250 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23260 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23270 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
232b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
232c0 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74      private Inst
232d0 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
232e0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
232f0 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61      public Insta
23300 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46  llFlags InstallF
23310 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
23320 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23330 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
23340 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20  n installFlags; 
23350 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
23360 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
23370 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
23380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
233a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
233e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
233f0 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
23400 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72 69  riority debugPri
23410 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
23420 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
23430 50 72 69 6f 72 69 74 79 20 44 65 62 75 67 50 72  Priority DebugPr
23440 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
23450 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23460 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
23470 75 72 6e 20 64 65 62 75 67 50 72 69 6f 72 69 74  urn debugPriorit
23480 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
23490 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 62 75        set { debu
234a0 67 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  gPriority = valu
234b0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
234c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
234d0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
234e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
234f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23510 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23520 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72        private Tr
23530 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
23540 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
23550 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54          public T
23560 72 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61  racePriority Tra
23570 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20  cePriority..    
23580 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23590 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
235a0 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69   return tracePri
235b0 6f 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20  ority; }..      
235c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
235d0 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
235e0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
235f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23600 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
23610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23650 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
23660 65 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 3b 0d  e bool perUser;.
23670 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
23680 6c 69 63 20 62 6f 6f 6c 20 50 65 72 55 73 65 72  lic bool PerUser
23690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
236a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
236b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 70 65   get { return pe
236c0 72 55 73 65 72 3b 20 7d 0d 0a 20 20 20 20 20 20  rUser; }..      
236d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
236e0 70 65 72 55 73 65 72 20 3d 20 76 61 6c 75 65 3b  perUser = value;
236f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23710 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23760 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
23770 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20   install;..     
23780 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
23790 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20  ol Install..    
237a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
237b0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
237c0 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b   return install;
237d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
237e0 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c      set { instal
237f0 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  l = value; }..  
23800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23810 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23870 69 76 61 74 65 20 62 6f 6f 6c 20 77 6f 77 36 34  ivate bool wow64
23880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
23890 75 62 6c 69 63 20 62 6f 6f 6c 20 57 6f 77 36 34  ublic bool Wow64
238a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
238b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 6f   get { return wo
238d0 77 36 34 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  w64; }..        
238e0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 6f          set { wo
238f0 77 36 34 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  w64 = value; }..
23900 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23910 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23970 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 52  private bool noR
23980 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
23990 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
239a0 69 63 20 62 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d  ic bool NoRuntim
239b0 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  eVersion..      
239c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
239d0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
239e0 65 74 75 72 6e 20 6e 6f 52 75 6e 74 69 6d 65 56  eturn noRuntimeV
239f0 65 72 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20  ersion; }..     
23a00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
23a10 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f   noRuntimeVersio
23a20 6e 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  n = value; }..  
23a30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23a40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
23a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
23a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
23aa0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73  ivate bool noDes
23ab0 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20  ktop;..         
23ac0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
23ad0 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20  oDesktop..      
23ae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23af0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
23b00 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b  eturn noDesktop;
23b10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23b20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b      set { noDesk
23b30 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  top = value; }..
23b40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
23b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23bb0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43  private bool noC
23bc0 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20 20  ompact;..       
23bd0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
23be0 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20   NoCompact..    
23bf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23c00 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
23c10 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63   return noCompac
23c20 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
23c30 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f        set { noCo
23c40 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d  mpact = value; }
23c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23c60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
23c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23cb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
23cc0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
23cd0 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20 20 20  oNetFx20;..     
23ce0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
23cf0 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20  ol NoNetFx20..  
23d00 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
23d20 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46   { return noNetF
23d30 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  x20; }..        
23d40 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
23d50 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75 65 3b  NetFx20 = value;
23d60 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23d70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23d80 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23dc0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
23dd0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
23de0 20 6e 6f 4e 65 74 46 78 33 35 3b 0d 0a 20 20 20   noNetFx35;..   
23df0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
23e00 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 33 35 0d 0a  bool NoNetFx35..
23e10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
23e30 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
23e40 74 46 78 33 35 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx35; }..      
23e50 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
23e60 6e 6f 4e 65 74 46 78 33 35 20 3d 20 76 61 6c 75  noNetFx35 = valu
23e70 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
23e80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23e90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ed0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23ee0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
23ef0 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
23f00 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
23f10 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
23f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
23f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f40 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
23f50 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
23f60 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
23f70 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
23f80 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
23f90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23fa0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
23fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23fe0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
23ff0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24000 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35 3b 0d  bool noNetFx45;.
24010 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
24020 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78  lic bool NoNetFx
24030 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  45..            
24040 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24050 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24060 6e 6f 4e 65 74 46 78 34 35 3b 20 7d 0d 0a 20 20  noNetFx45; }..  
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
24080 74 20 7b 20 6e 6f 4e 65 74 46 78 34 35 20 3d 20  t { noNetFx45 = 
24090 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
240a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
240b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
240c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
240f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24100 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24110 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 35  e bool noNetFx45
24120 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
24130 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65  public bool NoNe
24140 74 46 78 34 35 31 0d 0a 20 20 20 20 20 20 20 20  tFx451..        
24150 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24160 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
24170 75 72 6e 20 6e 6f 4e 65 74 46 78 34 35 31 3b 20  urn noNetFx451; 
24180 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
24190 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78     set { noNetFx
241a0 34 35 31 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  451 = value; }..
241b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
241c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
241d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24210 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24220 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
24230 73 32 30 30 35 3b 0d 0a 20 20 20 20 20 20 20 20  s2005;..        
24240 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
24250 4e 6f 56 73 32 30 30 35 0d 0a 20 20 20 20 20 20  NoVs2005..      
24260 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24270 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24280 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 35 3b 20  eturn noVs2005; 
24290 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
242a0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30     set { noVs200
242b0 35 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  5 = value; }..  
242c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
242d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
242e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
242f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
24330 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
24340 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  008;..          
24350 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
24360 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20 20 20  Vs2008..        
24370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24380 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
24390 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d  urn noVs2008; }.
243a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
243b0 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30 38 20   set { noVs2008 
243c0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
243d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
243e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
243f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24430 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24440 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31  ate bool noVs201
24450 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
24460 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73  public bool NoVs
24470 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20  2010..          
24480 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24490 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
244a0 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20  n noVs2010; }.. 
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
244c0 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20  et { noVs2010 = 
244d0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
244e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
244f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24540 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24550 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 32 3b  e bool noVs2012;
24560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
24570 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30  blic bool NoVs20
24580 31 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  12..            
24590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
245a0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
245b0 6e 6f 56 73 32 30 31 32 3b 20 7d 0d 0a 20 20 20  noVs2012; }..   
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
245d0 20 7b 20 6e 6f 56 73 32 30 31 32 20 3d 20 76 61   { noVs2012 = va
245e0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
245f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24600 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24640 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24650 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
24660 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 33 3b 0d 0a  bool noVs2013;..
24670 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24680 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 33  ic bool NoVs2013
24690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
246a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
246b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
246c0 56 73 32 30 31 33 3b 20 7d 0d 0a 20 20 20 20 20  Vs2013; }..     
246d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
246e0 20 6e 6f 56 73 32 30 31 33 20 3d 20 76 61 6c 75   noVs2013 = valu
246f0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24750 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24760 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
24770 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20  ol noTrace;..   
24780 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
24790 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20  bool NoTrace..  
247a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
247b0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
247c0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63   { return noTrac
247d0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
247e0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72        set { noTr
247f0 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ace = value; }..
24800 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24810 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
24820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24870 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43  private bool noC
24880 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20  onsole;..       
24890 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
248a0 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20   NoConsole..    
248b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
248c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
248d0 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c   return noConsol
248e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
248f0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f        set { noCo
24900 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d  nsole = value; }
24910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24970 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24980 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
24990 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20  oLog;..         
249a0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
249b0 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20  oLog..          
249c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
249d0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
249e0 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20  n noLog; }..    
249f0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
24a00 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b  { noLog = value;
24a10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
24a20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
24a30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
24a80 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
24a90 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 3b   throwOnMissing;
24aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
24ab0 62 6c 69 63 20 62 6f 6f 6c 20 54 68 72 6f 77 4f  blic bool ThrowO
24ac0 6e 4d 69 73 73 69 6e 67 0d 0a 20 20 20 20 20 20  nMissing..      
24ad0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24ae0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24af0 65 74 75 72 6e 20 74 68 72 6f 77 4f 6e 4d 69 73  eturn throwOnMis
24b00 73 69 6e 67 3b 20 7d 0d 0a 20 20 20 20 20 20 20  sing; }..       
24b10 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
24b20 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 20 3d 20  hrowOnMissing = 
24b30 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
24b40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
24b50 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24ba0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
24bb0 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a  e bool whatIf;..
24bc0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
24bd0 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a  ic bool WhatIf..
24be0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
24c00 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74  et { return what
24c10 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  If; }..         
24c20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 61         set { wha
24c30 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  tIf = value; }..
24c40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
24c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24cb0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 65 62  private bool deb
24cc0 75 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ug;..           
24cd0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 44 65 62   public bool Deb
24ce0 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ug..            
24cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24d00 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24d10 64 65 62 75 67 3b 20 7d 0d 0a 20 20 20 20 20 20  debug; }..      
24d20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
24d30 64 65 62 75 67 20 3d 20 76 61 6c 75 65 3b 20 7d  debug = value; }
24d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24d60 2f 2f 2f 2f 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 2f  ////////////////
24da0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24db0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76    private bool v
24dc0 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  erbose;..       
24dd0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
24de0 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   Verbose..      
24df0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24e00 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
24e10 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d  eturn verbose; }
24e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e30 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20    set { verbose 
24e40 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
24e50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24e60 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
24ec0 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d  ate bool confirm
24ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
24ee0 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69  ublic bool Confi
24ef0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
24f00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24f10 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
24f20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20  confirm; }..    
24f30 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
24f40 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75  { confirm = valu
24f50 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
24f60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
24f70 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
24f80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24f90 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
24fa0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
24ff0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
25000 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43   FrameworkList C
25010 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
25020 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
25030 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ss FrameworkList
25040 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25050 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
25060 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
25070 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
25080 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f    public Framewo
25090 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  rkList()..      
250a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
250b0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
250c0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
250d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
250e0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
250f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25140 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25150 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
25160 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
25170 20 20 20 20 20 70 72 69 76 61 74 65 20 4d 6f 63       private Moc
25180 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
25190 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  tKey;..         
251a0 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
251b0 67 69 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65  gistryKey RootKe
251c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
251d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72    get { return r
251f0 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20  ootKey; }..     
25200 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
25210 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65   rootKey = value
25220 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
25230 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25240 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25290 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72       private Str
252a0 69 6e 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a  ingList names;..
252b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
252c0 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61  ic StringList Na
252d0 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
252e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
252f0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
25300 20 6e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20   names; }..     
25310 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
25320 20 6e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20   names = value; 
25330 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
25340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25390 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
253a0 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73 69     private Versi
253b0 6f 6e 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d  onMap versions;.
253c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
253d0 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56  lic VersionMap V
253e0 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  ersions..       
253f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25400 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
25410 74 75 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d  turn versions; }
25420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25430 20 20 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73    set { versions
25440 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
25450 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25460 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
25470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
254a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
254b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
254c0 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20  vate StringList 
254d0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a  platformNames;..
254e0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
254f0 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c  ic StringList Pl
25500 61 74 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20  atformNames..   
25510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25520 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
25530 7b 20 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72  { return platfor
25540 6d 4e 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20  mNames; }..     
25550 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
25560 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d   platformNames =
25570 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
25580 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
25590 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
255a0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
255b0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
255c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
255d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25610 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
25620 65 67 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61  egion VsList Cla
25630 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
25640 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
25650 20 56 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20   VsList..       
25660 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25670 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43  #region Public C
25680 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
25690 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
256a0 56 73 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  VsList()..      
256b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
256c0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
256d0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
256e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
256f0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
25700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
25760 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
25770 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
25780 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25790 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
257a0 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20  rootKey;..      
257b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
257c0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f  kRegistryKey Roo
257d0 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
257e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
257f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
25800 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20  n rootKey; }..  
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
25820 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61  t { rootKey = va
25830 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
25840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25850 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
25860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25890 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
258a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
258b0 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73  VersionList vers
258c0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
258d0 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
258e0 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a  nList Versions..
258f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
25910 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73  et { return vers
25920 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ions; }..       
25930 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
25940 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b  ersions = value;
25950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
25960 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
25970 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
25980 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
25990 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
259a0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
259b0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
259c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25a00 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
25a10 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
25a20 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ant Data..      
25a30 20 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67    #region Packag
25a40 65 20 26 20 50 72 6f 76 69 64 65 72 20 4e 61 6d  e & Provider Nam
25a50 65 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  es..        priv
25a60 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
25a70 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   CoreFileName = 
25a80 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
25a90 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ite.dll";..     
25aa0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
25ab0 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65   string LinqFile
25ac0 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
25ad0 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
25ae0 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
25af0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
25b00 69 6e 67 20 45 66 36 46 69 6c 65 4e 61 6d 65 20  ing Ef6FileName 
25b10 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
25b20 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 22 3b 0d  QLite.EF6.dll";.
25b30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25b40 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
25b50 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
25b60 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
25b70 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  r.dll";..       
25b80 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
25b90 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72 4e 61  tring ProviderNa
25ba0 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44 61 74  me = "SQLite Dat
25bb0 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a 20 20  a Provider";..  
25bc0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
25bd0 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f 6a 65  nst string Proje
25be0 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  ctName = "System
25bf0 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b 0d 0a  .Data.SQLite";..
25c00 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
25c10 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 65 67  const string Leg
25c20 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  acyProjectName =
25c30 20 22 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20 20   "SQLite";....  
25c40 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
25c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25c90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25ca0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
25cb0 73 63 72 69 70 74 69 6f 6e 20 3d 0d 0a 20 20 20  scription =..   
25cc0 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
25cd0 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72  ramework Data Pr
25ce0 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
25cf0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  e";..        #en
25d00 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
25d10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
25d60 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
25d70 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 76 32  nst string CLRv2
25d80 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
25d90 69 6f 6e 20 3d 20 22 76 32 2e 30 2e 35 30 37 32  ion = "v2.0.5072
25da0 37 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  7";..        pri
25db0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
25dc0 67 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  g CLRv4ImageRunt
25dd0 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22 76 34  imeVersion = "v4
25de0 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d 0a 20 20  .0.30319";....  
25df0 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
25e40 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
25e50 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 53 79   const string Sy
25e60 73 74 65 6d 45 66 36 41 73 73 65 6d 62 6c 79 4e  stemEf6AssemblyN
25e70 61 6d 65 20 3d 20 22 45 6e 74 69 74 79 46 72 61  ame = "EntityFra
25e80 6d 65 77 6f 72 6b 2c 20 22 20 2b 0d 0a 20 20 20  mework, " +..   
25e90 20 20 20 20 20 20 20 20 20 22 56 65 72 73 69 6f           "Versio
25ea0 6e 3d 36 2e 30 2e 30 2e 30 2c 20 43 75 6c 74 75  n=6.0.0.0, Cultu
25eb0 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75 62 6c  re=neutral, Publ
25ec0 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 37 37 61 35  icKeyToken=b77a5
25ed0 63 35 36 31 39 33 34 65 30 38 39 22 3b 0d 0a 0d  c561934e089";...
25ee0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
25ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
25f40 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
25f50 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72   NameAndValueFor
25f60 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22  mat = "{0}: {1}"
25f70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
25f80 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
25f90 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20  LogFileSuffix = 
25fa0 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20  ".log";....     
25fb0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26000 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
26010 6e 73 74 20 73 74 72 69 6e 67 20 56 73 44 65 76  nst string VsDev
26020 45 6e 76 53 65 74 75 70 46 6f 72 6d 61 74 20 3d  EnvSetupFormat =
26030 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 0d 0a   "{0}: {1}";....
26040 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
26090 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
260a0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
260b0 52 6f 6f 74 4b 65 79 4e 61 6d 65 20 3d 20 22 53  RootKeyName = "S
260c0 6f 66 74 77 61 72 65 22 3b 0d 0a 20 20 20 20 20  oftware";..     
260d0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
260e0 20 73 74 72 69 6e 67 20 57 6f 77 36 34 53 75 62   string Wow64Sub
260f0 4b 65 79 4e 61 6d 65 20 3d 20 22 57 6f 77 36 34  KeyName = "Wow64
26100 33 32 4e 6f 64 65 22 3b 0d 0a 0d 0a 20 20 20 20  32Node";....    
26110 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
26120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26160 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
26170 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20     // NOTE: The 
26180 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 68  .NET Framework h
26190 61 73 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61  as both 32-bit a
261a0 6e 64 20 36 34 2d 62 69 74 20 65 64 69 74 69 6f  nd 64-bit editio
261b0 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  ns...        //.
261c0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
261d0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
261e0 20 62 6f 6f 6c 20 4e 65 74 46 78 49 73 33 32 42   bool NetFxIs32B
261f0 69 74 4f 6e 6c 79 20 3d 20 66 61 6c 73 65 3b 0d  itOnly = false;.
26200 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
26210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26250 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  //....        //
26260 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54  ..        // NOT
26270 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 56 69 73 75  E: For now, Visu
26280 61 6c 20 53 74 75 64 69 6f 20 69 73 20 61 6c 77  al Studio is alw
26290 61 79 73 20 61 20 33 32 2d 62 69 74 20 61 70 70  ays a 32-bit app
262a0 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20  lication...     
262b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70     //..        p
262c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
262d0 61 64 6f 6e 6c 79 20 62 6f 6f 6c 20 56 73 49 73  adonly bool VsIs
262e0 33 32 42 69 74 4f 6e 6c 79 20 3d 20 74 72 75 65  32BitOnly = true
262f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
26300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26340 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26350 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
26360 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56  eadonly string V
26370 73 49 64 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b  sIdFormat = "B";
26380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
263b0 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
263e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
263f0 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50  adonly string XP
26400 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
26410 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
26420 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73  "configuration/s
26430 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f  ystem.data/DbPro
26440 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61  viderFactories/a
26450 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22  dd[@invariant=\"
26460 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20  {0}\"]";....    
26470 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
26480 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
26490 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76  ng XPathForRemov
264a0 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20  eElement =..    
264b0 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75          "configu
264c0 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61  ration/system.da
264d0 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63  ta/DbProviderFac
264e0 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69  tories/remove[@i
264f0 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22  nvariant=\"{0}\"
26500 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ]";..        #en
26510 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
26520 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
26530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26570 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
26580 69 76 61 74 65 20 53 74 61 74 69 63 20 44 61 74  ivate Static Dat
26590 61 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  a..        #regi
265a0 6f 6e 20 44 69 61 67 6e 6f 73 74 69 63 73 20 26  on Diagnostics &
265b0 20 4c 6f 67 67 69 6e 67 0d 0a 20 20 20 20 20 20   Logging..      
265c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
265d0 20 4e 4f 54 45 3a 20 43 61 63 68 65 20 74 68 65   NOTE: Cache the
265e0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
265f0 20 61 6e 64 20 61 73 73 65 6d 62 6c 79 20 61 73   and assembly as
26600 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 63 68 61   they do not cha
26610 6e 67 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  nge..        // 
26620 20 20 20 20 20 20 61 6e 64 20 6d 61 79 20 62 65        and may be
26630 20 6e 65 65 64 65 64 20 69 6e 20 71 75 69 74 65   needed in quite
26640 20 61 20 66 65 77 20 64 69 66 66 65 72 65 6e 74   a few different
26650 20 70 6c 61 63 65 73 2e 0d 0a 20 20 20 20 20 20   places...      
26660 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72    //..        pr
26670 69 76 61 74 65 20 73 74 61 74 69 63 20 50 72 6f  ivate static Pro
26680 63 65 73 73 20 74 68 69 73 50 72 6f 63 65 73 73  cess thisProcess
26690 20 3d 20 50 72 6f 63 65 73 73 2e 47 65 74 43 75   = Process.GetCu
266a0 72 72 65 6e 74 50 72 6f 63 65 73 73 28 29 3b 0d  rrentProcess();.
266b0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
266c0 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
266d0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20   thisAssembly = 
266e0 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63  Assembly.GetExec
266f0 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b  utingAssembly();
26700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
26710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26720 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ///....        /
26760 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f  /..        // NO
26770 54 45 3a 20 54 68 65 20 74 72 61 63 65 20 63 61  TE: The trace ca
26780 74 65 67 6f 72 79 20 69 73 20 74 68 65 20 73 61  tegory is the sa
26790 6d 65 20 66 6f 72 20 62 6f 74 68 20 74 68 65 20  me for both the 
267a0 64 65 62 75 67 20 61 6e 64 20 74 72 61 63 65 0d  debug and trace.
267b0 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20  .        //     
267c0 20 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a 20 20    callbacks...  
267d0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
267e0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
267f0 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74   string traceCat
26800 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  egory = Path.Get
26810 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
26820 20 20 20 20 20 20 20 28 74 68 69 73 41 73 73 65         (thisAsse
26830 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  mbly != null) ? 
26840 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63  thisAssembly.Loc
26850 61 74 69 6f 6e 20 3a 20 6e 75 6c 6c 29 3b 0d 0a  ation : null);..
26860 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
26870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  /....        //.
268c0 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45  .        // NOTE
268d0 3a 20 53 65 74 20 74 68 65 20 64 65 62 75 67 20  : Set the debug 
268e0 61 6e 64 20 74 72 61 63 65 20 6c 6f 67 67 69 6e  and trace loggin
268f0 67 20 63 61 6c 6c 62 61 63 6b 73 20 75 73 65 64  g callbacks used
26900 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
26910 20 2f 2f 20 20 20 20 20 20 20 61 70 70 6c 69 63   //       applic
26920 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ation...        
26930 2f 2f 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  //..        priv
26940 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
26950 43 61 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61  Callback debugCa
26960 6c 6c 62 61 63 6b 20 3d 20 41 70 70 44 65 62 75  llback = AppDebu
26970 67 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  g;..        priv
26980 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
26990 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
269a0 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63  llback = AppTrac
269b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  e;..        #end
269c0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
269d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
269e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
26a20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 79 73       #region Sys
26a30 74 65 6d 20 44 69 72 65 63 74 6f 72 79 0d 0a 20  tem Directory.. 
26a40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26a50 74 61 74 69 63 20 73 74 72 69 6e 67 20 73 79 73  tatic string sys
26a60 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 6e  temDirectory = n
26a70 75 6c 6c 3b 0d 0a 0d 0a 23 69 66 20 57 49 4e 44  ull;....#if WIND
26a80 4f 57 53 0d 0a 20 20 20 20 20 20 20 20 70 72 69  OWS..        pri
26a90 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
26aa0 6e 67 20 73 79 73 74 65 6d 44 69 72 65 63 74 6f  ng systemDirecto
26ab0 72 79 57 6f 77 36 34 20 3d 20 6e 75 6c 6c 3b 0d  ryWow64 = null;.
26ac0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
26ad0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
26ae0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26b30 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
26b40 6e 20 52 65 67 69 73 74 72 79 20 53 74 61 74 69  n Registry Stati
26b50 73 74 69 63 73 0d 0a 20 20 20 20 20 20 20 20 70  stics..        p
26b60 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
26b70 74 20 66 69 6c 65 73 43 72 65 61 74 65 64 20 3d  t filesCreated =
26b80 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69   0;..        pri
26b90 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
26ba0 66 69 6c 65 73 4d 6f 64 69 66 69 65 64 20 3d 20  filesModified = 
26bb0 30 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  0;..        priv
26bc0 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 66  ate static int f
26bd0 69 6c 65 73 44 65 6c 65 74 65 64 20 3d 20 30 3b  ilesDeleted = 0;
26be0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
26bf0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
26c00 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
26c10 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
26c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26c60 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54         #region T
26c70 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  race Handling.. 
26c80 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26c90 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
26ca0 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  LogFileName(..  
26cb0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
26cc0 20 74 79 70 65 4e 61 6d 65 0d 0a 20 20 20 20 20   typeName..     
26cd0 20 20 20 20 20 20 20 29 20 2f 2a 20 74 68 72 6f         ) /* thro
26ce0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  w */..        {.
26cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26d00 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50  ing fileName = P
26d10 61 74 68 2e 47 65 74 54 65 6d 70 46 69 6c 65 4e  ath.GetTempFileN
26d20 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ame();..        
26d30 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
26d40 74 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44  tory = Path.GetD
26d50 69 72 65 63 74 6f 72 79 4e 61 6d 65 28 66 69 6c  irectoryName(fil
26d60 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
26d70 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
26d80 4e 61 6d 65 4f 6e 6c 79 20 3d 20 50 61 74 68 2e  NameOnly = Path.
26d90 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74 68 6f  GetFileNameWitho
26da0 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65  utExtension(file
26db0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
26dc0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77        string new
26dd0 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
26de0 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
26df0 79 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  y, String.Format
26e00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26e10 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
26e20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 21  traceCategory, !
26e30 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
26e40 6d 70 74 79 28 74 79 70 65 4e 61 6d 65 29 20 3f  mpty(typeName) ?
26e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e60 20 20 20 20 20 20 22 2e 22 20 2b 20 74 79 70 65        "." + type
26e70 4e 61 6d 65 20 3a 20 53 74 72 69 6e 67 2e 45 6d  Name : String.Em
26e80 70 74 79 2c 20 22 2e 22 20 2b 20 66 69 6c 65 4e  pty, "." + fileN
26e90 61 6d 65 4f 6e 6c 79 20 2b 0d 0a 20 20 20 20 20  ameOnly +..     
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
26eb0 6f 67 46 69 6c 65 53 75 66 66 69 78 29 29 3b 0d  ogFileSuffix));.
26ec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ...            F
26ed0 69 6c 65 2e 4d 6f 76 65 28 66 69 6c 65 4e 61 6d  ile.Move(fileNam
26ee0 65 2c 20 6e 65 77 46 69 6c 65 4e 61 6d 65 29 3b  e, newFileName);
26ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26f00 72 65 74 75 72 6e 20 6e 65 77 46 69 6c 65 4e 61  return newFileNa
26f10 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me;..        }..
26f20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
26f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26f70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
26f80 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
26f90 20 41 70 70 44 65 62 75 67 28 0d 0a 20 20 20 20   AppDebug(..    
26fa0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
26fb0 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
26fc0 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
26fd0 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
26fe0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
27000 65 4f 70 73 2e 44 65 62 75 67 43 6f 72 65 28 53  eOps.DebugCore(S
27010 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27030 72 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72  raceOps.DebugFor
27040 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
27050 78 74 44 65 62 75 67 49 64 28 29 2c 0d 0a 20 20  xtDebugId(),..  
27060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27070 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
27080 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
27090 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
270a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
270b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
270c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27110 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27120 76 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a  void AppTrace(..
27130 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27140 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20  ng message,..   
27150 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
27160 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
27170 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
27180 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27190 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f  TraceOps.TraceCo
271a0 72 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  re(String.Format
271b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
271c0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
271d0 65 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70  eFormat, TraceOp
271e0 73 2e 4e 65 78 74 54 72 61 63 65 49 64 28 29 2c  s.NextTraceId(),
271f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27200 20 20 54 72 61 63 65 4f 70 73 2e 54 69 6d 65 53    TraceOps.TimeS
27210 74 61 6d 70 28 44 61 74 65 54 69 6d 65 2e 55 74  tamp(DateTime.Ut
27220 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67 65 29 2c  cNow), message),
27230 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20   category);..   
27240 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27250 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
27260 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
27270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
272b0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
272c0 20 47 65 6e 65 72 69 63 20 50 6c 61 74 66 6f 72   Generic Platfor
272d0 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  m Handling..    
272e0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
272f0 69 63 20 62 6f 6f 6c 20 49 73 36 34 42 69 74 50  ic bool Is64BitP
27300 72 6f 63 65 73 73 28 29 0d 0a 20 20 20 20 20 20  rocess()..      
27310 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27320 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
27330 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e   // NOTE: Return
27340 73 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  s true if the cu
27350 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 69 73  rrent process is
27360 20 36 34 2d 62 69 74 2e 20 20 49 66 20 74 68 69   64-bit.  If thi
27370 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
27380 2f 20 20 20 20 20 20 20 69 73 20 74 72 75 65 2c  /       is true,
27390 20 77 65 20 2a 6b 6e 6f 77 2a 20 74 68 61 74 20   we *know* that 
273a0 77 65 20 6d 75 73 74 20 62 65 20 72 75 6e 6e 69  we must be runni
273b0 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 0d 0a  ng on a 64-bit..
273c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
273d0 20 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 73       operating s
273e0 79 73 74 65 6d 20 61 73 20 77 65 6c 6c 2e 20 20  ystem as well.  
273f0 48 6f 77 65 76 65 72 2c 20 69 66 20 74 68 69 73  However, if this
27400 20 69 73 20 66 61 6c 73 65 2c 20 77 65 0d 0a 20   is false, we.. 
27410 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
27420 20 20 20 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73      do not neces
27430 73 61 72 69 6c 79 20 6b 6e 6f 77 20 74 68 61 74  sarily know that
27440 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20   we are running 
27450 6f 6e 20 61 20 33 32 2d 62 69 74 0d 0a 20 20 20  on a 32-bit..   
27460 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
27470 20 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74    operating syst
27480 65 6d 2c 20 64 75 65 20 74 6f 20 57 6f 57 36 34  em, due to WoW64
27490 20 28 57 69 6e 33 32 2d 6f 6e 2d 57 69 6e 36 34   (Win32-on-Win64
274a0 29 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20  ), etc...       
274b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
274c0 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 6e 74       return (Int
274d0 50 74 72 2e 53 69 7a 65 20 3d 3d 20 73 69 7a 65  Ptr.Size == size
274e0 6f 66 28 6c 6f 6e 67 29 29 3b 20 2f 2f 20 4e 4f  of(long)); // NO
274f0 54 45 3a 20 50 6f 69 6e 74 65 72 20 69 73 20 36  TE: Pointer is 6
27500 34 2d 62 69 74 73 3f 0d 0a 20 20 20 20 20 20 20  4-bits?..       
27510 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
27550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27560 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27570 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27580 62 6f 6f 6c 20 49 73 53 75 70 70 6f 72 74 65 64  bool IsSupported
27590 52 6f 6f 74 4b 65 79 28 0d 0a 20 20 20 20 20 20  RootKey(..      
275a0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
275b0 72 79 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20  ry registry,..  
275c0 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
275d0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
275e0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  y..            )
275f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
27600 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27610 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65  Object.Reference
27620 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20  Equals(rootKey, 
27630 72 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74  registry.Current
27640 55 73 65 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20  User) ||..      
27650 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74            Object
27660 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
27670 28 72 6f 6f 74 4b 65 79 2c 20 72 65 67 69 73 74  (rootKey, regist
27680 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29  ry.LocalMachine)
27690 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
276a0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
276b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
276f0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
27700 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
27710 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
27720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
27730 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
27740 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
27750 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
27760 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
27770 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
27780 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55             // BU
27790 47 46 49 58 3a 20 41 70 70 61 72 65 6e 74 6c 79  GFIX: Apparently
277a0 2c 20 74 68 65 20 70 65 72 2d 75 73 65 72 20 72  , the per-user r
277b0 65 67 69 73 74 72 79 20 68 69 76 65 20 64 6f 65  egistry hive doe
277c0 73 20 6e 6f 74 20 75 73 65 0d 0a 20 20 20 20 20  s not use..     
277d0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
277e0 20 20 74 68 65 20 22 57 6f 77 36 34 33 32 4e 6f    the "Wow6432No
277f0 64 65 22 20 6e 6f 64 65 20 74 6f 20 73 74 6f 72  de" node to stor
27800 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 33  e settings for 3
27810 32 2d 62 69 74 0d 0a 20 20 20 20 20 20 20 20 20  2-bit..         
27820 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 61 70     //         ap
27830 70 6c 69 63 61 74 69 6f 6e 73 20 72 75 6e 6e 69  plications runni
27840 6e 67 20 6f 6e 20 61 20 36 34 2d 62 69 74 20 6f  ng on a 64-bit o
27850 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 2e  perating system.
27860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
27870 20 20 20 20 20 20 20 20 20 54 69 63 6b 65 74 20           Ticket 
27880 5b 61 30 36 37 37 33 30 39 66 30 5d 20 68 61 73  [a0677309f0] has
27890 20 66 75 72 74 68 65 72 20 64 65 74 61 69 6c 73   further details
278a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
278b0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
278c0 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
278d0 6d 61 74 28 22 7b 30 7d 7b 31 7d 22 2c 20 52 6f  mat("{0}{1}", Ro
278e0 6f 74 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  otKeyName,..    
278f0 20 20 20 20 20 20 20 20 20 20 20 20 21 70 65 72              !per
27900 55 73 65 72 20 26 26 20 77 6f 77 36 34 20 26 26  User && wow64 &&
27910 20 49 73 36 34 42 69 74 50 72 6f 63 65 73 73 28   Is64BitProcess(
27920 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
27930 20 20 20 20 20 20 20 20 20 22 5c 5c 22 20 2b 20           "\\" + 
27940 57 6f 77 36 34 53 75 62 4b 65 79 4e 61 6d 65 20  Wow64SubKeyName 
27950 3a 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b  : String.Empty);
27960 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27970 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
279c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
279d0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
279e0 47 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f  GetSystemDirecto
279f0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
27a00 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
27a10 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
27a20 20 20 20 20 7b 0d 0a 23 69 66 20 57 49 4e 44 4f      {..#if WINDO
27a30 57 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  WS..            
27a40 69 66 20 28 77 6f 77 36 34 29 0d 0a 20 20 20 20  if (wow64)..    
27a50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27a60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
27a70 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 57 6f  ystemDirectoryWo
27a80 77 36 34 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  w64 == null)..  
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27ab0 20 20 20 20 20 73 79 73 74 65 6d 44 69 72 65 63       systemDirec
27ac0 74 6f 72 79 57 6f 77 36 34 20 3d 0d 0a 20 20 20  toryWow64 =..   
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
27af0 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 79 73 74  eMethods.GetSyst
27b00 65 6d 44 69 72 65 63 74 6f 72 79 28 29 3b 0d 0a  emDirectory();..
27b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27b30 20 20 20 20 20 72 65 74 75 72 6e 20 73 79 73 74       return syst
27b40 65 6d 44 69 72 65 63 74 6f 72 79 57 6f 77 36 34  emDirectoryWow64
27b50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
27b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
27b70 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  se..#endif..    
27b80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27b90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
27ba0 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d  ystemDirectory =
27bb0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73               sys
27bd0 74 65 6d 44 69 72 65 63 74 6f 72 79 20 3d 20 45  temDirectory = E
27be0 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65  nvironment.Syste
27bf0 6d 44 69 72 65 63 74 6f 72 79 3b 0d 0a 0d 0a 20  mDirectory;.... 
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
27c10 65 74 75 72 6e 20 73 79 73 74 65 6d 44 69 72 65  eturn systemDire
27c20 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
27c30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
27c40 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
27c50 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
27c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ca0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27cb0 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72     #region Gener
27cc0 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69  ic String Handli
27cd0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
27ce0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
27cf0 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  g ForDisplay(.. 
27d00 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
27d10 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
27d20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
27d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
27d40 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
27d50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27d60 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c     return "<null
27d70 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  >";....         
27d80 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
27d90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  ;..            T
27da0 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65  ype type = value
27db0 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20  .GetType();.... 
27dc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
27dd0 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d  ype == typeof(Xm
27de0 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20  lElement))..    
27df0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27e00 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
27e10 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20  ement element = 
27e20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75  (XmlElement)valu
27e30 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
27e40 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65        result = e
27e50 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b  lement.OuterXml;
27e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
27e80 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79  e if (type == ty
27e90 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a  peof(Version))..
27ea0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
27ec0 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d  ersion version =
27ed0 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b   (Version)value;
27ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27ef0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
27f00 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d  ing.Format("v{0}
27f10 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20  ", version);..  
27f20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
27f30 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
27f40 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
27f50 28 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e 66  (ProcessStartInf
27f60 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o))..           
27f70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27f80 20 20 20 20 50 72 6f 63 65 73 73 53 74 61 72 74      ProcessStart
27f90 49 6e 66 6f 20 73 74 61 72 74 49 6e 66 6f 20 3d  Info startInfo =
27fa0 20 28 50 72 6f 63 65 73 73 53 74 61 72 74 49 6e   (ProcessStartIn
27fb0 66 6f 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  fo)value;....   
27fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
27fd0 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
27fe0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
27ff0 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65 4e            "fileN
28000 61 6d 65 20 3d 20 7b 30 7d 2c 20 61 72 67 75 6d  ame = {0}, argum
28010 65 6e 74 73 20 3d 20 7b 31 7d 2c 20 77 6f 72 6b  ents = {1}, work
28020 69 6e 67 44 69 72 65 63 74 6f 72 79 20 3d 20 7b  ingDirectory = {
28030 32 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  2}, " +..       
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75 73               "us
28050 65 53 68 65 6c 6c 45 78 65 63 75 74 65 20 3d 20  eShellExecute = 
28060 7b 33 7d 2c 20 72 65 64 69 72 65 63 74 53 74 61  {3}, redirectSta
28070 6e 64 61 72 64 4f 75 74 70 75 74 20 3d 20 7b 34  ndardOutput = {4
28080 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
28090 20 20 20 20 20 20 20 20 20 20 20 20 22 72 65 64              "red
280a0 69 72 65 63 74 53 74 61 6e 64 61 72 64 45 72 72  irectStandardErr
280b0 6f 72 20 3d 20 7b 35 7d 22 2c 20 46 6f 72 44 69  or = {5}", ForDi
280c0 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
280d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72              star
280e0 74 49 6e 66 6f 2e 46 69 6c 65 4e 61 6d 65 29 2c  tInfo.FileName),
280f0 20 46 6f 72 44 69 73 70 6c 61 79 28 73 74 61 72   ForDisplay(star
28100 74 49 6e 66 6f 2e 41 72 67 75 6d 65 6e 74 73 29  tInfo.Arguments)
28110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
28120 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
28130 79 28 73 74 61 72 74 49 6e 66 6f 2e 57 6f 72 6b  y(startInfo.Work
28140 69 6e 67 44 69 72 65 63 74 6f 72 79 29 2c 20 46  ingDirectory), F
28150 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20  orDisplay(..    
28160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28170 73 74 61 72 74 49 6e 66 6f 2e 55 73 65 53 68 65  startInfo.UseShe
28180 6c 6c 45 78 65 63 75 74 65 29 2c 20 46 6f 72 44  llExecute), ForD
28190 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20  isplay(..       
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
281b0 72 74 49 6e 66 6f 2e 52 65 64 69 72 65 63 74 53  rtInfo.RedirectS
281c0 74 61 6e 64 61 72 64 4f 75 74 70 75 74 29 2c 20  tandardOutput), 
281d0 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20  ForDisplay(..   
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281f0 20 73 74 61 72 74 49 6e 66 6f 2e 52 65 64 69 72   startInfo.Redir
28200 65 63 74 53 74 61 6e 64 61 72 64 45 72 72 6f 72  ectStandardError
28210 29 29 3b 20 2f 2a 20 52 45 43 55 52 53 49 56 45  )); /* RECURSIVE
28220 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
28230 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28240 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d  else if (type ==
28250 20 74 79 70 65 6f 66 28 50 72 6f 63 65 73 73 29   typeof(Process)
28260 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28280 20 20 50 72 6f 63 65 73 73 20 70 72 6f 63 65 73    Process proces
28290 73 20 3d 20 28 50 72 6f 63 65 73 73 29 76 61 6c  s = (Process)val
282a0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
282b0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
282c0 70 72 6f 63 65 73 73 2e 49 64 2e 54 6f 53 74 72  process.Id.ToStr
282d0 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing();..        
282e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
282f0 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65     else if (type
28300 20 3d 3d 20 74 79 70 65 6f 66 28 44 61 74 61 52   == typeof(DataR
28310 65 63 65 69 76 65 64 45 76 65 6e 74 41 72 67 73  eceivedEventArgs
28320 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
28330 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28340 20 20 20 44 61 74 61 52 65 63 65 69 76 65 64 45     DataReceivedE
28350 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41 72  ventArgs eventAr
28360 67 73 20 3d 20 28 44 61 74 61 52 65 63 65 69 76  gs = (DataReceiv
28370 65 64 45 76 65 6e 74 41 72 67 73 29 76 61 6c 75  edEventArgs)valu
28380 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
28390 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 46        result = F
283a0 6f 72 44 69 73 70 6c 61 79 28 65 76 65 6e 74 41  orDisplay(eventA
283b0 72 67 73 2e 44 61 74 61 29 3b 20 2f 2a 20 52 45  rgs.Data); /* RE
283c0 43 55 52 53 49 56 45 20 2a 2f 0d 0a 20 20 20 20  CURSIVE */..    
283d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
283e0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
283f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28400 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
28410 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  lt = value.ToStr
28420 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing();....      
28430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
28440 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30  sult.Length == 0
28450 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28460 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c         return "<
28470 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20  empty>";....    
28480 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
28490 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  lt = String.Form
284a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
284b0 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73           type.Is
284c0 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f  SubclassOf(typeo
284d0 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20  f(ValueType)) ? 
284e0 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22  "{0}" : "\"{0}\"
284f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28500 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b          result);
28510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28520 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
28530 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
28540 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28550 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
28560 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
285a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
285b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
285c0 6f 6e 20 41 73 73 65 6d 62 6c 79 20 41 74 74 72  on Assembly Attr
285d0 69 62 75 74 65 20 48 61 6e 64 6c 69 6e 67 0d 0a  ibute Handling..
285e0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
285f0 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
28600 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75 72  AssemblyConfigur
28610 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ation(..        
28620 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73      Assembly ass
28630 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  embly..         
28640 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28650 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28660 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c  (assembly != nul
28670 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28680 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28690 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
286a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
286b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
286c0 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65  f (assembly.IsDe
286d0 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20  fined(..        
286e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286f0 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d      typeof(Assem
28700 62 6c 79 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  blyConfiguration
28710 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
28720 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
28730 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28750 20 20 20 20 41 73 73 65 6d 62 6c 79 43 6f 6e 66      AssemblyConf
28760 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
28770 74 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  te configuration
28780 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
28790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287a0 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66 69 67 75  (AssemblyConfigu
287b0 72 61 74 69 6f 6e 41 74 74 72 69 62 75 74 65 29  rationAttribute)
287c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
287e0 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
287f0 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
28800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28810 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
28820 65 6f 66 28 41 73 73 65 6d 62 6c 79 43 6f 6e 66  eof(AssemblyConf
28830 69 67 75 72 61 74 69 6f 6e 41 74 74 72 69 62 75  igurationAttribu
28840 74 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  te),..          
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 20 20 66 61 6c 73 65 29 5b 30 5d 3b        false)[0];
28870 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28880 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28890 72 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rn configuration
288a0 2e 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 3b 0d  .Configuration;.
288b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
288d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
288e0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
288f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28900 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28910 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
28920 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
28930 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28940 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
28950 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28960 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
28970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289c0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
289d0 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
289e0 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54  ing GetAssemblyT
289f0 69 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20  itle(..         
28a00 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65     Assembly asse
28a10 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  mbly..          
28a20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28a30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28a40 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c  assembly != null
28a50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a70 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
28a80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28aa0 20 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66   (assembly.IsDef
28ab0 69 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20  ined(..         
28ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ad0 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
28ae0 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
28af0 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20  ), false))..    
28b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28b20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
28b30 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
28b40 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20  e title =..     
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b60 20 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79         (Assembly
28b70 54 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d  TitleAttribute).
28b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28b90 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
28ba0 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41  embly.GetCustomA
28bb0 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20  ttributes(..    
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bd0 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
28be0 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65  of(AssemblyTitle
28bf0 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73  Attribute), fals
28c00 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  e)[0];....      
28c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c20 20 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54    return title.T
28c30 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  itle;..         
28c40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
28c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28c70 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
28c80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
28ca0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
28ce0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
28cf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28d00 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
28d10 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28d60 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
28d70 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
28d80 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
28d90 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
28da0 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
28db0 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65 28  workRootKeyName(
28dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28dd0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
28de0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
28df0 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20  w64..           
28e00 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
28e10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28e20 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
28e30 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
28e40 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c  \.NETFramework",
28e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e60 20 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65    GetRootKeyName
28e70 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
28e80 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
28e90 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28ef0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
28f00 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65  g GetFrameworkKe
28f10 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
28f20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
28f30 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
28f40 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
28f50 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
28f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
28f70 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
28f80 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
28f90 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
28fa0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
28fb0 77 6f 77 36 34 0d 0a 20 20 20 20 20 20 20 20 20  wow64..         
28fc0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
28fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
28fe0 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74  ing format = !St
28ff0 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
29000 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ty(platformName)
29010 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
29020 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73      "{0}\\Micros
29030 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c  oft\\{1}\\v{2}\\
29040 7b 33 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20 20  {3}" :..        
29050 20 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69          "{0}\\Mi
29060 63 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b  crosoft\\{1}\\v{
29070 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
29080 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
29090 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c  g.Format(format,
290a0 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28   GetRootKeyName(
290b0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29 2c  perUser, wow64),
290c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
290d0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
290e0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
290f0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  n, platformName)
29100 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
29110 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
29160 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
29170 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
29180 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65   GetImageRuntime
29190 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Version(..      
291a0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
291b0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..         
291c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
291d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
291e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
291f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29200 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
29210 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 52 65  ly = Assembly.Re
29220 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64  flectionOnlyLoad
29230 46 72 6f 6d 28 0d 0a 20 20 20 20 20 20 20 20 20  From(..         
29240 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
29250 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
29260 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29270 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
29280 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y != null)..    
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292a0 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e  return assembly.
292b0 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
292c0 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ion;..          
292d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
292e0 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20   catch..        
292f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
29300 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
29310 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
29320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29330 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
29340 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
29350 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
29360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
293a0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
293b0 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
293c0 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65  GetFrameworkDire
293d0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
293e0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
293f0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
29400 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
29410 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
29420 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
29430 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
29440 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
29450 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
29460 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
29470 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
29480 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
29490 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
294a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
294b0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
294c0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
294d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
294e0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
294f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29500 72 6f 6f 74 4b 65 79 2c 20 47 65 74 46 72 61 6d  rootKey, GetFram
29510 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 4e 61 6d 65  eworkRootKeyName
29520 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 29  (perUser, wow64)
29530 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29540 20 20 20 20 20 20 20 66 61 6c 73 65 2c 20 77 68         false, wh
29550 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
29560 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
29570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29580 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
29590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
295a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
295b0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
295c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
295d0 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ue = RegistryHel
295e0 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20  per.GetValue(.. 
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c     key, "Install
29610 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61  Root", null, wha
29620 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
29630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29640 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73    if (!(value is
29650 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20   string))..     
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29670 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29690 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69  eturn Path.Combi
296a0 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
296b0 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67           (string
296c0 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46  )value, String.F
296d0 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66 72  ormat("v{0}", fr
296e0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29  ameworkVersion))
296f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
29700 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
29710 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29720 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29770 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
29780 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77  egion Per-Framew
29790 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e  ork/Platform Han
297a0 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
297b0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
297c0 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61  id InitializeFra
297d0 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20  meworkList(..   
297e0 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
297f0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
29800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  ,..            C
29810 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
29820 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
29830 20 20 20 20 20 20 20 20 20 72 65 66 20 46 72 61           ref Fra
29840 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65  meworkList frame
29850 77 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20  workList..      
29860 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
29870 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29880 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
29890 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
298a0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
298b0 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20  eworkList = new 
298c0 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b  FrameworkList();
298d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
298e0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
298f0 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c  t.RootKey == nul
29900 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
29910 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29920 74 2e 52 6f 6f 74 4b 65 79 20 3d 20 72 6f 6f 74  t.RootKey = root
29930 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
29940 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29980 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29990 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
299a0 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d  workList.Names =
299b0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
299c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
299d0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
299e0 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65  kList.Names = ne
299f0 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d  w StringList();.
29a00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29a10 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
29a20 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
29a30 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
29a40 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20  .NoDesktop)..   
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
29a70 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 46 72  ames.Add(".NETFr
29a80 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20  amework");....  
29a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29aa0 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
29ab0 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
29ac0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f  nfiguration.NoCo
29ad0 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20  mpact)..        
29ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
29b00 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
29b10 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
29b20 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
29b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29b40 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
29b50 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
29b60 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
29b70 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
29b80 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
29b90 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
29ba0 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
29bb0 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
29bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
29be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
29bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29c40 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
29c50 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
29c60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
29c70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29c80 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
29c90 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77  t.Versions = new
29ca0 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a   VersionMap();..
29cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29cc0 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
29cd0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
29ce0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
29cf0 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20  NoDesktop)..    
29d00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 64     VersionList d
29d30 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
29d40 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
29d50 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29d70 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
29d80 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
29d90 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65  nfiguration.NoNe
29da0 74 46 78 32 30 29 0d 0a 20 20 20 20 20 20 20 20  tFx20)..        
29db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dc0 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69  desktopVersionLi
29dd0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
29de0 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29 29  on(2, 0, 50727))
29df0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29e00 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
29e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65 20 2e 4e   // NOTE: The .N
29e30 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 33 2e 35  ET Framework 3.5
29e40 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 69   does not have i
29e50 74 73 20 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  ts own..        
29e60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
29e70 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 3b 20       directory; 
29e80 68 6f 77 65 76 65 72 2c 20 69 74 20 73 74 69 6c  however, it stil
29e90 6c 20 6d 61 79 20 68 61 76 65 20 61 73 73 65 6d  l may have assem
29ea0 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  bly..           
29eb0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
29ec0 20 20 66 6f 6c 64 65 72 73 20 66 6f 72 20 75 73    folders for us
29ed0 65 20 69 6e 20 56 69 73 75 61 6c 20 53 74 75 64  e in Visual Stud
29ee0 69 6f 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  io, etc...      
29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
29f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f10 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
29f20 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
29f30 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
29f40 69 6f 6e 2e 4e 6f 4e 65 74 46 78 33 35 29 0d 0a  ion.NoNetFx35)..
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f60 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
29f70 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
29f80 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 29  ew Version(3, 5)
29f90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29fa0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
29fb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
29fc0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
29fd0 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34  uration.NoNetFx4
29fe0 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
29ff0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b              desk
2a000 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41  topVersionList.A
2a010 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34  dd(new Version(4
2a020 2c 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d  , 0, 30319));...
2a030 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a040 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2a050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2a060 4e 4f 54 45 3a 20 54 68 65 20 2e 4e 45 54 20 46  NOTE: The .NET F
2a070 72 61 6d 65 77 6f 72 6b 20 34 2e 35 20 64 6f 65  ramework 4.5 doe
2a080 73 20 6e 6f 74 20 68 61 76 65 20 69 74 73 20 6f  s not have its o
2a090 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  wn..            
2a0a0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2a0b0 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f 77 65   directory; howe
2a0c0 76 65 72 2c 20 69 74 20 73 74 69 6c 6c 20 6d 61  ver, it still ma
2a0d0 79 20 68 61 76 65 20 61 73 73 65 6d 62 6c 79 0d  y have assembly.
2a0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a0f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 6f       //       fo
2a100 6c 64 65 72 73 20 66 6f 72 20 75 73 65 20 69 6e  lders for use in
2a110 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2c 20   Visual Studio, 
2a120 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  etc...          
2a130 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a150 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
2a160 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
2a170 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
2a180 4e 6f 4e 65 74 46 78 34 35 29 0d 0a 20 20 20 20  NoNetFx45)..    
2a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a1a0 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
2a1b0 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
2a1c0 65 72 73 69 6f 6e 28 34 2c 20 35 2c 20 35 30 37  ersion(4, 5, 507
2a1d0 30 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  09));....       
2a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2a1f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a200 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
2a210 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
2a220 20 34 2e 35 2e 31 20 64 6f 65 73 20 6e 6f 74 20   4.5.1 does not 
2a230 68 61 76 65 20 69 74 73 20 6f 77 6e 0d 0a 20 20  have its own..  
2a240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a250 20 20 2f 2f 20 20 20 20 20 20 20 64 69 72 65 63    //       direc
2a260 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 69  tory; however, i
2a270 74 20 73 74 69 6c 6c 20 6d 61 79 20 68 61 76 65  t still may have
2a280 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..     
2a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2a2a0 2f 20 20 20 20 20 20 20 66 6f 6c 64 65 72 73 20  /       folders 
2a2b0 66 6f 72 20 75 73 65 20 69 6e 20 56 69 73 75 61  for use in Visua
2a2c0 6c 20 53 74 75 64 69 6f 2c 20 65 74 63 2e 0d 0a  l Studio, etc...
2a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2e0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a300 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
2a310 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
2a320 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
2a330 78 34 35 31 29 0d 0a 20 20 20 20 20 20 20 20 20  x451)..         
2a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2a350 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
2a360 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
2a370 6e 28 34 2c 20 35 2c 20 31 29 29 3b 0d 0a 0d 0a  n(4, 5, 1));....
2a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a390 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2a3a0 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22  t.Versions.Add("
2a3b0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d  .NETFramework",.
2a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a3d0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
2a3e0 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20  VersionList);.. 
2a3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2a400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a410 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
2a420 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
2a430 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
2a440 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20  n.NoCompact)..  
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a470 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
2a480 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  st.Versions.Add(
2a490 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
2a4a0 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20  ework",..       
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4c0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
2a4d0 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b  (new Version[] {
2a4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a4f0 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
2a500 72 73 69 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30  rsion(2, 0, 0, 0
2a510 29 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 33  ), new Version(3
2a520 2c 20 35 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20  , 5, 0, 0)..    
2a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a540 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }));..          
2a550 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2a560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2a570 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2a580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2a5c0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
2a5d0 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
2a5e0 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  ormNames == null
2a5f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a610 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
2a620 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20  PlatformNames = 
2a630 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 29  new StringList()
2a640 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a650 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
2a660 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
2a670 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
2a680 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20  on.NoDesktop).. 
2a690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6a0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
2a6b0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41  .PlatformNames.A
2a6c0 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  dd(null);....   
2a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2a6e0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
2a6f0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
2a700 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d  figuration.NoCom
2a710 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  pact)..         
2a720 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
2a740 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2a750 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50  formNames.Add("P
2a760 6f 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20  ocketPC");..    
2a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a780 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2a790 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
2a7a0 22 53 6d 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a  "Smartphone");..
2a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a7c0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2a7d0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
2a7e0 41 64 64 28 22 57 69 6e 64 6f 77 73 43 45 22 29  Add("WindowsCE")
2a7f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2a800 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a810 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2a820 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
2a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a870 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
2a880 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
2a890 20 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 44 69   HaveFrameworkDi
2a8a0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
2a8b0 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
2a8c0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
2a8d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2a8e0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2a8f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
2a900 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
2a910 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
2a920 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
2a930 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
2a940 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2a950 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2a960 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2a970 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2a980 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
2a990 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
2a9a0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
2a9b0 20 72 65 66 20 73 74 72 69 6e 67 20 69 6e 73 74   ref string inst
2a9c0 61 6c 6c 44 69 72 65 63 74 6f 72 79 0d 0a 20 20  allDirectory..  
2a9d0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2a9e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a9f0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
2aa00 6d 65 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72  me = GetFramewor
2aa10 6b 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  kKeyName(..     
2aa20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
2aa30 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
2aa40 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
2aa50 66 6f 72 6d 4e 61 6d 65 2c 20 70 65 72 55 73 65  formName, perUse
2aa60 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
2aa70 20 20 20 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20      wow64);.... 
2aa80 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
2aa90 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
2aaa0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
2aab0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
2aac0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2aad0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
2aae0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
2aaf0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2ab00 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2ab10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2ab20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
2ab30 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2ab40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2ab50 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2ab60 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
2ab70 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
2ab80 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
2ab90 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
2aba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abb0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2abc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2abd0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
2abe0 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77  tory = GetFramew
2abf0 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac10 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
2ac20 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 65  eworkVersion, pe
2ac30 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68  rUser, wow64, wh
2ac40 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2ac50 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
2ac60 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
2ac70 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
2ac80 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2ac90 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
2aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acb0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2acc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2acd0 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
2ace0 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
2acf0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
2ad00 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ad10 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
2ad20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2ad30 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2ad40 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2ad50 4c 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  Lower,..        
2ad60 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2ad70 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2ad80 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2ad90 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
2adb0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
2adc0 7d 20 66 6f 75 6e 64 20 76 69 61 20 64 69 72 65  } found via dire
2add0 63 74 6f 72 79 20 7b 31 7d 2e 22 2c 0d 0a 20 20  ctory {1}.",..  
2ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2adf0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
2ae00 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 20  meworkVersion), 
2ae10 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
2ae20 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20  tory)),..       
2ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2ae40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ae60 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2ae70 20 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20   = directory;.. 
2ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ae90 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
2aea0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2aeb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2aec0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2aed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af00 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2af10 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2af20 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d  ic bool HaveFram
2af30 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
2af40 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
2af50 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
2af60 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
2af70 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
2af80 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
2af90 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
2afa0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
2afb0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2afc0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
2afd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2afe0 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
2aff0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
2b000 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
2b010 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
2b020 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b030 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
2b040 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2b050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b060 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
2b070 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 4b 65 79   GetFrameworkKey
2b080 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
2b090 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
2b0a0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
2b0b0 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
2b0c0 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 0d 0a  Name, perUser,..
2b0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0e0 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20  wow64);....     
2b0f0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
2b100 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
2b110 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
2b120 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
2b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b140 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
2b150 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
2b160 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
2b170 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2b180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2b190 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
2b1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b1b0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2b1c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2b1d0 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f        if (platfo
2b1e0 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20  rmName != null) 
2b1f0 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f  // NOTE: Skip no
2b200 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20  n-desktop...    
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b220 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a  return true;....
2b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b240 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2b250 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2b260 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20  rity.Lower,..   
2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b280 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2b290 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2b2a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2b2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b2c0 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
2b2d0 72 6b 20 7b 30 7d 20 66 6f 75 6e 64 20 76 69 61  rk {0} found via
2b2e0 20 72 65 67 69 73 74 72 79 20 7b 31 7d 2e 22 2c   registry {1}.",
2b2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b300 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2b310 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
2b320 6e 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6b  n), ForDisplay(k
2b330 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  eyName)),..     
2b340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2b350 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
2b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b370 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
2b380 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2b390 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2b3a0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2b3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2b3f0 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
2b400 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
2b410 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
2b420 5d 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ]..        priva
2b430 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  te static bool F
2b440 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
2b450 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20  onfig(..        
2b460 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
2b470 20 72 65 67 69 73 74 72 79 2c 0d 0a 20 20 20 20   registry,..    
2b480 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
2b490 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
2b4a0 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
2b4b0 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69    FrameworkConfi
2b4c0 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  gCallback callba
2b4d0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2b4e0 20 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c   string version,
2b4f0 20 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e   /* NOTE: Option
2b500 61 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  al. */..        
2b510 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
2b520 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
2b530 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
2b540 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2b550 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
2b560 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2b570 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
2b580 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2b590 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
2b5a0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
2b5b0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
2b5c0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
2b5d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72          bool per
2b5e0 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  User,..         
2b5f0 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a     bool wow64,..
2b600 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
2b610 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c   throwOnMissing,
2b620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2b630 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
2b640 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
2b650 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2b660 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
2b670 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
2b680 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
2b690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
2b6a0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
2b6b0 20 20 20 20 20 20 20 20 69 66 20 28 72 65 67 69          if (regi
2b6c0 73 74 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  stry == null).. 
2b6d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2b6f0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
2b700 65 67 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20  egistry";..     
2b710 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2b720 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2b730 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2b740 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
2b750 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  workList == null
2b760 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2b770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b780 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
2b790 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73  id framework lis
2b7a0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
2b7b0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2b7c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2b7d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2b7e0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2b7f0 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
2b800 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
2b810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2b820 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
2b830 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2b840 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b850 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
2b860 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
2b870 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2b880 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2b890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b8a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2b8b0 66 20 28 21 49 73 53 75 70 70 6f 72 74 65 64 52  f (!IsSupportedR
2b8c0 6f 6f 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c  ootKey(registry,
2b8d0 20 72 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20   rootKey))..    
2b8e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2b8f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2b900 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
2b910 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
2b920 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
2b930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b940 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2b950 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2b960 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2b970 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
2b980 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
2b990 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2b9b0 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f  or = "no framewo
2b9c0 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rk names found";
2b9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b9e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2b9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ba00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ba10 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
2ba20 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
2ba30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ba40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2ba50 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
2ba60 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73  amework versions
2ba70 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
2ba80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2ba90 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2baa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2bab0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
2bac0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
2bad0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
2bae0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2bb00 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66  rror = "no platf
2bb10 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  orm names found"
2bb20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2bb30 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2bb40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2bb50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2bb60 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
2bb70 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20  .Names.Count != 
2bb80 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
2bb90 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
2bba0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
2bbb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bbc0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
2bbd0 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77  g.Format("framew
2bbe0 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  ork name count {
2bbf0 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d  0} does not " +.
2bc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bc10 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74       "match plat
2bc20 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20  form name count 
2bc30 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c  {1}", frameworkL
2bc40 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c  ist.Names.Count,
2bc50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bc60 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
2bc70 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2bc80 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  s.Count);....   
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2bca0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2bcb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2bcc0 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
2bcd0 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
2bce0 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69  ex < frameworkLi
2bcf0 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20  st.Names.Count; 
2bd00 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
2bd10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bd20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2bd40 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
2bd50 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
2bd60 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
2bd70 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2bd90 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
2bda0 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
2bdb0 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
2bdc0 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
2bdd0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2bde0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
2bdf0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
2be00 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
2be10 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  .Names[index];..
2be20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be30 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
2be40 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
2be50 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
2be60 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  s[index];....   
2be70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2be80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be90 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
2bea0 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66  ll non-desktop f
2beb0 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20  rameworks (i.e. 
2bec0 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d  if the platform.
2bed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bee0 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69   //       name i
2bef0 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20  s not null)...  
2bf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bf10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bf20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
2bf30 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
2bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf50 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
2bf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2bf70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bf80 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
2bf90 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65  the supported ve
2bfa0 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70  rsions of this p
2bfb0 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20  articular..     
2bfc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2bfd0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a      framework...
2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bff0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2c000 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
2c010 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2c020 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
2c030 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
2c040 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sion != null).. 
2c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2c060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c070 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2c090 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76   NOTE: Manual ov
2c0a0 65 72 72 69 64 65 20 6f 66 20 74 68 65 20 2a 4f  erride of the *O
2c0b0 4e 45 2a 20 66 72 61 6d 65 77 6f 72 6b 20 76 65  NE* framework ve
2c0c0 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  rsion..         
2c0d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2c0e0 20 20 20 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d      to process..
2c0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c100 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
2c120 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2c130 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
2c140 69 73 74 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ist();..        
2c150 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
2c160 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
2c170 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e  .Add(new Version
2c180 28 76 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20  (version));..   
2c190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c1b0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
2c1c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2c1e0 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  (!frameworkList.
2c1f0 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56  Versions.TryGetV
2c200 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
2c210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c220 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
2c230 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56  , out frameworkV
2c240 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a  ersionList) ||..
2c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c260 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
2c270 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
2c280 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c2b0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2c2c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2c2d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2c2e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2c300 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20  oreach (Version 
2c310 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2c320 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72   in frameworkVer
2c330 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20  sionList)..     
2c340 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c360 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2c370 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2c380 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
2c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c3a0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2c3b0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2c3c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2c3d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
2c3f0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
2c400 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
2c410 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
2c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c430 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
2c440 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
2c450 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
2c460 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
2c470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c480 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
2c490 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
2c4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c4b0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
2c4c0 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
2c4d0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
2c4e0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2c4f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2c500 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  g installDirecto
2c510 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ry = null;....  
2c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c530 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
2c540 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
2c550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c560 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2c570 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2c580 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2c590 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5b0 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
2c5c0 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c   perUser, wow64,
2c5d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
2c5e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2c600 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ef installDirect
2c610 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2c620 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c640 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
2c650 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
2c660 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
2c670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c680 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2c690 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2c6a0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2c6b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c6d0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
2c6e0 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
2c6f0 74 6f 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c 20  tory not found, 
2c700 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
2c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c720 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20   "skipping...", 
2c730 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
2c740 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a  workVersion)),..
2c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2c770 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
2c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c790 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
2c7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c7b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2c7d0 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
2c7e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2c800 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
2c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2c820 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
2c830 3d 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f  = installDirecto
2c840 72 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry;....         
2c850 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
2c860 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
2c870 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
2c880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
2c8c0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
2c8d0 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20  rity.Low,..     
2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8f0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2c900 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2c910 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2c920 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c940 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
2c950 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69   {0} directory i
2c960 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a  s invalid, " +..
2c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c980 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
2c990 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
2c9a0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
2c9b0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
2c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c9d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2c9e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
2c9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca00 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2ca30 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
2ca40 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ory = Path.Combi
2ca50 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43  ne(directory, "C
2ca60 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ca80 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
2ca90 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
2caa0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2cab0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cad0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2cae0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2caf0 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20  iority.Low,..   
2cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb10 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2cb20 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2cb30 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2cb40 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
2cb70 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
2cb80 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {1} does not " 
2cb90 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2cbb0 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e 67 2e  exist, skipping.
2cbc0 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
2cbd0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2cbe0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc00 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65 63  ForDisplay(direc
2cc10 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61 74  tory)), traceCat
2cc20 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
2cc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc40 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2cc70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2cc80 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  g fileName = Pat
2cc90 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
2cca0 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63 6f  ory, "machine.co
2ccb0 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  nfig");....     
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2ccd0 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73 28  f (!File.Exists(
2cce0 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  fileName))..    
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cd10 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2cd20 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
2cd30 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2cd40 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd60 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2cd70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2cd80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
2cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
2cdb0 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
2cdc0 66 69 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f  file {1} does no
2cdd0 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20  t exist, " +..  
2cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cdf0 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
2ce00 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
2ce10 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
2ce20 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
2ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce40 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
2ce50 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ileName)), trace
2ce60 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce80 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2ce90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
2cec0 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20  ol localSaved = 
2ced0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2cef0 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
2cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf10 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
2cf20 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d  me, invariantNam
2cf30 65 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70  e, name, descrip
2cf40 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
2cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf60 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
2cf70 65 6d 62 6c 79 4e 61 6d 65 2c 20 69 6e 73 74 61  emblyName, insta
2cf80 6c 6c 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  llDirectory,..  
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfa0 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e 74            client
2cfb0 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20 77  Data, perUser, w
2cfc0 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69 73  ow64, throwOnMis
2cfd0 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20  sing,..         
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
2d000 73 65 2c 20 72 65 66 20 6c 6f 63 61 6c 53 61 76  se, ref localSav
2d010 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  ed, ref error)).
2d020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d030 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2d040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d050 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d070 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d080 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d0c0 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26  f (localSaved &&
2d0d0 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20   !saved)..      
2d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d0f0 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72        saved = tr
2d100 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
2d110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2d120 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
2d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d140 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
2d150 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
2d160 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
2d170 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d190 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
2d1a0 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
2d1b0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2d1c0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1e0 20 20 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64       "localSaved
2d1f0 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20   = {0}, saved = 
2d200 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
2d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d220 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2d230 79 28 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46  y(localSaved), F
2d240 6f 72 44 69 73 70 6c 61 79 28 73 61 76 65 64 29  orDisplay(saved)
2d250 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
2d280 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
2d290 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d2b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d2c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2d2d0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
2d2e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2d2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d330 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2d340 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2d350 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2d360 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2d370 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2d380 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
2d390 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  hFrameworkRegist
2d3a0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2d3b0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
2d3c0 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
2d3d0 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
2d3e0 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
2d3f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
2d400 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
2d410 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
2d420 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
2d430 73 74 72 69 6e 67 20 76 65 72 73 69 6f 6e 2c 20  string version, 
2d440 2f 2a 20 4e 4f 54 45 3a 20 4f 70 74 69 6f 6e 61  /* NOTE: Optiona
2d450 6c 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  l. */..         
2d460 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
2d470 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
2d480 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c     bool perUser,
2d490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2d4a0 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20  ol wow64,..     
2d4b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f         bool thro
2d4c0 77 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20  wOnMissing,..   
2d4d0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
2d4e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
2d4f0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
2d500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2d510 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
2d520 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2d530 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2d540 20 20 20 20 20 20 69 66 20 28 72 65 67 69 73 74        if (regist
2d550 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
2d560 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d570 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2d580 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 65 67  r = "invalid reg
2d590 69 73 74 72 79 22 3b 0d 0a 20 20 20 20 20 20 20  istry";..       
2d5a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2d5b0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
2d5c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2d5d0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
2d5e0 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d  rkList == null).
2d5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d610 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
2d620 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22   framework list"
2d630 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2d640 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
2d650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d  ...            M
2d670 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
2d680 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
2d690 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
2d6a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2d6b0 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
2d6c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2d6d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2d6e0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
2d6f0 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
2d700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d710 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d720 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d730 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d740 28 21 49 73 53 75 70 70 6f 72 74 65 64 52 6f 6f  (!IsSupportedRoo
2d750 74 4b 65 79 28 72 65 67 69 73 74 72 79 2c 20 72  tKey(registry, r
2d760 6f 6f 74 4b 65 79 29 29 0d 0a 20 20 20 20 20 20  ootKey))..      
2d770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d780 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
2d790 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
2d7a0 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
2d7b0 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
2d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2d7d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
2d7e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2d7f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
2d800 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
2d810 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
2d820 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2d830 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2d840 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
2d850 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d870 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
2d880 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d890 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d8a0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
2d8b0 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
2d8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d8e0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
2d8f0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
2d900 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
2d910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2d920 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2d930 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2d940 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
2d950 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
2d960 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
2d970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2d980 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2d990 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
2d9a0 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
2d9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d9c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2d9d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2d9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d9f0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
2da00 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
2da10 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
2da20 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
2da30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2da40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2da50 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2da60 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
2da70 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
2da80 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
2da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daa0 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
2dab0 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
2dac0 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
2dad0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
2dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2daf0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
2db00 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
2db10 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
2db20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2db30 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2db40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2db50 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
2db60 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
2db70 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
2db80 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
2db90 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
2dba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2dbb0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2dbc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2dbd0 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
2dbe0 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
2dbf0 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
2dc00 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
2dc10 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2dc20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
2dc30 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
2dc40 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
2dc50 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
2dc60 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2dc70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2dc80 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
2dc90 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
2dca0 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
2dcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2dcc0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
2dcd0 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
2dce0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
2dcf0 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
2dd00 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2dd20 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
2dd30 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
2dd40 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
2dd50 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
2dd60 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2dd70 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
2dd80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2dd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dda0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
2ddb0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
2ddc0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
2ddd0 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69 6f        if (versio
2dde0 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n != null)..    
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2de20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
2de30 54 45 3a 20 4d 61 6e 75 61 6c 20 6f 76 65 72 72  TE: Manual overr
2de40 69 64 65 20 6f 66 20 74 68 65 20 2a 4f 4e 45 2a  ide of the *ONE*
2de50 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
2de60 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
2de70 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2de80 20 74 6f 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20   to process...  
2de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dea0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
2deb0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2dec0 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
2ded0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
2dee0 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
2def0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
2df00 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  rkVersionList.Ad
2df10 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 76 65  d(new Version(ve
2df20 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
2df30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2df40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
2df50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2df60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2df70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
2df80 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
2df90 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
2dfa0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
2dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2dfc0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
2dfd0 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
2dfe0 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
2dff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e000 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56       (frameworkV
2e010 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
2e020 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
2e030 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e050 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
2e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e070 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2e080 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e090 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2e0a0 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
2e0b0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
2e0c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
2e0d0 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
2e0e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2e0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2e100 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2e110 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2e120 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20 20 20 20  ity.Lower,..    
2e130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e140 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2e150 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2e160 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2e170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e180 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
2e190 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
2e1a0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
2e1b0 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e1d0 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
2e1e0 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
2e1f0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
2e200 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
2e210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
2e220 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
2e230 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e250 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2e260 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
2e270 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
2e280 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e290 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
2e2a0 65 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  eFrameworkRegist
2e2b0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e2d0 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
2e2e0 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
2e2f0 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e310 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
2e320 4e 61 6d 65 2c 20 70 65 72 55 73 65 72 2c 20 77  Name, perUser, w
2e330 6f 77 36 34 2c 20 77 68 61 74 49 66 2c 20 76 65  ow64, whatIf, ve
2e340 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2e350 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e370 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2e380 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54  .DebugAndTrace(T
2e390 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
2e3a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
2e3c0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
2e3d0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
2e3e0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
2e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e400 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46           ".NET F
2e410 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 72 65 67  ramework {0} reg
2e420 69 73 74 72 79 20 6e 6f 74 20 66 6f 75 6e 64 2c  istry not found,
2e430 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e450 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
2e460 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
2e470 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c 0d  eworkVersion)),.
2e480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e490 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2e4a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e4c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
2e4d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
2e4e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e500 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
2e510 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
2e530 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
2e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e550 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
2e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e570 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
2e580 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
2e590 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
2e5a0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
2e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e5c0 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
2e5d0 20 6e 75 6c 6c 2c 20 63 6c 69 65 6e 74 44 61 74   null, clientDat
2e5e0 61 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  a, perUser,..   
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e600 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20           wow64, 
2e610 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
2e620 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2e630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2e650 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
2e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2e670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e680 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2e690 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e6c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2e6d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2e6e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2e6f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2e700 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2e710 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2e750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2e760 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
2e770 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53 74 75  n Per-Visual Stu
2e780 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e 64  dio Version Hand
2e790 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
2e7a0 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
2e7b0 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69  d InitializeVsLi
2e7c0 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
2e7d0 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
2e7e0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
2e7f0 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
2e800 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
2e810 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2e820 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c 69   ref VsList vsLi
2e830 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..            
2e840 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
2e850 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
2e860 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
2e870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2e880 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c 69  sList = new VsLi
2e890 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
2e8a0 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e       if (vsList.
2e8b0 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  RootKey == null)
2e8c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e8d0 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79    vsList.RootKey
2e8e0 20 3d 20 72 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20   = rootKey;.... 
2e8f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
2e900 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  sList.Versions =
2e910 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2e920 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2e930 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56          vsList.V
2e940 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
2e950 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a  rsionList();....
2e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e970 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2e980 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2e990 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2e9a0 56 73 32 30 30 35 29 0d 0a 20 20 20 20 20 20 20  Vs2005)..       
2e9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2e9c0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
2e9d0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20  (new Version(8, 
2e9e0 30 29 29 3b 20 2f 2f 20 32 30 30 35 0d 0a 0d 0a  0)); // 2005....
2e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea00 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2ea10 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2ea20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2ea30 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20  Vs2008)..       
2ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2ea50 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
2ea60 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20  (new Version(9, 
2ea70 30 29 29 3b 20 2f 2f 20 32 30 30 38 0d 0a 0d 0a  0)); // 2008....
2ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ea90 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2eaa0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2eab0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2eac0 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20  Vs2010)..       
2ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2eae0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
2eaf0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c  (new Version(10,
2eb00 20 30 29 29 3b 2f 2f 20 32 30 31 30 0d 0a 0d 0a   0));// 2010....
2eb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2eb30 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2eb40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2eb50 56 73 32 30 31 32 29 0d 0a 20 20 20 20 20 20 20  Vs2012)..       
2eb60 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2eb70 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
2eb80 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 31 2c  (new Version(11,
2eb90 20 30 29 29 3b 2f 2f 20 32 30 31 32 0d 0a 0d 0a   0));// 2012....
2eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ebb0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
2ebc0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
2ebd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
2ebe0 56 73 32 30 31 33 29 0d 0a 20 20 20 20 20 20 20  Vs2013)..       
2ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
2ec00 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64 64  ist.Versions.Add
2ec10 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 32 2c  (new Version(12,
2ec20 20 30 29 29 3b 2f 2f 20 32 30 31 33 0d 0a 20 20   0));// 2013..  
2ec30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2ec40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2ec50 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2ec60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ec90 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2eca0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
2ecb0 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56  tic bool HaveVsV
2ecc0 65 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28  ersionDirectory(
2ecd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f  ..            Mo
2ece0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
2ecf0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
2ed00 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
2ed10 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
2ed20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69      string suffi
2ed30 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x,..            
2ed40 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
2ed50 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
2ed60 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
2ed70 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
2ed80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
2ed90 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
2eda0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
2edb0 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69 72 65 63  ing installDirec
2edc0 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tory..          
2edd0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
2ede0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2edf0 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
2ee00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ee10 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
2ee20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2ee30 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
2ee40 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
2ee50 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
2ee60 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
2ee70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2ee80 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
2ee90 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
2eea0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
2eeb0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
2eec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2eed0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
2eee0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
2eef0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
2ef00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2ef10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
2ef20 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ef40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
2ef50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ef60 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
2ef70 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
2ef80 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
2ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
2efa0 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c  y, "InstallDir",
2efb0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
2efc0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
2efd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2efe0 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
2eff0 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
2f000 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f010 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2f020 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
2f030 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74   directory = (st
2f040 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
2f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2f060 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
2f070 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
2f080 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
2f090 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2f0a0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
2f0b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
2f0c0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
2f0d0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
2f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f110 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
2f120 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
2f130 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a 20  iority.Lower,.. 
2f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f150 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2f160 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2f170 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2f180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f190 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74 75       "Visual Stu
2f1a0 64 69 6f 20 7b 30 7d 20 66 6f 75 6e 64 20 69 6e  dio {0} found in
2f1b0 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 2e 22   directory {1}."
2f1c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2f1d0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2f1e0 79 28 76 73 56 65 72 73 69 6f 6e 29 2c 20 46 6f  y(vsVersion), Fo
2f1f0 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
2f200 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
2f210 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
2f220 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
2f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
2f240 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79 20 3d  stallDirectory =
2f250 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2f270 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
2f280 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2f290 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
2f2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f2e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2f2f0 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65    [MethodImpl(Me
2f300 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e  thodImplOptions.
2f310 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20  NoInlining)]..  
2f320 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2f330 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
2f340 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74  hVsVersionRegist
2f350 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
2f360 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 20 72 65   MockRegistry re
2f370 67 69 73 74 72 79 2c 0d 0a 20 20 20 20 20 20 20  gistry,..       
2f380 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69       VsList vsLi
2f390 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
2f3a0 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67   VisualStudioReg
2f3b0 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61  istryCallback ca
2f3c0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
2f3d0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66 66       string suff
2f3e0 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ix,..           
2f3f0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
2f400 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
2f410 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
2f420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f430 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
2f440 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
2f450 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
2f460 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
2f470 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
2f480 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
2f490 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
2f4a0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
2f4b0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2f4c0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2f4d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2f4e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2f4f0 20 20 69 66 20 28 72 65 67 69 73 74 72 79 20 3d    if (registry =
2f500 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2f510 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2f520 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
2f530 22 69 6e 76 61 6c 69 64 20 72 65 67 69 73 74 72  "invalid registr
2f540 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
2f550 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2f560 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f570 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f580 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e   if (vsList == n
2f590 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2f5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2f5b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
2f5c0 76 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b 0d  valid VS list";.
2f5d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f5e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2f5f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2f600 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
2f610 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
2f620 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f  tKey = vsList.Ro
2f630 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
2f640 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
2f650 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
2f660 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2f670 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
2f680 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
2f690 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
2f6a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
2f6b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2f6c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2f6d0 20 20 20 20 69 66 20 28 21 49 73 53 75 70 70 6f      if (!IsSuppo
2f6e0 72 74 65 64 52 6f 6f 74 4b 65 79 28 72 65 67 69  rtedRootKey(regi
2f6f0 73 74 72 79 2c 20 72 6f 6f 74 4b 65 79 29 29 0d  stry, rootKey)).
2f700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
2f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f720 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
2f730 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
2f740 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
2f750 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
2f760 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2f770 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2f780 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2f790 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73   if (vsList.Vers
2f7a0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
2f7b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2f7d0 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20 76 65 72  ror = "no VS ver
2f7e0 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
2f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2f800 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
2f810 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2f820 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
2f830 63 68 20 28 56 65 72 73 69 6f 6e 20 76 73 56 65  ch (Version vsVe
2f840 72 73 69 6f 6e 20 69 6e 20 76 73 4c 69 73 74 2e  rsion in vsList.
2f850 56 65 72 73 69 6f 6e 73 29 0d 0a 20 20 20 20 20  Versions)..     
2f860 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2f870 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
2f880 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
2f890 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
2f8a0 6f 77 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  ower,..         
2f8b0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2f8c0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2f8d0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2f8e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73               "vs
2f900 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20  Version = {0}", 
2f910 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72  ForDisplay(vsVer
2f920 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20  sion)),..       
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2f940 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
2f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f960 73 74 72 69 6e 67 20 69 6e 73 74 61 6c 6c 44 69  string installDi
2f970 72 65 63 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d  rectory = null;.
2f980 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2f990 20 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65     if (!HaveVsVe
2f9a0 72 73 69 6f 6e 44 69 72 65 63 74 6f 72 79 28 0d  rsionDirectory(.
2f9b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2f9c0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
2f9d0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66  , vsVersion, suf
2f9e0 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  fix, perUser, wo
2f9f0 77 36 34 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  w64, whatIf,..  
2fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fa10 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
2fa20 65 66 20 69 6e 73 74 61 6c 6c 44 69 72 65 63 74  ef installDirect
2fa30 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
2fa40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2fa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
2fa60 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
2fa70 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
2fa80 74 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20  ty.Low,..       
2fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2faa0 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
2fab0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
2fac0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
2fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fae0 20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53         "Visual S
2faf0 74 75 64 69 6f 20 7b 30 7d 20 6e 6f 74 20 66 6f  tudio {0} not fo
2fb00 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e  und, skipping...
2fb10 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2fb20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2fb30 69 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e  isplay(vsVersion
2fb40 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
2fb50 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2fb60 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
2fb70 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
2fb80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2fb90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
2fba0 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
2fbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2fbc0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
2fbd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2fbe0 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b     if (!callback
2fbf0 28 0d 0a 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 72 6f 6f 74 4b             rootK
2fc10 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
2fc20 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
2fc30 69 6e 73 74 61 6c 6c 44 69 72 65 63 74 6f 72 79  installDirectory
2fc40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2fc50 20 20 20 20 20 20 20 20 20 20 20 63 6c 69 65 6e             clien
2fc60 74 44 61 74 61 2c 20 70 65 72 55 73 65 72 2c 20  tData, perUser, 
2fc70 77 6f 77 36 34 2c 20 74 68 72 6f 77 4f 6e 4d 69  wow64, throwOnMi
2fc80 73 73 69 6e 67 2c 20 77 68 61 74 49 66 2c 0d 0a  ssing, whatIf,..
2fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fca0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
2fcb0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
2fcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2fcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fce0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
2fcf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
2fd00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
2fd10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2fd20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
2fd30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2fd40 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2fd50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
2fd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fd90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2fda0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
2fdb0 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74  egion Configurat
2fdc0 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e  ion File Handlin
2fdd0 67 0d 0a 20 20 20 20 20 20 20 20 5b 4d 65 74 68  g..        [Meth
2fde0 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2fdf0 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2fe00 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 70  ing)]..        p
2fe10 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
2fe20 6f 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65 72  ol AddDbProvider
2fe30 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
2fe40 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
2fe50 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
2fe60 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
2fe70 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  iantName,..     
2fe80 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
2fe90 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
2fea0 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
2feb0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
2fec0 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
2fed0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2fee0 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
2fef0 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
2ff00 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2ff10 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2ff20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2ff30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2ff40 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
2ff50 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
2ff60 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
2ff70 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2ff80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2ff90 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
2ffa0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
2ffb0 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
2ffc0 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
2ffd0 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
2ffe0 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
2fff0 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
30000 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
30010 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
30020 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
30030 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
30040 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
30050 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  addElement = doc
30060 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
30070 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20  leNode(..       
30080 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
30090 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f 72 41  Format(XPathForA
300a0 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
300b0 69 61 6e 74 4e 61 6d 65 29 29 20 61 73 20 58 6d  iantName)) as Xm
300c0 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
300d0 20 20 20 20 20 20 20 20 20 69 66 20 28 61 64 64           if (add
300e0 45 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29  Element == null)
300f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
30100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30110 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e   string[] elemen
30120 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20  tNames = {..    
30130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30140 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22  "system.data", "
30150 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
30160 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ies"..          
30170 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
30180 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
30190 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45  lement previousE
301a0 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
301b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
301c0 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45  cument.DocumentE
301d0 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69  lement; /* confi
301e0 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20  guration */.... 
301f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
30200 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 65  oreach (string e
30210 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c  lementName in el
30220 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20  ementNames)..   
30230 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
30240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30250 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 20 3d      addElement =
30260 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
30270 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
30280 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
30290 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d              elem
302a0 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c 45  entName) as XmlE
302b0 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20  lement;....     
302c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
302d0 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 3d 3d  f (addElement ==
302e0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
302f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 61 64 64 45 6c 65 6d 65 6e         addElemen
30320 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
30330 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
30340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30350 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
30360 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70  Name, String.Emp
30370 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
30380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30390 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
303a0 41 70 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45  AppendChild(addE
303b0 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
303c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
303d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
303e0 20 20 20 20 20 20 20 70 72 65 76 69 6f 75 73 45         previousE
303f0 6c 65 6d 65 6e 74 20 3d 20 61 64 64 45 6c 65 6d  lement = addElem
30400 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ent;..          
30410 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
30420 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45 6c             addEl
30430 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
30440 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d  .CreateElement(.
30450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30460 20 20 20 20 20 22 61 64 64 22 2c 20 53 74 72 69       "add", Stri
30470 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
30480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
30490 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70  eviousElement.Ap
304a0 70 65 6e 64 43 68 69 6c 64 28 61 64 64 45 6c 65  pendChild(addEle
304b0 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ment);....      
304c0 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
304d0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
304e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
304f0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
30500 67 2e 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d  g.Equals(addElem
30510 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
30520 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20 20  ("name"),..     
30530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
30540 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
30550 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d  rison.Ordinal)).
30560 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
30570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30580 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65 74 41 74  addElement.SetAt
30590 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c 20  tribute("name", 
305a0 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  name);..        
305b0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
305c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
305d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
305e0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
305f0 45 71 75 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e  Equals(addElemen
30600 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22  t.GetAttribute("
30610 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20  invariant"),..  
30620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30630 20 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c    invariantName,
30640 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
30650 6e 2e 4f 72 64 69 6e 61 6c 29 29 0d 0a 20 20 20  n.Ordinal))..   
30660 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
30670 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 45              addE
30680 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
30690 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c  ute("invariant",
306a0 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 3b   invariantName);
306b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
306c0 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d    dirty = true;.
306d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
306e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
306f0 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73   (!String.Equals
30700 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47 65 74 41  (addElement.GetA
30710 74 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69  ttribute("descri
30720 70 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20  ption"),..      
30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
30740 73 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e  scription, Strin
30750 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
30760 6e 61 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  nal))..         
30770 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
30780 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65 6e 74        addElement
30790 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 64  .SetAttribute("d
307a0 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73  escription", des
307b0 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  cription);..    
307c0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
307d0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
307e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
307f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
30800 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ullTypeName = St
30810 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
30820 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {1}",..       
30830 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d           typeNam
30840 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29  e, assemblyName)
30850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
30860 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
30870 61 6c 73 28 61 64 64 45 6c 65 6d 65 6e 74 2e 47  als(addElement.G
30880 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
30890 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e"),..          
308a0 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79            fullTy
308b0 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f  peName, StringCo
308c0 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
308d0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
308e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
308f0 20 20 20 61 64 64 45 6c 65 6d 65 6e 74 2e 53 65     addElement.Se
30900 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65  tAttribute("type
30910 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29  ", fullTypeName)
30920 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
30930 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
30940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
30950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
30960 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
30970 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
30980 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30990 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
309a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
309b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
309c0 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
309d0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
309e0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
309f0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
30a00 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
30a10 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
30a20 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
30a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30a40 20 20 20 22 61 64 64 45 6c 65 6d 65 6e 74 20 3d     "addElement =
30a50 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
30a60 79 28 61 64 64 45 6c 65 6d 65 6e 74 29 29 2c 0d  y(addElement)),.
30a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
30a80 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
30a90 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
30aa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
30ab0 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
30ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
30ad0 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
30ae0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
30af0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 73 4d            filesM
30b00 6f 64 69 66 69 65 64 2b 2b 3b 0d 0a 0d 0a 20 20  odified++;....  
30b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
30b20 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ved = true;..   
30b30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
30b40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
30b50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
30b60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
30b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30bb0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
30bc0 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68  [MethodImpl(Meth
30bd0 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f  odImplOptions.No
30be0 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20  Inlining)]..    
30bf0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
30c00 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62  ic bool RemoveDb
30c10 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
30c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
30c30 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
30c40 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
30c50 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65  ng invariantName
30c60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
30c70 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
30c80 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
30c90 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
30ca0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
30cb0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
30cc0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
30cd0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
30ce0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
30cf0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
30d00 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
30d10 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
30d20 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
30d30 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
30d40 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
30d50 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
30d60 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
30d70 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
30d80 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
30d90 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
30da0 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
30db0 6c 65 6d 65 6e 74 20 61 64 64 45 6c 65 6d 65 6e  lement addElemen
30dc0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c  t = document.Sel
30dd0 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a  ectSingleNode(..
30de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30df0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 58 50  String.Format(XP
30e00 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
30e10 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29  , invariantName)
30e20 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
30e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
30e40 69 66 20 28 61 64 64 45 6c 65 6d 65 6e 74 20 21  if (addElement !
30e50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
30e60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
30e70 20 20 20 20 20 20 20 20 61 64 64 45 6c 65 6d 65          addEleme
30e80 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65  nt.ParentNode.Re
30e90 6d 6f 76 65 43 68 69 6c 64 28 61 64 64 45 6c 65  moveChild(addEle
30ea0 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
30eb0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
30ec0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
30ed0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
30ee0 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 72      XmlElement r
30ef0 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 20 64  emoveElement = d
30f00 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69  ocument.SelectSi
30f10 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20  ngleNode(..     
30f20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
30f30 67 2e 46 6f 72 6d 61 74 28 58 50 61 74 68 46 6f  g.Format(XPathFo
30f40 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20  rRemoveElement, 
30f50 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 29 29 20  invariantName)) 
30f60 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
30f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
30f80 20 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20   (removeElement 
30f90 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
30fa0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
30fb0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 45           removeE
30fc0 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64  lement.ParentNod
30fd0 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 72 65  e.RemoveChild(re
30fe0 6d 6f 76 65 45 6c 65 6d 65 6e 74 29 3b 0d 0a 20  moveElement);.. 
30ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
31000 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
31010 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
31020 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
31030 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
31040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
31050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31060 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
31070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31080 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
31090 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
310a0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d  iority.Highest,.
310b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
310c0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
310d0 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
310e0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
310f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
31110 61 64 64 45 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d  addElement = {0}
31120 2c 20 72 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20  , removeElement 
31130 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {1}",..       
31140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31150 20 46 6f 72 44 69 73 70 6c 61 79 28 61 64 64 45   ForDisplay(addE
31160 6c 65 6d 65 6e 74 29 2c 20 46 6f 72 44 69 73 70  lement), ForDisp
31170 6c 61 79 28 72 65 6d 6f 76 65 45 6c 65 6d 65 6e  lay(removeElemen
31180 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
31190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
311a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
311b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
311c0 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311e0 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65     document.Save
311f0 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
31200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
31210 69 6c 65 73 4d 6f 64 69 66 69 65 64 2b 2b 3b 0d  ilesModified++;.
31220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
31230 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b     saved = true;
31240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
31250 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
31260 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
31270 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
31280 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
31290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
312c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
312d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
312e0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
312f0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
31300 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
31310 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
31320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
31330 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 4e 61  ring invariantNa
31340 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
31350 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
31360 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
31370 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a  g description,..
31380 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
31390 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
313a0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
313b0 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e  lyName assemblyN
313c0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
313d0 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
313e0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
313f0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
31400 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
31410 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a   bool perUser,..
31420 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
31430 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
31440 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f       bool throwO
31450 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20  nMissing,..     
31460 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
31470 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
31480 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
31490 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
314a0 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
314b0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
314c0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
314d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
314e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
314f0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
31500 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
31510 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
31520 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
31530 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
31540 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
31550 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
31560 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
31570 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
31580 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63  alid framework c
31590 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64  onfig callback d
315a0 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
315b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
315c0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
315d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
315e0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
315f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
31610 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72  eturn RemoveDbPr
31620 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
31630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31640 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
31650 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 77 68 61  variantName, wha
31660 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
31670 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  f saved,..      
31680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
31690 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20  f error) &&..   
316a0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64               Add
316b0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
316c0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
316d0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
316e0 2c 20 69 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c  , invariantName,
316f0 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69   name, descripti
31700 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  on, typeName,.. 
31710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31720 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
31730 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
31740 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66  , ref saved, ref
31750 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
31760 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
31770 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
31780 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31790 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
317a0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
317b0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
317c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
317d0 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
317e0 6e 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  ntName, whatIf, 
317f0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
31800 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
31810 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
31820 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
31830 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
31840 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
31850 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
31860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
318a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
318b0 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d 62 6c   #region Assembl
318c0 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64 6c 69  y Folders Handli
318d0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
318e0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
318f0 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  g GetAssemblyFol
31900 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
31910 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
31920 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
31930 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
31940 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
31950 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
31960 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
31970 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
31980 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73        bool perUs
31990 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
319a0 20 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20   bool wow64..   
319b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
319c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
319d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
319e0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69 73     // NOTE: This
319f0 20 72 65 67 69 73 74 72 79 20 6b 65 79 20 61 70   registry key ap
31a00 70 65 61 72 73 20 74 6f 20 61 6c 77 61 79 73 20  pears to always 
31a10 62 65 20 33 32 2d 62 69 74 20 6f 6e 6c 79 0d 0a  be 32-bit only..
31a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
31a30 20 20 20 20 20 28 69 2e 65 2e 20 70 72 6f 62 61       (i.e. proba
31a40 62 6c 79 20 62 65 63 61 75 73 65 20 69 74 20 69  bly because it i
31a50 73 20 6f 6e 6c 79 20 75 73 65 64 20 62 79 20 56  s only used by V
31a60 69 73 75 61 6c 0d 0a 20 20 20 20 20 20 20 20 20  isual..         
31a70 20 20 20 2f 2f 20 20 20 20 20 20 20 53 74 75 64     //       Stud
31a80 69 6f 2c 20 77 68 69 63 68 20 69 73 20 63 75 72  io, which is cur
31a90 72 65 6e 74 6c 79 20 61 6c 77 61 79 73 20 33 32  rently always 32
31aa0 2d 62 69 74 20 6f 6e 6c 79 29 2e 0d 0a 20 20 20  -bit only)...   
31ab0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
31ac0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
31ad0 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67  format = !String
31ae0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70  .IsNullOrEmpty(p
31af0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a  latformName) ?..
31b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31b10 22 7b 30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  "{0}\\Microsoft\
31b20 5c 7b 31 7d 5c 5c 76 7b 32 7d 5c 5c 7b 33 7d 5c  \{1}\\v{2}\\{3}\
31b30 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  \AssemblyFolders
31b40 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20  Ex" :..         
31b50 20 20 20 20 20 20 20 22 7b 30 7d 5c 5c 4d 69 63         "{0}\\Mic
31b60 72 6f 73 6f 66 74 5c 5c 7b 31 7d 5c 5c 76 7b 32  rosoft\\{1}\\v{2
31b70 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  }\\AssemblyFolde
31b80 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  rsEx";....      
31b90 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
31ba0 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72 6d 61  ing.Format(forma
31bb0 74 2c 20 47 65 74 52 6f 6f 74 4b 65 79 4e 61 6d  t, GetRootKeyNam
31bc0 65 28 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  e(perUser, wow64
31bd0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
31be0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
31bf0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
31c00 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
31c10 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
31c20 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
31c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c70 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
31c80 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
31c90 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f   AddToAssemblyFo
31ca0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
31cb0 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
31cc0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
31cd0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
31ce0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
31cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
31d00 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
31d10 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
31d20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
31d30 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
31d40 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
31d50 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
31d60 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
31d70 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
31d80 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
31d90 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
31da0 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20  bool wow64,..   
31db0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
31dc0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
31dd0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
31de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
31df0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
31e00 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
31e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31e20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
31e30 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62  Name = GetAssemb
31e40 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65  lyFoldersKeyName
31e50 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
31e60 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
31e70 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
31e80 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
31e90 2c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20  , perUser,..    
31ea0 20 20 20 20 20 20 20 20 20 20 20 20 77 6f 77 36              wow6
31eb0 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  4);....         
31ec0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
31ed0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
31ee0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
31ef0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
31f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f10 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
31f20 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
31f30 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
31f40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
31f50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
31f60 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
31f70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
31f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f90 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
31fa0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
31fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31fc0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
31fd0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
31fe0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
31ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32000 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
32010 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
32020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32030 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
32040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
32050 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
32060 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
32070 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
32080 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
32090 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
320a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
320b0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
320c0 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
320d0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
320e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
320f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32100 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
32110 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32120 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
32130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32140 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32150 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
32160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32170 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
32180 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
32190 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
321a0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321c0 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
321d0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
321e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
321f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
32220 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
32230 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
32240 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
32250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
32260 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  ubKey, null, dir
32270 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20  ectory, whatIf, 
32280 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
32290 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
322a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
322b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
322c0 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
322d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
322e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
322f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32320 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
32330 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
32340 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41  bool RemoveFromA
32350 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
32360 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
32370 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
32380 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
32390 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
323a0 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
323b0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
323c0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
323d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
323e0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
323f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
32400 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
32410 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32420 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20  ool perUser,..  
32430 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
32440 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20  ow64,..         
32450 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d     bool throwOnM
32460 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  issing,..       
32470 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
32480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
32490 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
324a0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
324b0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
324c0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
324d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
324e0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
324f0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
32500 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
32510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
32520 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
32530 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
32540 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 70 65  platformName, pe
32550 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  rUser,..        
32560 20 20 20 20 20 20 20 20 77 6f 77 36 34 29 3b 0d          wow64);.
32570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
32580 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
32590 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
325a0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
325b0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
325c0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
325d0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72  Key, keyName, tr
325e0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
325f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
32600 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
32610 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
32620 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
32630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
32640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
32650 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
32660 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
32670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
32680 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
32690 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
326a0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
326b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
326c0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
326d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
326e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
326f0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
32700 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
32710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
32720 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
32730 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
32740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32750 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
32760 2c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67  , throwOnMissing
32770 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
32780 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
32790 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
327a0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
327b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
327c0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
327d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
327f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32810 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
32820 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
32830 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
32840 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
32850 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
32860 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
32870 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
32880 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
32890 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
328a0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
328b0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
328c0 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
328d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
328e0 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
328f0 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
32900 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
32910 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
32920 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
32930 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
32940 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
32950 20 20 20 20 20 20 62 6f 6f 6c 20 74 68 72 6f 77        bool throw
32960 4f 6e 4d 69 73 73 69 6e 67 2c 0d 0a 20 20 20 20  OnMissing,..    
32970 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
32980 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
32990 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
329a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
329b0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
329c0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
329d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
329e0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
329f0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
32a00 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
32a10 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
32a20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
32a30 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
32a40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
32a50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32a60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
32a70 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
32a80 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  rk callback data
32a90 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
32aa0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
32ab0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
32ad0 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
32ae0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
32af0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
32b00 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  rn RemoveFromAss
32b10 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
32b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b30 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
32b40 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
32b50 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
32b60 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
32b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32b80 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d  LegacyProjectNam
32b90 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36  e, perUser, wow6
32ba0 34 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  4, false, whatIf
32bb0 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  , verbose,..    
32bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32bd0 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20  ref error) &&.. 
32be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
32bf0 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64  ddToAssemblyFold
32c00 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
32c10 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
32c20 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
32c30 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
32c40 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
32c50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
32c60 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61         ProjectNa
32c70 6d 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55  me, pair.X, perU
32c80 73 65 72 2c 20 77 6f 77 36 34 2c 20 77 68 61 74  ser, wow64, what
32c90 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
32ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32cb0 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
32cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
32cd0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
32ce0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
32cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
32d00 65 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d  eturn RemoveFrom
32d10 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
32d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
32d30 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
32d40 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
32d50 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
32d60 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
32d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32d80 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20     ProjectName, 
32d90 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 20  perUser, wow64, 
32da0 74 68 72 6f 77 4f 6e 4d 69 73 73 69 6e 67 2c 20  throwOnMissing, 
32db0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
32dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
32dd0 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
32de0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
32df0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
32e00 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
32e10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
32e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32e60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
32e70 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
32e80 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  dio Handling..  
32e90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
32ea0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56  atic string GetV
32eb0 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 0d 0a 20  sRootKeyName(.. 
32ec0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
32ed0 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
32ee0 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
32ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
32f00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
32f10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
32f20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
32f30 7d 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69  }\\Microsoft\\Vi
32f40 73 75 61 6c 53 74 75 64 69 6f 22 2c 0d 0a 20 20  sualStudio",..  
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47 65                Ge
32f60 74 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72  tRootKeyName(per
32f70 55 73 65 72 2c 20 77 6f 77 36 34 29 29 3b 0d 0a  User, wow64));..
32f80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
32f90 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
32fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
32fe0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
32ff0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
33000 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  tVsKeyName(..   
33010 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
33020 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
33030 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
33040 73 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20  suffix,..       
33050 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55 73 65       bool perUse
33060 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
33070 62 6f 6f 6c 20 77 6f 77 36 34 0d 0a 20 20 20 20  bool wow64..    
33080 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
33090 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
330a0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
330b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
330c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
330d0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
330e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
330f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
33100 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
33110 7d 5c 5c 7b 31 7d 7b 32 7d 22 2c 20 47 65 74 56  }\\{1}{2}", GetV
33120 73 52 6f 6f 74 4b 65 79 4e 61 6d 65 28 70 65 72  sRootKeyName(per
33130 55 73 65 72 2c 20 77 6f 77 36 34 29 2c 20 76 73  User, wow64), vs
33140 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
33150 20 20 20 20 20 20 20 20 20 20 73 75 66 66 69 78            suffix
33160 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
33170 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
33180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
331c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
331d0 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
331e0 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61  o Data Source Ha
331f0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
33200 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
33210 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75  ool AddVsDataSou
33220 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
33230 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
33240 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
33250 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
33260 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
33270 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
33280 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
33290 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
332a0 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
332b0 20 20 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d    bool perUser,.
332c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
332d0 6c 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20  l wow64,..      
332e0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
332f0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
33300 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
33310 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
33320 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
33330 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
33340 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
33350 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
33360 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33370 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33380 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33390 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
333a0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
333b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
333c0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
333d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
333e0 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
333f0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
33400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
33410 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
33420 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
33430 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
33440 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
33450 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
33460 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
33470 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
33480 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
33490 6d 65 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75  me(vsVersion, su
334a0 66 66 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77  ffix, perUser, w
334b0 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ow64);....      
334c0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
334d0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
334e0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
334f0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
33500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33510 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
33520 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
33530 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
33540 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
33550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
33560 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
33590 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
335a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
335b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
335c0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
335d0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
335e0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
335f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
33600 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
33610 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
33620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33630 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
33640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33650 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
33660 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
33670 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
33680 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
33690 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
336a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
336b0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
336c0 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
336d0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
336e0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
336f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
33710 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
33720 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
33730 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
33740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33750 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
33760 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
33770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33780 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
33790 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
337a0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
337b0 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
337c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337d0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
337e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
337f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
33800 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
33810 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
33820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33830 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
33840 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75  istryKey dataSou
33850 72 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  rceKey =..      
33860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33870 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
33880 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
33890 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
338a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338b0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
338c0 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
338d0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
338e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
338f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
33900 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
33910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33920 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33940 20 69 66 20 28 64 61 74 61 53 6f 75 72 63 65 4b   if (dataSourceK
33950 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
33960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33970 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
33980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33990 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
339a0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
339b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339c0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
339d0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
339e0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
339f0 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20  \{1}", key,..   
33a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a10 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
33a20 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
33a30 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
33a40 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
33a70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
33a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
33a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
33ab0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
33ac0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
33ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ae0 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c    dataSourceKey,
33af0 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f   null, String.Fo
33b00 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
33b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b20 20 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73 65     "{0} Database
33b30 20 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e   File", ProjectN
33b40 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ame), whatIf,.. 
33b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b60 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
33b70 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
33b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b90 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
33ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
33bb0 4f 54 45 3a 20 54 68 69 73 20 76 61 6c 75 65 20  OTE: This value 
33bc0 69 73 20 6e 65 77 20 61 73 20 6f 66 20 31 2e 30  is new as of 1.0
33bd0 2e 38 33 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20  .83.0...        
33be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33bf0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
33c00 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
33c10 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
33c20 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
33c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c40 20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c    dataSourceKey,
33c50 20 22 44 65 66 61 75 6c 74 50 72 6f 76 69 64 65   "DefaultProvide
33c60 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r",..           
33c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33c80 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
33c90 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
33ca0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
33cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cc0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
33cd0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
33ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33cf0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
33d00 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
33d10 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65  Key(dataSourceKe
33d20 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
33d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53  String.Format("S
33d50 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65  upportingProvide
33d60 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  rs\\{0}",..     
33d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d80 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
33d90 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
33da0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
33db0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
33dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33dd0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
33de0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
33df0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
33e00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33e10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33e20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
33e30 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
33e40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
33e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
33e90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
33ea0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
33eb0 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61   bool RemoveVsDa
33ec0 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
33ed0 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
33ee0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
33ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
33f00 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
33f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
33f20 69 6e 67 20 73 75 66 66 69 78 2c 0d 0a 20 20 20  ing suffix,..   
33f30 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
33f40 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
33f50 20 20 20 20 20 20 20 62 6f 6f 6c 20 70 65 72 55         bool perU
33f60 73 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ser,..          
33f70 20 20 62 6f 6f 6c 20 77 6f 77 36 34 2c 0d 0a 20    bool wow64,.. 
33f80 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
33f90 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
33fa0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
33fb0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
33fc0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
33fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
33fe0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
33ff0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
34000 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
34010 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
34030 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
34040 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
34050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34060 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34070 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34080 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
34090 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
340a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
340b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
340c0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
340d0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
340e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
340f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
34100 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
34110 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
34120 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
34130 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
34140 6e 2c 20 73 75 66 66 69 78 2c 20 70 65 72 55 73  n, suffix, perUs
34150 65 72 2c 20 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20  er, wow64);.... 
34160 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
34170 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
34180 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
34190 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
341a0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
341b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
341c0 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
341d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
341e0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
341f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34200 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
34210 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
34220 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
34230 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
34240 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
34250 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
34260 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
34270 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
34280 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
34290 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
342a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
342b0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
342c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
342d0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
342e0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
342f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
34300 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34310 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
34320 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
34330 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
34340 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
34350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34360 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65  key, "DataSource
34370 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
34380 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
34390 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
343a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343b0 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
343c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
343d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
343e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
343f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
34400 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
34410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34420 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
34430 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
34440 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
34450 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20  ataSources",..  
34460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34470 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
34480 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
34490 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
344a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
344b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
344c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
344d0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
344e0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
344f0 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
34500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34510 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
34520 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
34530 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
34540 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
34550 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
34560 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
34570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34580 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
34590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
345a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
345b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
345c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
345d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
345f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34610 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
34620 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
34630 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  sVsDataSource(..
34640 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
34650 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
34660 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
34670 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
34680 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
34690 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78 2c    string suffix,
346a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
346b0 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
346c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
346d0 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ng directory,.. 
346e0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
346f0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
34700 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34710 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20 20  perUser,..      
34720 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36 34        bool wow64
34730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
34740 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73 69  ool throwOnMissi
34750 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng,..           
34760 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
34770 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
34780 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
34790 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
347a0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
347b0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
347c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
347d0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
347e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
347f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34800 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
34810 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
34820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34830 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
34840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
34850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
34860 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
34870 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
34880 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
34890 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
348a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
348b0 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
348c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
348d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
348e0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
348f0 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
34900 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
34910 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
34920 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
34930 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
34940 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
34950 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
34960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
34970 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f  turn AddVsDataSo
34980 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
34990 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
349a0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
349b0 75 66 66 69 78 2c 20 70 61 63 6b 61 67 65 2c 20  uffix, package, 
349c0 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34 2c 0d  perUser, wow64,.
349d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
349e0 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
349f0 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
34a00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
34a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
34a20 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
34a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
34a40 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
34a50 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a70 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
34a80 72 73 69 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70  rsion, suffix, p
34a90 61 63 6b 61 67 65 2c 20 70 65 72 55 73 65 72 2c  ackage, perUser,
34aa0 20 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20   wow64,..       
34ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
34ac0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
34ad0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
34ae0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
34af0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
34b00 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
34b10 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
34b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
34b60 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
34b70 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61  sual Studio Data
34b80 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c 69   Provider Handli
34b90 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
34ba0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
34bb0 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65  AddVsDataProvide
34bc0 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
34bd0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
34be0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
34bf0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
34c00 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
34c10 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
34c20 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
34c30 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
34c40 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
34c50 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
34c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
34c70 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20  ol perUser,..   
34c80 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f           bool wo
34c90 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
34ca0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
34cb0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
34cc0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
34cd0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
34ce0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
34cf0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
34d00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
34d10 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
34d20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34d30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34d40 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
34d50 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
34d60 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
34d70 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34d80 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
34d90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34da0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
34db0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
34dc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
34dd0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
34de0 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
34df0 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
34e00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
34e10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
34e20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
34e30 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
34e40 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
34e50 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66 69 78  sVersion, suffix
34e60 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77 36 34  , perUser, wow64
34e70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
34e80 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
34e90 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
34ea0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
34eb0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
34ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34ed0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
34ee0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
34ef0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
34f00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
34f10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
34f20 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
34f30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
34f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f50 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
34f60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
34f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34f80 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
34f90 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
34fa0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
34fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34fc0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
34fd0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
34fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34ff0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
35000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
35010 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35020 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
35030 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
35040 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
35050 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
35060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35070 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
35080 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
35090 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
350a0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
350b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
350c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
350d0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
350e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
350f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
35100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35110 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
35120 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
35130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35140 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
35150 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
35160 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
35170 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
35180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35190 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
351a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
351c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
351d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
351e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
351f0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
35200 69 73 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f  istryKey dataPro
35210 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20  viderKey =..    
35220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35230 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35240 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
35250 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
35260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35270 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
35280 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
35290 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
352a0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
352b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
352c0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
352d0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
352e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
352f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35300 20 20 20 20 20 69 66 20 28 64 61 74 61 50 72 6f       if (dataPro
35310 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c  viderKey == null
35320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
35330 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35350 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
35360 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
35370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35390 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
353a0 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
353b0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
353c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
353d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
353e0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
353f0 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
35400 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
35410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35430 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
35440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
35460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35470 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
35480 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
35490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354a0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
354b0 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c  oviderKey, null,
354c0 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68   Description, wh
354d0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
354e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
354f0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
35500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35510 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
35520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35530 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
35540 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77 20 61  s value is new a
35550 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e 20 20  s of 1.0.83.0.  
35560 48 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20  However,..      
35570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35580 20 20 2f 2f 20 20 20 20 20 20 20 69 74 20 73 68    //       it sh
35590 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 73 65 74  ould only be set
355a0 20 69 66 20 74 68 65 20 70 61 63 6b 61 67 65 20   if the package 
355b0 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..      
355c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
355d0 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 61    //       and a
355e0 6c 6c 20 74 68 65 20 61 73 73 65 6d 62 6c 69 65  ll the assemblie
355f0 73 20 69 74 20 72 65 66 65 72 73 20 74 6f 20 61  s it refers to a
35600 72 65 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20  re being..      
35610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35620 20 20 2f 2f 20 20 20 20 20 20 20 70 6c 61 63 65    //       place
35630 64 20 69 6e 74 6f 20 74 68 65 20 67 6c 6f 62 61  d into the globa
35640 6c 20 61 73 73 65 6d 62 6c 79 20 63 61 63 68 65  l assembly cache
35650 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
35660 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
35670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35680 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
35690 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62 6c  ge.GlobalAssembl
356a0 79 43 61 63 68 65 29 0d 0a 20 20 20 20 20 20 20  yCache)..       
356b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
356d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
356e0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
356f0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
35700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35710 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
35720 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73 73 65  oviderKey, "Asse
35730 6d 62 6c 79 22 2c 0d 0a 20 20 20 20 20 20 20 20  mbly",..        
35740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35750 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
35760 44 65 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79  DesignerAssembly
35770 4e 61 6d 65 2e 54 6f 53 74 72 69 6e 67 28 29 2c  Name.ToString(),
35780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
357a0 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
357b0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
357c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
357d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
357e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
357f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35800 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
35810 68 69 73 20 76 61 6c 75 65 20 69 73 20 6e 65 77  his value is new
35820 20 61 73 20 6f 66 20 31 2e 30 2e 38 33 2e 30 2e   as of 1.0.83.0.
35830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35840 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
35850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35860 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
35870 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
35880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35890 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
358a0 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 41 73  ProviderKey, "As
358b0 73 6f 63 69 61 74 65 64 53 6f 75 72 63 65 22 2c  sociatedSource",
358c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
358d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
358e0 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
358f0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
35900 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
35910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35920 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
35930 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
35940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35950 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35960 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
35970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35980 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
35990 76 69 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72  viderKey, "Invar
359a0 69 61 6e 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20  iantName",..    
359b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
359c0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
359d0 50 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  ProviderInvarian
359e0 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  tName, whatIf, v
359f0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
35a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a10 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
35a20 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
35a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a40 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
35a50 6f 76 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68  oviderKey, "Tech
35a60 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20  nology",..      
35a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35a80 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41 64        package.Ad
35a90 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64  oNetTechnologyId
35aa0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
35ab0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
35ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ad0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
35ae0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
35af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b00 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35b10 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
35b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b30 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
35b40 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73  derKey, "CodeBas
35b50 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68  e", fileName, wh
35b60 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
35b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b80 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
35b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ba0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
35bb0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
35bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
35be0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
35bf0 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c  FactoryService",
35c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
35c20 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e  ckage.ServiceId.
35c30 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
35c40 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  mat), whatIf,.. 
35c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c60 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
35c70 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
35c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35c90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
35ca0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
35cb0 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35cd0 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
35ce0 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
35cf0 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e  aConnectionUICon
35d00 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20  trol",..        
35d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
35d30 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d50 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
35d60 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74  CreateSubKey(dat
35d70 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20  aProviderKey,.. 
35d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d90 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70             "Supp
35da0 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61  ortedObjects\\Da
35db0 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70  taConnectionProp
35dc0 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20 20 20  erties",..      
35dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35de0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
35df0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
35e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e10 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
35e20 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
35e30 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
35e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35e50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
35e60 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
35e70 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75  DataConnectionSu
35e80 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
35e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
35eb0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
35ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ed0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
35ee0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
35ef0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
35f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f10 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
35f20 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
35f30 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f 72 74  ataObjectSupport
35f40 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
35f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f60 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
35f70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
35f80 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
35f90 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
35fa0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
35fb0 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fd0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
35fe0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 56 69  dObjects\\DataVi
35ff0 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74  ewSupport", what
36000 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
36010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36020 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
36030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36040 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
36050 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36060 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
36070 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
36080 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
36090 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
360e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
360f0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
36100 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65  oveVsDataProvide
36110 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
36120 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
36130 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
36140 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
36150 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
36160 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 66        string suf
36170 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  fix,..          
36180 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
36190 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
361a0 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
361b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
361c0 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
361d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
361e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
361f0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
36200 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
36210 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
36220 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
36230 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36240 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
36250 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
36260 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
36270 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
36280 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
36290 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
362a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
362b0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
362c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
362d0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
362e0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
362f0 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
36300 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
36310 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
36320 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
36330 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
36340 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
36350 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
36360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36370 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
36380 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
36390 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
363a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
363b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
363c0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
363d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
363e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
363f0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
36400 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
36410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36420 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
36430 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
36440 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
36450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36460 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
36470 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
36480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36490 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
364a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
364c0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
364d0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
364e0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
364f0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
36500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
36510 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
36520 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74  ataProviders", t
36530 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
36540 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
36550 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
36570 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
36580 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
36590 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
365a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365b0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
365c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
365d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365e0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
365f0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
36600 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72  key: {0}\\DataPr
36610 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  oviders",..     
36620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36630 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
36640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
36660 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
36670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36690 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
366a0 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
366b0 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
366c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
366d0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61  bKey, package.Da
366e0 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
366f0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
36700 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
36710 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
36720 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
36730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
36740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
36750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
36760 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
36770 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
36780 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
36790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
367c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
367d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
367e0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
367f0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
36800 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63  .            Moc
36810 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
36820 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
36830 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
36840 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
36850 20 20 20 73 74 72 69 6e 67 20 73 75 66 66 69 78     string suffix
36860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
36870 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
36880 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
36890 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ing directory,..
368a0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
368b0 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
368c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
368d0 20 70 65 72 55 73 65 72 2c 0d 0a 20 20 20 20 20   perUser,..     
368e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 6f 77 36         bool wow6
368f0 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4,..            
36900 62 6f 6f 6c 20 74 68 72 6f 77 4f 6e 4d 69 73 73  bool throwOnMiss
36910 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ing,..          
36920 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
36930 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
36940 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
36950 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
36960 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
36970 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
36980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
36990 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
369a0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
369b0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
369c0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
369d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
369e0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
369f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
36a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36a10 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
36a20 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
36a30 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
36a40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
36a50 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
36a60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
36a70 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
36a80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
36a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36aa0 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50  eturn AddVsDataP
36ab0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
36ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
36ad0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
36ae0 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b 61 67  , suffix, packag
36af0 65 2c 20 70 61 69 72 2e 58 2c 20 70 65 72 55 73  e, pair.X, perUs
36b00 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er,..           
36b10 20 20 20 20 20 20 20 20 20 77 6f 77 36 34 2c 20           wow64, 
36b20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
36b30 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
36b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
36b50 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
36b60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
36b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
36b80 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74  turn RemoveVsDat
36b90 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
36ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bb0 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
36bc0 6f 6e 2c 20 73 75 66 66 69 78 2c 20 70 61 63 6b  on, suffix, pack
36bd0 61 67 65 2c 20 70 65 72 55 73 65 72 2c 20 77 6f  age, perUser, wo
36be0 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  w64,..          
36bf0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
36c00 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
36c10 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
36c20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
36c30 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
36c40 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
36c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
36c90 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
36ca0 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
36cb0 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
36cc0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
36cd0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
36ce0 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
36cf0 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  eVsPackage(..   
36d00 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
36d10 70 72 6f 76 69 64 65 72 49 6e 76 61 72 69 61 6e  providerInvarian
36d20 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
36d30 20 20 20 20 73 74 72 69 6e 67 20 66 61 63 74 6f      string facto
36d40 72 79 54 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  ryTypeName,..   
36d50 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
36d60 79 4e 61 6d 65 20 70 72 6f 76 69 64 65 72 41 73  yName providerAs
36d70 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
36d80 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
36d90 79 4e 61 6d 65 20 64 65 73 69 67 6e 65 72 41 73  yName designerAs
36da0 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
36db0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 67 6c           bool gl
36dc0 6f 62 61 6c 41 73 73 65 6d 62 6c 79 43 61 63 68  obalAssemblyCach
36dd0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
36de0 72 65 66 20 50 61 63 6b 61 67 65 20 70 61 63 6b  ref Package pack
36df0 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  age..           
36e00 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
36e10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
36e20 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
36e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
36e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36e50 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20 50 61  package = new Pa
36e60 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  ckage();....    
36e70 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
36e80 61 67 65 2e 50 72 6f 76 69 64 65 72 49 6e 76 61  age.ProviderInva
36e90 72 69 61 6e 74 4e 61 6d 65 20 3d 20 70 72 6f 76  riantName = prov
36ea0 69 64 65 72 49 6e 76 61 72 69 61 6e 74 4e 61 6d  iderInvariantNam
36eb0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
36ec0 20 20 20 20 70 61 63 6b 61 67 65 2e 46 61 63 74      package.Fact
36ed0 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d 20 66 61  oryTypeName = fa
36ee0 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 3b 0d 0a  ctoryTypeName;..
36ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f00 70 61 63 6b 61 67 65 2e 50 72 6f 76 69 64 65 72  package.Provider
36f10 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 70  AssemblyName = p
36f20 72 6f 76 69 64 65 72 41 73 73 65 6d 62 6c 79 4e  roviderAssemblyN
36f30 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
36f40 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 65        package.De
36f50 73 69 67 6e 65 72 41 73 73 65 6d 62 6c 79 4e 61  signerAssemblyNa
36f60 6d 65 20 3d 20 64 65 73 69 67 6e 65 72 41 73 73  me = designerAss
36f70 65 6d 62 6c 79 4e 61 6d 65 3b 0d 0a 20 20 20 20  emblyName;..    
36f80 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
36f90 61 67 65 2e 47 6c 6f 62 61 6c 41 73 73 65 6d 62  age.GlobalAssemb
36fa0 6c 79 43 61 63 68 65 20 3d 20 67 6c 6f 62 61 6c  lyCache = global
36fb0 41 73 73 65 6d 62 6c 79 43 61 63 68 65 3b 0d 0a  AssemblyCache;..
36fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36fd0 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74    package.AdoNet
36fe0 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e  TechnologyId = n
36ff0 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
37000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 37                "7
37010 37 41 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41  7AB9A9D-78B9-4BA
37020 37 2d 39 31 41 43 2d 38 37 33 46 35 33 33 38 46  7-91AC-873F5338F
37030 31 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  1D2");....      
37040 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
37050 65 2e 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65  e.PackageId = ne
37060 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
37070 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43               "DC
37080 42 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39  BE6C8D-0E57-4099
37090 2d 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44  -A183-98FF74C64D
370a0 39 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  9C");....       
370b0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
370c0 2e 53 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77  .ServiceId = new
370d0 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
370e0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42              "DCB
370f0 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d  E6C8D-0E57-4099-
37100 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39  A183-98FF74C64D9
37110 44 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  D");....        
37120 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
37130 44 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e  DataSourceId = n
37140 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
37150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30                "0
37160 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34  EBAAB6E-CA80-4B4
37170 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38  A-8DDF-CBE6BF058
37180 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  C71");....      
37190 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
371a0 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64  e.DataProviderId
371b0 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
371c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
371d0 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30    "0EBAAB6E-CA80
371e0 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42  -4B4A-8DDF-CBE6B
371f0 46 30 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20  F058C70");..    
37200 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
37210 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
37220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37260 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
37270 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
37280 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b  c bool AddVsPack
37290 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
372a0 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
372b0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
372c0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
372d0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
372e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
372f0 75 66 66 69 78 2c 0d 0a 20 20 20 20 20 20 20 20  uffix,..        
37300 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
37310 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
37320 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
37330 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
37340 62 6f 6f 6c 20 70 65 72 55 73 65 72 2c 0d 0a 20  bool perUser,.. 
37350 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
37360 77 6f 77 36 34 2c 0d 0a 20 20 20 20 20 20 20 20  wow64,..        
37370 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
37380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
37390 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
373a0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
373b0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
373c0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
373d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
373e0 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d   if (vsVersion =
373f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37400 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
37410 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
37420 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73  "invalid VS vers
37430 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion";..         
37440 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
37450 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
37460 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37470 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d     if (package =
37480 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37490 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
374a0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
374b0 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b  "invalid VS pack
374c0 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  age";..         
374d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
374e0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
374f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
37500 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
37510 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
37520 28 76 73 56 65 72 73 69 6f 6e 2c 20 73 75 66 66  (vsVersion, suff
37530 69 78 2c 20 70 65 72 55 73 65 72 2c 20 77 6f 77  ix, perUser, wow
37540 36 34 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  64);....        
37550 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
37560 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
37570 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
37580 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
37590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
375a0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
375b0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
375c0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
375d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
375e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
375f0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
37600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37620 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
37630 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
37640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37650 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
37660 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
37670 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
37680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37690 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
376a0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
376b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
376d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
376f0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
37700 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
37710 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
37720 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
37730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37740 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50           key, "P
37750 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20  ackages", true, 
37760 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
37770 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
37780 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37790 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
377a0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
377b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
377c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
377d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
377e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
377f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
37800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37810 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
37820 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
37830 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d  {0}\\Packages",.
37840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37850 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
37860 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
37870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
37880 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
37890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
378b0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
378c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
378d0 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 57 41 52 4e    // NOTE: *WARN
378e0 49 4e 47 2a 20 43 68 61 6e 67 69 6e 67 20 61 6e  ING* Changing an
378f0 79 20 6f 66 20 74 68 65 73 65 20 76 61 6c 75 65  y of these value
37900 73 20 77 69 6c 6c 20 6c 69 6b 65 6c 79 0d 0a 20  s will likely.. 
37910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37920 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65 71 75     //       requ
37930 69 72 65 20 61 20 6e 65 77 20 22 70 61 63 6b 61  ire a new "packa
37940 67 65 20 6c 6f 61 64 20 6b 65 79 22 20 28 50 4c  ge load key" (PL
37950 4b 29 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  K) to be..      
37960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
37970 20 20 20 20 20 20 20 67 65 6e 65 72 61 74 65 64         generated
37980 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 70 72 6f   in order to pro
37990 70 65 72 6c 79 20 73 75 70 70 6f 72 74 20 6c 6f  perly support lo
379a0 61 64 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  ading the..     
379b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
379c0 2f 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20  /       package 
379d0 69 6e 74 6f 20 56 69 73 75 61 6c 20 53 74 75 64  into Visual Stud
379e0 69 6f 20 32 30 30 38 20 61 6e 64 20 65 61 72 6c  io 2008 and earl
379f0 69 65 72 20 77 69 74 68 6f 75 74 0d 0a 20 20 20  ier without..   
37a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37a10 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6d 61   //       the ma
37a20 74 63 68 69 6e 67 20 56 69 73 75 61 6c 20 53 74  tching Visual St
37a30 75 64 69 6f 20 53 44 4b 20 62 65 69 6e 67 20 69  udio SDK being i
37a40 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  nstalled...     
37a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37a60 2f 20 20 20 20 20 20 20 50 6c 65 61 73 65 20 72  /       Please r
37a70 65 66 65 72 20 74 6f 20 74 68 65 20 22 53 51 4c  efer to the "SQL
37a80 69 74 65 2e 44 65 73 69 67 6e 65 72 5c 70 6c 6b  ite.Designer\plk
37a90 2e 74 78 74 22 20 66 69 6c 65 0d 0a 20 20 20 20  .txt" file..    
37aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ab0 2f 2f 20 20 20 20 20 20 20 66 6f 72 20 74 68 65  //       for the
37ac0 20 65 78 69 73 74 69 6e 67 20 6f 66 66 69 63 69   existing offici
37ad0 61 6c 20 76 61 6c 75 65 73 20 61 6e 64 20 75 70  al values and up
37ae0 64 61 74 65 20 74 68 65 6d 20 69 66 0d 0a 20 20  date them if..  
37af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b00 20 20 2f 2f 20 20 20 20 20 20 20 6e 65 63 65 73    //       neces
37b10 73 61 72 79 2e 20 20 41 6c 73 6f 2c 20 74 68 65  sary.  Also, the
37b20 20 6e 65 77 6c 79 20 67 65 6e 65 72 61 74 65 64   newly generated
37b30 20 70 61 63 6b 61 67 65 20 6c 6f 61 64 0d 0a 20   package load.. 
37b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37b50 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65 79 20     //       key 
37b60 69 74 73 65 6c 66 2c 20 77 68 69 63 68 20 69 73  itself, which is
37b70 20 61 20 31 32 38 20 63 68 61 72 61 63 74 65 72   a 128 character
37b80 20 61 6c 70 68 61 6e 75 6d 65 72 69 63 0d 0a 20   alphanumeric.. 
37b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ba0 20 20 20 2f 2f 20 20 20 20 20 20 20 73 74 72 69     //       stri
37bb0 6e 67 2c 20 6d 75 73 74 20 62 65 20 70 6c 61 63  ng, must be plac
37bc0 65 64 20 69 6e 20 74 68 65 20 72 65 73 6f 75 72  ed in the resour
37bd0 63 65 20 73 74 72 69 6e 67 20 6e 61 6d 65 64 0d  ce string named.
37be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37bf0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 34       //       "4
37c00 30 30 22 20 69 6e 20 74 68 65 20 22 53 51 4c 69  00" in the "SQLi
37c10 74 65 2e 44 65 73 69 67 6e 65 72 5c 56 53 50 61  te.Designer\VSPa
37c20 63 6b 61 67 65 2e 72 65 73 78 22 20 66 69 6c 65  ckage.resx" file
37c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
37c40 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
37c50 6e 64 20 74 68 65 6e 20 74 68 65 20 64 65 73 69  nd then the desi
37c60 67 6e 65 72 20 61 73 73 65 6d 62 6c 79 20 69 74  gner assembly it
37c70 73 65 6c 66 20 6d 75 73 74 20 62 65 0d 0a 20 20  self must be..  
37c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37c90 20 20 2f 2f 20 20 20 20 20 20 20 72 65 63 6f 6d    //       recom
37ca0 70 69 6c 65 64 2e 20 20 41 73 20 6f 66 20 74 68  piled.  As of th
37cb0 69 73 20 77 72 69 74 69 6e 67 20 28 69 6e 20 46  is writing (in F
37cc0 65 62 72 75 61 72 79 20 32 30 31 32 29 2c 0d 0a  ebruary 2012),..
37cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ce0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
37cf0 20 66 6f 6c 6c 6f 77 69 6e 67 20 55 52 4c 20 69   following URL i
37d00 73 20 74 68 65 20 70 72 6f 70 65 72 20 70 6c 61  s the proper pla
37d10 63 65 20 74 6f 20 67 65 6e 65 72 61 74 65 0d 0a  ce to generate..
37d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37d30 20 20 20 20 2f 2f 20 20 20 20 20 20 20 70 61 63      //       pac
37d40 6b 61 67 65 20 6c 6f 61 64 20 6b 65 79 73 3a 0d  kage load keys:.
37d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37d60 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
37d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
37d80 20 20 20 20 20 20 68 74 74 70 3a 2f 2f 6d 73 64        http://msd
37d90 6e 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f  n.microsoft.com/
37da0 65 6e 2d 75 73 2f 76 73 74 75 64 69 6f 2f 63 63  en-us/vstudio/cc
37db0 36 35 35 37 39 35 0d 0a 20 20 20 20 20 20 20 20  655795..        
37dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
37dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37de0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
37df0 65 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61  egistryKey packa
37e00 67 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  geKey =..       
37e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
37e30 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
37e40 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
37e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37e60 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
37e70 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
37e80 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
37e90 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
37ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37eb0 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
37ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37ed0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
37ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
37ef0 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e  (packageKey == n
37f00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
37f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
37f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37f30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
37f40 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
37f50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
37f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37f70 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
37f80 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
37f90 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
37fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
37fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37fc0 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61   key, package.Pa
37fd0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
37fe0 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
37ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
38010 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
38020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38030 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
38040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38050 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
38060 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
38070 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  eKey, null,..   
38080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38090 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
380a0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
380b0 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50  gner Package", P
380c0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
380d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
380e0 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
380f0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
38100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38110 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
38120 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
38130 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73  ackageKey, "Clas
38140 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
38150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38160 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65   "SQLite.Designe
38170 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22  r.SQLitePackage"
38180 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
38190 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
381a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
381b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
381c0 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
381d0 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a  y, "CodeBase",..
381e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
381f0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
38200 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
38210 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
38220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38230 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
38240 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
38250 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30  geKey, "ID", 400
38260 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
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 76 65 72 62 6f 73 65 29 3b         verbose);
38290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
382a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
382b0 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47  ng directory = G
382c0 65 74 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72  etSystemDirector
382d0 79 28 77 6f 77 36 34 29 3b 0d 0a 0d 0a 20 20 20  y(wow64);....   
382e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
382f0 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f       if (directo
38300 72 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ry == null)..   
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 64 69 72 65 63 74 6f           directo
38330 72 79 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74  ry = String.Empt
38340 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  y;....          
38350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
38360 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
38370 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
38380 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33  , "InprocServer3
38390 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2",..           
383a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383b0 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
383c0 72 65 63 74 6f 72 79 2c 20 22 6d 73 63 6f 72 65  rectory, "mscore
383d0 65 2e 64 6c 6c 22 29 2c 0d 0a 20 20 20 20 20 20  e.dll"),..      
383e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
383f0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
38400 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
38410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38420 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
38430 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
38440 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e  geKey, "CompanyN
38450 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
38460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38470 20 20 20 22 68 74 74 70 3a 2f 2f 73 79 73 74 65     "http://syste
38480 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72  m.data.sqlite.or
38490 67 2f 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  g/", whatIf, ver
384a0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
384b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
384c0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
384d0 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
384e0 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f  eKey, "MinEditio
384f0 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
38500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38510 20 22 73 74 61 6e 64 61 72 64 22 2c 20 77 68 61   "standard", wha
38520 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
38530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
38540 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
38550 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
38560 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50  e(packageKey, "P
38570 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20  roductName",..  
38580 20 20 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 53 74 72 69 6e 67            String
385a0 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73  .Format("{0} Des
385b0 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20  igner Package", 
385c0 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20  ProjectName),.. 
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 20 20 20 20 77 68 61 74 49             whatI
385f0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
38600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38610 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
38620 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
38630 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f  packageKey, "Pro
38640 64 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20  ductVersion",.. 
38650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38660 20 20 20 20 20 20 20 20 20 20 20 22 31 2e 30 22             "1.0"
38670 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
38680 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
38690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
386a0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
386b0 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79  ryKey toolboxKey
386c0 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
386d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
386e0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
386f0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
38700 70 61 63 6b 61 67 65 4b 65 79 2c 0d 0a 20 20 20  packageKey,..   
38710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38720 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 6f               "To
38730 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49 66 2c 20  olbox", whatIf, 
38740 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
38750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38760 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
38770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
38780 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79    if (toolboxKey
38790 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
387a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
387b0 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72 6f 72 20            error 
387e0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
387f0 0d 0a 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 20 20                  
38810 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74